From 9e75f44f1acdf35c2b091b900a920ddc21bad0f0 Mon Sep 17 00:00:00 2001 From: Olamide Isreal Date: Mon, 27 Jul 2026 21:59:52 +0100 Subject: [PATCH] Digital Trials pipeline configured for WES Source-only snapshot of the cluster branch for WES execution. Large reference files (HPA/MANE/ensemble FASTA, model weights, ~597 MB) are omitted: they are baked into the container images at build time and mounted from the dreamdock-data PVC at runtime, and exceed the Gitea request size limit. Pipeline entry point is main.nf, which orchestrates the biotransformer, conplex and tissue modules as a single workflow. Ligand inputs are read from the eureka workspace; protein_zarr and chembl_db come from the dreamdock-data PVC. --- .gitignore | 12 + .nextflow.log | 79 ++ .nextflow.log.1 | 757 ++++++++++++++ .nextflow.log.2 | 971 ++++++++++++++++++ .nextflow.log.3 | 117 +++ .nextflow.log.4 | 117 +++ .nextflow.log.5 | 122 +++ .nextflow.log.6 | 203 ++++ .nextflow.log.7 | 189 ++++ .nextflow.log.8 | 96 ++ .nextflow.log.9 | 189 ++++ .nextflow.pid | 1 + CLAUDE.md | 121 +++ Dockerfile_biotransformer | 71 ++ Dockerfile_chembl | 15 + Dockerfile_conplex | 127 +++ Dockerfile_network | 21 + Dockerfile_tissue | 20 + Dockerfile_tissue.old | 61 ++ Dockerfile_tissue.old2 | 56 + Note.txt | 5 + app_network/network.r | 248 +++++ app_network/network2.r | 376 +++++++ app_network/network_enrich.py | 283 +++++ app_network/network_enrich_offline.py | 332 ++++++ conplex.py | 145 +++ digital-trial/Dockerfile_biotransformer | 71 ++ digital-trial/Dockerfile_conplex | 127 +++ digital-trial/Dockerfile_tissue | 60 ++ digital-trial/Note.txt | 5 + digital-trial/Phase1-2proteins.tsv | 217 ++++ digital-trial/README.md | 42 + digital-trial/conplex.py | 145 +++ digital-trial/drug_tissue_distribution.py | 39 + digital-trial/get_round_2.py | 78 ++ digital-trial/main_biotransformer.nf | 220 ++++ digital-trial/main_conplex.nf | 123 +++ digital-trial/main_tissue.nf | 22 + digital-trial/nextflow.config | 15 + digital-trial/params.json | 192 ++++ digital-trial/test.nf | 61 ++ digital-trial/test.nf.save | 49 + digital_patient_extract_metrics.py | 239 +++++ docker-compose.yml | 21 + drug_tissue_distribution.py | 67 ++ get_round_2.py | 78 ++ k8s/README.md | 15 + k8s/deployment-worksplace.yaml | 73 ++ k8s/job-copy-node-to-pvc.yaml | 54 + k8s/job-nextflow-digital-trials.yaml | 52 + main.nf | 169 +++ main_biotransformer.nf | 392 +++++++ main_conplex.nf | 239 +++++ main_conplex.nf.old | 125 +++ main_tissue.nf | 57 + nextflow.config | 90 ++ nextflow.config.old | 69 ++ nf_metabol_screen_adaptive/.nextflow.log | 94 ++ nf_metabol_screen_adaptive/.nextflow.log.1 | 67 ++ nf_metabol_screen_adaptive/.nextflow.log.2 | 80 ++ nf_metabol_screen_adaptive/.nextflow.log.3 | 67 ++ nf_metabol_screen_adaptive/.nextflow.log.4 | 67 ++ nf_metabol_screen_adaptive/.nextflow.log.5 | 69 ++ nf_metabol_screen_adaptive/.nextflow.log.6 | 78 ++ nf_metabol_screen_adaptive/.nextflow.pid | 1 + nf_metabol_screen_adaptive/Dockerfile | 20 + ...linux_2_17_x86_64.manylinux2014_x86_64.whl | Bin 0 -> 348148 bytes nf_metabol_screen_adaptive/app/convert.py | 134 +++ nf_metabol_screen_adaptive/app/get_round_2.py | 225 ++++ .../app/old_get_round_20.py | 143 +++ nf_metabol_screen_adaptive/app/old_screen.py | 127 +++ nf_metabol_screen_adaptive/app/screen.py | 144 +++ nf_metabol_screen_adaptive/docker-compose.yml | 14 + .../execution_timeline.html | 223 ++++ .../execution_trace.txt | 2 + nf_metabol_screen_adaptive/main.nf | 24 + nf_metabol_screen_adaptive/nextflow.config | 113 ++ nf_metabol_screen_adaptive/test.nf | 17 + params.json | 192 ++++ params/input_knowen_target.json | 19 + params/input_to_run.json | 19 + test.nf.bk | 61 ++ test.nf.save | 49 + test_bio_metrics_only.nf | 33 + test_no_bt.nf | 93 ++ test_string_only.nf | 27 + 86 files changed, 10142 insertions(+) create mode 100644 .gitignore create mode 100644 .nextflow.log create mode 100644 .nextflow.log.1 create mode 100644 .nextflow.log.2 create mode 100644 .nextflow.log.3 create mode 100644 .nextflow.log.4 create mode 100644 .nextflow.log.5 create mode 100644 .nextflow.log.6 create mode 100644 .nextflow.log.7 create mode 100644 .nextflow.log.8 create mode 100644 .nextflow.log.9 create mode 100755 .nextflow.pid create mode 100644 CLAUDE.md create mode 100755 Dockerfile_biotransformer create mode 100644 Dockerfile_chembl create mode 100755 Dockerfile_conplex create mode 100644 Dockerfile_network create mode 100755 Dockerfile_tissue create mode 100755 Dockerfile_tissue.old create mode 100755 Dockerfile_tissue.old2 create mode 100755 Note.txt create mode 100644 app_network/network.r create mode 100644 app_network/network2.r create mode 100644 app_network/network_enrich.py create mode 100644 app_network/network_enrich_offline.py create mode 100755 conplex.py create mode 100644 digital-trial/Dockerfile_biotransformer create mode 100644 digital-trial/Dockerfile_conplex create mode 100755 digital-trial/Dockerfile_tissue create mode 100644 digital-trial/Note.txt create mode 100644 digital-trial/Phase1-2proteins.tsv create mode 100644 digital-trial/README.md create mode 100755 digital-trial/conplex.py create mode 100644 digital-trial/drug_tissue_distribution.py create mode 100755 digital-trial/get_round_2.py create mode 100644 digital-trial/main_biotransformer.nf create mode 100644 digital-trial/main_conplex.nf create mode 100755 digital-trial/main_tissue.nf create mode 100644 digital-trial/nextflow.config create mode 100644 digital-trial/params.json create mode 100644 digital-trial/test.nf create mode 100644 digital-trial/test.nf.save create mode 100644 digital_patient_extract_metrics.py create mode 100644 docker-compose.yml create mode 100644 drug_tissue_distribution.py create mode 100755 get_round_2.py create mode 100644 k8s/README.md create mode 100644 k8s/deployment-worksplace.yaml create mode 100644 k8s/job-copy-node-to-pvc.yaml create mode 100644 k8s/job-nextflow-digital-trials.yaml create mode 100644 main.nf create mode 100755 main_biotransformer.nf create mode 100644 main_conplex.nf create mode 100755 main_conplex.nf.old create mode 100755 main_tissue.nf create mode 100755 nextflow.config create mode 100755 nextflow.config.old create mode 100644 nf_metabol_screen_adaptive/.nextflow.log create mode 100644 nf_metabol_screen_adaptive/.nextflow.log.1 create mode 100644 nf_metabol_screen_adaptive/.nextflow.log.2 create mode 100644 nf_metabol_screen_adaptive/.nextflow.log.3 create mode 100644 nf_metabol_screen_adaptive/.nextflow.log.4 create mode 100644 nf_metabol_screen_adaptive/.nextflow.log.5 create mode 100644 nf_metabol_screen_adaptive/.nextflow.log.6 create mode 100644 nf_metabol_screen_adaptive/.nextflow.pid create mode 100644 nf_metabol_screen_adaptive/Dockerfile create mode 100644 nf_metabol_screen_adaptive/app/bitexpand-0.1.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl create mode 100644 nf_metabol_screen_adaptive/app/convert.py create mode 100755 nf_metabol_screen_adaptive/app/get_round_2.py create mode 100644 nf_metabol_screen_adaptive/app/old_get_round_20.py create mode 100644 nf_metabol_screen_adaptive/app/old_screen.py create mode 100644 nf_metabol_screen_adaptive/app/screen.py create mode 100644 nf_metabol_screen_adaptive/docker-compose.yml create mode 100644 nf_metabol_screen_adaptive/execution_timeline.html create mode 100644 nf_metabol_screen_adaptive/execution_trace.txt create mode 100644 nf_metabol_screen_adaptive/main.nf create mode 100644 nf_metabol_screen_adaptive/nextflow.config create mode 100644 nf_metabol_screen_adaptive/test.nf create mode 100644 params.json create mode 100644 params/input_knowen_target.json create mode 100644 params/input_to_run.json create mode 100755 test.nf.bk create mode 100755 test.nf.save create mode 100644 test_bio_metrics_only.nf create mode 100644 test_no_bt.nf create mode 100644 test_string_only.nf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2f3b62 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +work +.nextflow +*.ignored +ncbiproteins_seq* + +/input/ + +# Large STRING-DB reference files (baked into Docker image, not needed in git) +app_network/9606.protein.aliases.v12.0.txt +app_network/9606.protein.enrichment.terms.v12.0.txt +app_network/9606.protein.links.detailed.v12.0.txt +app_network/9606.protein.links.v12.0.txt \ No newline at end of file diff --git a/.nextflow.log b/.nextflow.log new file mode 100644 index 0000000..5fb2b0b --- /dev/null +++ b/.nextflow.log @@ -0,0 +1,79 @@ +Apr-03 17:30:46.267 [main] DEBUG nextflow.cli.Launcher - $> nextflow run test_string_only.nf -params-file /data/runs/R01-caline-nac_similar/J15-string/params.json +Apr-03 17:30:46.687 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 25.04.3 +Apr-03 17:30:46.758 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/home/omic/.nextflow/plugins; core-plugins: nf-amazon@2.15.0,nf-azure@1.16.0,nf-cloudcache@0.4.3,nf-codecommit@0.2.3,nf-console@1.2.1,nf-google@1.21.0,nf-k8s@1.0.0,nf-tower@1.11.3,nf-wave@1.12.1 +Apr-03 17:30:46.876 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Apr-03 17:30:46.878 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Apr-03 17:30:46.882 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Apr-03 17:30:46.898 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Apr-03 17:30:46.926 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugra/digital_trials/nextflow.config +Apr-03 17:30:46.930 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugra/digital_trials/nextflow.config +Apr-03 17:30:46.985 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /home/omic/.nextflow/secrets/store.json +Apr-03 17:30:46.991 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@6ef81f31] - activable => nextflow.secret.LocalSecretsProvider@6ef81f31 +Apr-03 17:30:47.022 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `standard` +Apr-03 17:30:47.826 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 from script declaration +Apr-03 17:30:47.850 [main] DEBUG nextflow.cli.CmdRun - Launching `test_string_only.nf` [deadly_faggin] DSL2 - revision: 8e3db5067a +Apr-03 17:30:47.852 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Apr-03 17:30:47.853 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[nf-tower@1.11.3] +Apr-03 17:30:47.855 [main] DEBUG nextflow.plugin.PluginUpdater - Installing plugin nf-tower version: 1.11.3 +Apr-03 17:30:47.877 [main] INFO org.pf4j.AbstractPluginManager - Plugin 'nf-tower@1.11.3' resolved +Apr-03 17:30:47.877 [main] INFO org.pf4j.AbstractPluginManager - Start plugin 'nf-tower@1.11.3' +Apr-03 17:30:47.962 [main] DEBUG nextflow.plugin.BasePlugin - Plugin started nf-tower@1.11.3 +Apr-03 17:30:48.062 [main] DEBUG nextflow.Session - Session UUID: 4c59e728-8373-423d-b172-5781faf18d0f +Apr-03 17:30:48.062 [main] DEBUG nextflow.Session - Run name: deadly_faggin +Apr-03 17:30:48.063 [main] DEBUG nextflow.Session - Executor pool size: 80 +Apr-03 17:30:48.073 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Apr-03 17:30:48.081 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Apr-03 17:30:48.208 [main] DEBUG nextflow.cli.CmdRun - + Version: 25.04.3 build 5949 + Created: 02-06-2025 20:56 UTC + System: Linux 6.11.0-26-generic + Runtime: Groovy 4.0.26 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 2896370@k8s-node23 [127.0.1.1] + CPUs: 80 - Mem: 251.6 GB (184.8 GB) - Swap: 0 (0) +Apr-03 17:30:48.264 [main] DEBUG nextflow.Session - Work-dir: /data/bugra/digital_trials/work [btrfs] +Apr-03 17:30:48.265 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugra/digital_trials/bin +Apr-03 17:30:48.294 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Apr-03 17:30:48.318 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Apr-03 17:30:48.323 [main] DEBUG nextflow.Session - Observer factory: TowerFactory +Apr-03 17:30:48.325 [main] DEBUG nextflow.Session - Observer factory (v2): LinObserverFactory +Apr-03 17:30:48.355 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Apr-03 17:30:48.372 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 81; maxThreads: 1000 +Apr-03 17:30:48.619 [main] DEBUG nextflow.Session - Session start +Apr-03 17:30:48.966 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Apr-03 17:30:49.582 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Apr-03 17:30:49.583 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Apr-03 17:30:49.590 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Apr-03 17:30:49.601 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=80; memory=251.6 GB; capacity=80; pollInterval=100ms; dumpInterval=5m +Apr-03 17:30:49.604 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Apr-03 17:30:49.637 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'NETWORK_ENRICHMENT': maxForks=0; fair=false; array=0 +Apr-03 17:30:49.680 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: CONPLEX, MERGE_DRUG, MERGE_INTERACTIONS, NETWORK_ENRICHMENT, PREPROCESS_PROTEIN +Apr-03 17:30:49.682 [main] DEBUG nextflow.Session - Igniting dataflow network (2) +Apr-03 17:30:49.684 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > NETWORK_ENRICHMENT +Apr-03 17:30:49.685 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_98e4d45ae72cf7d4: /data/bugra/digital_trials/test_string_only.nf + Script_158116c0b930c4dd: /data/bugra/digital_trials/main_conplex.nf +Apr-03 17:30:49.685 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Apr-03 17:30:49.685 [main] DEBUG nextflow.Session - Session await +Apr-03 17:30:49.974 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Apr-03 17:30:49.979 [Task submitter] INFO nextflow.Session - [eb/7f494f] Submitted process > NETWORK_ENRICHMENT (1) +Apr-03 17:30:49.996 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Apr-03 17:30:49.997 [Task submitter] INFO nextflow.Session - [e9/27e18e] Submitted process > NETWORK_ENRICHMENT (2) +Apr-03 17:30:50.004 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Apr-03 17:30:50.004 [Task submitter] INFO nextflow.Session - [d2/7834f1] Submitted process > NETWORK_ENRICHMENT (3) +Apr-03 17:31:00.726 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 3; name: NETWORK_ENRICHMENT (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/d2/7834f119d9556ee05e00daf44d874b] +Apr-03 17:31:00.728 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Apr-03 17:31:00.850 [TaskFinalizer-1] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'PublishDir' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Apr-03 17:31:02.158 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 2; name: NETWORK_ENRICHMENT (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/e9/27e18e08e53e0c4d45c5407deebea2] +Apr-03 17:31:02.185 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: NETWORK_ENRICHMENT (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/eb/7f494fae594fe3be1f36cd54af9382] +Apr-03 17:31:02.198 [main] DEBUG nextflow.Session - Session await > all processes finished +Apr-03 17:31:02.288 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Apr-03 17:31:02.288 [main] DEBUG nextflow.Session - Session await > all barriers passed +Apr-03 17:31:02.291 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'TaskFinalizer' shutdown completed (hard=false) +Apr-03 17:31:02.292 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'PublishDir' shutdown completed (hard=false) +Apr-03 17:31:02.307 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=3; failedCount=0; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=0; abortedCount=0; succeedDuration=35s; failedDuration=0ms; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=3; peakCpus=3; peakMemory=3 GB; ] +Apr-03 17:31:02.512 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Apr-03 17:31:02.595 [main] INFO org.pf4j.AbstractPluginManager - Stop plugin 'nf-tower@1.11.3' +Apr-03 17:31:02.595 [main] DEBUG nextflow.plugin.BasePlugin - Plugin stopped nf-tower +Apr-03 17:31:02.597 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'FileTransfer' shutdown completed (hard=false) +Apr-03 17:31:02.597 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/.nextflow.log.1 b/.nextflow.log.1 new file mode 100644 index 0000000..fffcfb3 --- /dev/null +++ b/.nextflow.log.1 @@ -0,0 +1,757 @@ +Mar-23 12:31:42.184 [main] DEBUG nextflow.cli.Launcher - $> nextflow run test.nf -params-file /data/runs/R01-caline-nac_similar/J02-digtrial/params.json +Mar-23 12:31:42.570 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 25.04.3 +Mar-23 12:31:42.599 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/home/omic/.nextflow/plugins; core-plugins: nf-amazon@2.15.0,nf-azure@1.16.0,nf-cloudcache@0.4.3,nf-codecommit@0.2.3,nf-console@1.2.1,nf-google@1.21.0,nf-k8s@1.0.0,nf-tower@1.11.3,nf-wave@1.12.1 +Mar-23 12:31:42.635 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Mar-23 12:31:42.636 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Mar-23 12:31:42.639 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Mar-23 12:31:42.653 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Mar-23 12:31:42.679 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugra/digital_trials/nextflow.config +Mar-23 12:31:42.682 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugra/digital_trials/nextflow.config +Mar-23 12:31:42.722 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /home/omic/.nextflow/secrets/store.json +Mar-23 12:31:42.727 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@6ef81f31] - activable => nextflow.secret.LocalSecretsProvider@6ef81f31 +Mar-23 12:31:42.756 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `standard` +Mar-23 12:31:43.516 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 from script declaration +Mar-23 12:31:43.541 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [distraught_dijkstra] DSL2 - revision: 0e14afbd94 +Mar-23 12:31:43.543 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Mar-23 12:31:43.544 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[nf-tower@1.11.3] +Mar-23 12:31:43.547 [main] DEBUG nextflow.plugin.PluginUpdater - Installing plugin nf-tower version: 1.11.3 +Mar-23 12:31:43.560 [main] INFO org.pf4j.AbstractPluginManager - Plugin 'nf-tower@1.11.3' resolved +Mar-23 12:31:43.561 [main] INFO org.pf4j.AbstractPluginManager - Start plugin 'nf-tower@1.11.3' +Mar-23 12:31:43.580 [main] DEBUG nextflow.plugin.BasePlugin - Plugin started nf-tower@1.11.3 +Mar-23 12:31:43.662 [main] DEBUG nextflow.Session - Session UUID: df1066b0-f8aa-4422-8387-039b7127dc16 +Mar-23 12:31:43.663 [main] DEBUG nextflow.Session - Run name: distraught_dijkstra +Mar-23 12:31:43.664 [main] DEBUG nextflow.Session - Executor pool size: 80 +Mar-23 12:31:43.677 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Mar-23 12:31:43.686 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Mar-23 12:31:43.723 [main] DEBUG nextflow.cli.CmdRun - + Version: 25.04.3 build 5949 + Created: 02-06-2025 20:56 UTC + System: Linux 6.11.0-26-generic + Runtime: Groovy 4.0.26 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 3209064@k8s-node23 [127.0.1.1] + CPUs: 80 - Mem: 251.6 GB (174.9 GB) - Swap: 0 (0) +Mar-23 12:31:43.756 [main] DEBUG nextflow.Session - Work-dir: /data/bugra/digital_trials/work [btrfs] +Mar-23 12:31:43.757 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugra/digital_trials/bin +Mar-23 12:31:43.773 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Mar-23 12:31:43.789 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Mar-23 12:31:43.795 [main] DEBUG nextflow.Session - Observer factory: TowerFactory +Mar-23 12:31:43.798 [main] DEBUG nextflow.Session - Observer factory (v2): LinObserverFactory +Mar-23 12:31:43.832 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Mar-23 12:31:43.844 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 81; maxThreads: 1000 +Mar-23 12:31:44.024 [main] DEBUG nextflow.Session - Session start +Mar-23 12:31:44.500 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Mar-23 12:31:45.370 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-23 12:31:45.371 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-23 12:31:45.378 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Mar-23 12:31:45.388 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=80; memory=251.6 GB; capacity=80; pollInterval=100ms; dumpInterval=5m +Mar-23 12:31:45.391 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Mar-23 12:31:45.425 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'HUMAN_TRANSFORMER': maxForks=0; fair=false; array=0 +Mar-23 12:31:45.535 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-23 12:31:45.536 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-23 12:31:45.538 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'GET_FINAL_METABOLITES_STATIC': maxForks=0; fair=false; array=0 +Mar-23 12:31:45.551 [main] DEBUG nextflow.script.ProcessConfig - Config settings `withLabel:gpu_process` matches labels `gpu_process` for process with name PREPROCESS_PROTEIN +Mar-23 12:31:45.556 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-23 12:31:45.556 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-23 12:31:45.558 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'PREPROCESS_PROTEIN': maxForks=0; fair=false; array=0 +Mar-23 12:31:45.616 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-23 12:31:45.616 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-23 12:31:45.617 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'CONPLEX_ALL': maxForks=0; fair=false; array=0 +Mar-23 12:31:45.648 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-23 12:31:45.648 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-23 12:31:45.649 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'NETWORK_ENRICHMENT': maxForks=0; fair=false; array=0 +Mar-23 12:31:45.657 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-23 12:31:45.657 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-23 12:31:45.658 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'TISSUE_DISTRIBUTION': maxForks=0; fair=false; array=0 +Mar-23 12:31:45.669 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-23 12:31:45.669 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-23 12:31:45.670 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'BIO_METRICS': maxForks=0; fair=false; array=0 +Mar-23 12:31:45.673 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: HUMAN_TRANSFORMER, METABOLITES_BY_MASS, GET_FINAL_METABOLITES_STATIC, CONPLEX_ALL, NETWORK_ENRICHMENT, GET_FINAL_METABOLITES, CONPLEX, BIO_METRICS, SUPER_TRANSFORMER, TISSUE_DISTRIBUTION, MERGE_DRUG, MERGE_INTERACTIONS, PREPROCESS_PROTEIN, ORDERED_SEQUENCE +Mar-23 12:31:45.676 [main] DEBUG nextflow.Session - Igniting dataflow network (11) +Mar-23 12:31:45.683 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > HUMAN_TRANSFORMER +Mar-23 12:31:45.684 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > GET_FINAL_METABOLITES_STATIC +Mar-23 12:31:45.685 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > PREPROCESS_PROTEIN +Mar-23 12:31:45.686 [PathVisitor-3] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /mnt/dreamdock-data/digital_trials/input/blank/; pattern: *.fasta; options: [:] +Mar-23 12:31:45.686 [PathVisitor-1] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /data/runs/R01-caline-nac_similar/input/ligands/; pattern: *.csv; options: [:] +Mar-23 12:31:45.686 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > CONPLEX_ALL +Mar-23 12:31:45.687 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > NETWORK_ENRICHMENT +Mar-23 12:31:45.687 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > TISSUE_DISTRIBUTION +Mar-23 12:31:45.688 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > BIO_METRICS +Mar-23 12:31:45.689 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_d345b7a65a8f3255: /data/bugra/digital_trials/main_conplex.nf + Script_ec2c89c0dbf76553: /data/bugra/digital_trials/test.nf + Script_e613579b607a4f34: /data/bugra/digital_trials/main_biotransformer.nf + Script_ec01f2a38db15aa5: /data/bugra/digital_trials/main_tissue.nf +Mar-23 12:31:45.689 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Mar-23 12:31:45.689 [main] DEBUG nextflow.Session - Session await +Mar-23 12:31:45.997 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.000 [Task submitter] INFO nextflow.Session - [11/907b6d] Submitted process > HUMAN_TRANSFORMER (27) +Mar-23 12:31:46.011 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.012 [Task submitter] INFO nextflow.Session - [dc/09507c] Submitted process > HUMAN_TRANSFORMER (20) +Mar-23 12:31:46.018 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.019 [Task submitter] INFO nextflow.Session - [20/1a7d4d] Submitted process > HUMAN_TRANSFORMER (17) +Mar-23 12:31:46.025 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.025 [Task submitter] INFO nextflow.Session - [ae/d4edcb] Submitted process > HUMAN_TRANSFORMER (21) +Mar-23 12:31:46.030 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.031 [Task submitter] INFO nextflow.Session - [66/85b2c7] Submitted process > HUMAN_TRANSFORMER (23) +Mar-23 12:31:46.037 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.037 [Task submitter] INFO nextflow.Session - [f7/f16540] Submitted process > HUMAN_TRANSFORMER (2) +Mar-23 12:31:46.042 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.042 [Task submitter] INFO nextflow.Session - [f1/b1e309] Submitted process > HUMAN_TRANSFORMER (16) +Mar-23 12:31:46.047 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.048 [Task submitter] INFO nextflow.Session - [1e/26e912] Submitted process > HUMAN_TRANSFORMER (14) +Mar-23 12:31:46.053 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.053 [Task submitter] INFO nextflow.Session - [f3/2167e6] Submitted process > HUMAN_TRANSFORMER (4) +Mar-23 12:31:46.058 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.059 [Task submitter] INFO nextflow.Session - [c2/2ce2ac] Submitted process > HUMAN_TRANSFORMER (1) +Mar-23 12:31:46.065 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.065 [Task submitter] INFO nextflow.Session - [9c/107234] Submitted process > HUMAN_TRANSFORMER (22) +Mar-23 12:31:46.070 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.071 [Task submitter] INFO nextflow.Session - [02/506940] Submitted process > HUMAN_TRANSFORMER (8) +Mar-23 12:31:46.076 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.076 [Task submitter] INFO nextflow.Session - [35/b8dc93] Submitted process > HUMAN_TRANSFORMER (9) +Mar-23 12:31:46.081 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.081 [Task submitter] INFO nextflow.Session - [8f/b72148] Submitted process > HUMAN_TRANSFORMER (5) +Mar-23 12:31:46.085 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.086 [Task submitter] INFO nextflow.Session - [9e/68d27c] Submitted process > HUMAN_TRANSFORMER (19) +Mar-23 12:31:46.090 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.090 [Task submitter] INFO nextflow.Session - [ce/eac613] Submitted process > HUMAN_TRANSFORMER (7) +Mar-23 12:31:46.095 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.096 [Task submitter] INFO nextflow.Session - [88/d6f61a] Submitted process > HUMAN_TRANSFORMER (11) +Mar-23 12:31:46.100 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.100 [Task submitter] INFO nextflow.Session - [de/d2b3da] Submitted process > HUMAN_TRANSFORMER (10) +Mar-23 12:31:46.105 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.106 [Task submitter] INFO nextflow.Session - [85/3e7894] Submitted process > HUMAN_TRANSFORMER (13) +Mar-23 12:31:46.128 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.129 [Task submitter] INFO nextflow.Session - [58/5a1016] Submitted process > HUMAN_TRANSFORMER (32) +Mar-23 12:31:46.135 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.136 [Task submitter] INFO nextflow.Session - [d7/93d38d] Submitted process > HUMAN_TRANSFORMER (29) +Mar-23 12:31:46.142 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.143 [Task submitter] INFO nextflow.Session - [d6/937a35] Submitted process > HUMAN_TRANSFORMER (12) +Mar-23 12:31:46.149 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.150 [Task submitter] INFO nextflow.Session - [e1/2d650b] Submitted process > HUMAN_TRANSFORMER (25) +Mar-23 12:31:46.154 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.155 [Task submitter] INFO nextflow.Session - [8c/614048] Submitted process > HUMAN_TRANSFORMER (28) +Mar-23 12:31:46.160 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.161 [Task submitter] INFO nextflow.Session - [a7/55cb6c] Submitted process > HUMAN_TRANSFORMER (31) +Mar-23 12:31:46.166 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.167 [Task submitter] INFO nextflow.Session - [7f/fffcfc] Submitted process > HUMAN_TRANSFORMER (6) +Mar-23 12:31:46.182 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.185 [Task submitter] INFO nextflow.Session - [1d/701bd0] Submitted process > HUMAN_TRANSFORMER (26) +Mar-23 12:31:46.191 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.192 [Task submitter] INFO nextflow.Session - [9d/1c6085] Submitted process > HUMAN_TRANSFORMER (24) +Mar-23 12:31:46.196 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.196 [Task submitter] INFO nextflow.Session - [ba/11e874] Submitted process > HUMAN_TRANSFORMER (30) +Mar-23 12:31:46.200 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.201 [Task submitter] INFO nextflow.Session - [30/24835f] Submitted process > HUMAN_TRANSFORMER (18) +Mar-23 12:31:46.206 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.206 [Task submitter] INFO nextflow.Session - [4f/522cdb] Submitted process > HUMAN_TRANSFORMER (15) +Mar-23 12:31:46.213 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:31:46.214 [Task submitter] INFO nextflow.Session - [f8/10a61c] Submitted process > HUMAN_TRANSFORMER (3) +Mar-23 12:32:26.204 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 20; name: HUMAN_TRANSFORMER (20); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/dc/09507c87b781fe02fdebde1b1c949d] +Mar-23 12:32:26.207 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Mar-23 12:32:26.290 [TaskFinalizer-1] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'PublishDir' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Mar-23 12:32:26.374 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:32:26.375 [Task submitter] INFO nextflow.Session - [a9/6c5151] Submitted process > GET_FINAL_METABOLITES_STATIC (1) +Mar-23 12:32:39.876 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: HUMAN_TRANSFORMER (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/c2/2ce2acf8a3662f1dc112d6f0f05ff9] +Mar-23 12:32:39.893 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:32:39.894 [Task submitter] INFO nextflow.Session - [57/fc4060] Submitted process > GET_FINAL_METABOLITES_STATIC (2) +Mar-23 12:32:44.956 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 33; name: GET_FINAL_METABOLITES_STATIC (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/a9/6c51514dff4ffe92722c7cf24245b5] +Mar-23 12:32:45.061 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:32:45.062 [Task submitter] INFO nextflow.Session - [a5/23b628] Submitted process > CONPLEX_ALL (1) +Mar-23 12:32:49.488 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 34; name: GET_FINAL_METABOLITES_STATIC (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/57/fc4060cde07e37c3f0d31dfa56f1c7] +Mar-23 12:32:49.510 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:32:49.510 [Task submitter] INFO nextflow.Session - [69/3bf75d] Submitted process > CONPLEX_ALL (2) +Mar-23 12:32:54.794 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 24; name: HUMAN_TRANSFORMER (24); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/9d/1c60859d50538fe14819139778987b] +Mar-23 12:32:54.826 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:32:54.828 [Task submitter] INFO nextflow.Session - [ac/7afb43] Submitted process > GET_FINAL_METABOLITES_STATIC (3) +Mar-23 12:32:58.839 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 32; name: HUMAN_TRANSFORMER (32); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/58/5a101692f7278fc7c1d861dc268944] +Mar-23 12:32:58.855 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:32:58.856 [Task submitter] INFO nextflow.Session - [b9/353957] Submitted process > GET_FINAL_METABOLITES_STATIC (4) +Mar-23 12:33:05.887 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 23; name: HUMAN_TRANSFORMER (23); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/66/85b2c748f0247fecfb2a6144d0ea85] +Mar-23 12:33:05.888 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 11; name: HUMAN_TRANSFORMER (11); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/88/d6f61a8ea069829d5d3b8d2d6ed3d2] +Mar-23 12:33:05.909 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:05.911 [Task submitter] INFO nextflow.Session - [8c/87d858] Submitted process > GET_FINAL_METABOLITES_STATIC (6) +Mar-23 12:33:05.923 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:05.924 [Task submitter] INFO nextflow.Session - [8d/b292b1] Submitted process > GET_FINAL_METABOLITES_STATIC (5) +Mar-23 12:33:07.951 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 21; name: HUMAN_TRANSFORMER (21); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ae/d4edcb9c1c862ea8272f42f2bd999d] +Mar-23 12:33:07.967 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:07.968 [Task submitter] INFO nextflow.Session - [fa/28ee3d] Submitted process > GET_FINAL_METABOLITES_STATIC (7) +Mar-23 12:33:09.241 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 37; name: GET_FINAL_METABOLITES_STATIC (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ac/7afb4318418e08d8f973b9ffbbcea5] +Mar-23 12:33:09.263 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:09.264 [Task submitter] INFO nextflow.Session - [47/e3689c] Submitted process > CONPLEX_ALL (3) +Mar-23 12:33:21.678 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 31; name: HUMAN_TRANSFORMER (31); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/a7/55cb6cfd3954144d267fc883e9f71e] +Mar-23 12:33:21.702 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:21.703 [Task submitter] INFO nextflow.Session - [33/e9e7e8] Submitted process > GET_FINAL_METABOLITES_STATIC (8) +Mar-23 12:33:23.614 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 19; name: HUMAN_TRANSFORMER (19); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/9e/68d27c8d1ee060a4836f615f8bc8b7] +Mar-23 12:33:23.627 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:23.627 [Task submitter] INFO nextflow.Session - [aa/87ad5d] Submitted process > GET_FINAL_METABOLITES_STATIC (9) +Mar-23 12:33:26.271 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 38; name: GET_FINAL_METABOLITES_STATIC (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/b9/35395791cb206f27e75128b0d43acf] +Mar-23 12:33:26.286 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:26.286 [Task submitter] INFO nextflow.Session - [2b/1f832e] Submitted process > CONPLEX_ALL (4) +Mar-23 12:33:28.739 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 28; name: HUMAN_TRANSFORMER (28); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/8c/614048724953cdaf85576db432cb71] +Mar-23 12:33:28.979 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:28.981 [Task submitter] INFO nextflow.Session - [e8/674830] Submitted process > GET_FINAL_METABOLITES_STATIC (10) +Mar-23 12:33:30.718 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 40; name: GET_FINAL_METABOLITES_STATIC (6); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/8c/87d858d63310846892df016cab7a7c] +Mar-23 12:33:30.808 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:30.809 [Task submitter] INFO nextflow.Session - [11/41fa41] Submitted process > CONPLEX_ALL (5) +Mar-23 12:33:34.201 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 15; name: HUMAN_TRANSFORMER (15); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/4f/522cdbd6c71ca2b84a5c7c40c75be8] +Mar-23 12:33:34.222 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:34.224 [Task submitter] INFO nextflow.Session - [07/e85ae9] Submitted process > GET_FINAL_METABOLITES_STATIC (11) +Mar-23 12:33:34.335 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 41; name: GET_FINAL_METABOLITES_STATIC (7); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/fa/28ee3dc5d2854cb6ec7a06b2b077cd] +Mar-23 12:33:34.349 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:34.350 [Task submitter] INFO nextflow.Session - [8a/d96785] Submitted process > CONPLEX_ALL (6) +Mar-23 12:33:35.976 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 39; name: GET_FINAL_METABOLITES_STATIC (5); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/8d/b292b16c812d7dfd6914291c9ea916] +Mar-23 12:33:36.036 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:36.048 [Task submitter] INFO nextflow.Session - [dd/50d730] Submitted process > CONPLEX_ALL (7) +Mar-23 12:33:50.315 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 26; name: HUMAN_TRANSFORMER (26); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/1d/701bd014e2b99ea7030776393f4d5e] +Mar-23 12:33:50.355 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:50.356 [Task submitter] INFO nextflow.Session - [83/b74538] Submitted process > GET_FINAL_METABOLITES_STATIC (12) +Mar-23 12:33:51.575 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 25; name: HUMAN_TRANSFORMER (25); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/e1/2d650bd0b461beee593bbcf4146cd9] +Mar-23 12:33:51.596 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:51.598 [Task submitter] INFO nextflow.Session - [33/3c10fd] Submitted process > GET_FINAL_METABOLITES_STATIC (13) +Mar-23 12:33:54.414 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 27; name: HUMAN_TRANSFORMER (27); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/11/907b6d28da29bbd89e5d2ccfae4efa] +Mar-23 12:33:54.429 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:54.430 [Task submitter] INFO nextflow.Session - [fc/8331ce] Submitted process > GET_FINAL_METABOLITES_STATIC (14) +Mar-23 12:33:55.766 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 13; name: HUMAN_TRANSFORMER (13); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/85/3e7894d128f1a7ca4e512265de5963] +Mar-23 12:33:55.787 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:55.789 [Task submitter] INFO nextflow.Session - [57/5023ee] Submitted process > GET_FINAL_METABOLITES_STATIC (15) +Mar-23 12:33:56.685 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 43; name: GET_FINAL_METABOLITES_STATIC (8); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/33/e9e7e8904fe466f69f4df57cce2c64] +Mar-23 12:33:56.708 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:33:56.709 [Task submitter] INFO nextflow.Session - [9a/2fecc9] Submitted process > CONPLEX_ALL (8) +Mar-23 12:34:00.284 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 44; name: GET_FINAL_METABOLITES_STATIC (9); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/aa/87ad5d6b5867590135e05f76c3bb54] +Mar-23 12:34:00.299 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:34:00.299 [Task submitter] INFO nextflow.Session - [f1/5e18e2] Submitted process > CONPLEX_ALL (9) +Mar-23 12:34:01.320 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 46; name: GET_FINAL_METABOLITES_STATIC (10); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/e8/67483098b1e320bd4b8f1a79daaa0d] +Mar-23 12:34:01.339 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:34:01.554 [Task submitter] INFO nextflow.Session - [31/8a1dcd] Submitted process > CONPLEX_ALL (10) +Mar-23 12:34:04.378 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 48; name: GET_FINAL_METABOLITES_STATIC (11); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/07/e85ae96b214083751ee72ad0a6bfb7] +Mar-23 12:34:04.396 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:34:04.398 [Task submitter] INFO nextflow.Session - [de/729b43] Submitted process > CONPLEX_ALL (11) +Mar-23 12:34:11.898 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 14; name: HUMAN_TRANSFORMER (14); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/1e/26e9125254af1d3a5deaa84c7d3811] +Mar-23 12:34:11.920 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:34:11.921 [Task submitter] INFO nextflow.Session - [0e/b1ba67] Submitted process > GET_FINAL_METABOLITES_STATIC (16) +Mar-23 12:34:19.892 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 53; name: GET_FINAL_METABOLITES_STATIC (14); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/fc/8331ce93639011dd35f13ae21ff3f7] +Mar-23 12:34:19.907 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:34:19.908 [Task submitter] INFO nextflow.Session - [89/e57fd5] Submitted process > CONPLEX_ALL (12) +Mar-23 12:34:19.959 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 51; name: GET_FINAL_METABOLITES_STATIC (12); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/83/b745382ed20b6665e5054177cdf014] +Mar-23 12:34:20.422 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:34:20.423 [Task submitter] INFO nextflow.Session - [6b/d6191a] Submitted process > CONPLEX_ALL (13) +Mar-23 12:34:21.646 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 5; name: HUMAN_TRANSFORMER (5); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/8f/b72148545bcdcb9cab86e46a063bf2] +Mar-23 12:34:21.662 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:34:21.663 [Task submitter] INFO nextflow.Session - [5f/c1a0dc] Submitted process > GET_FINAL_METABOLITES_STATIC (17) +Mar-23 12:34:23.293 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 52; name: GET_FINAL_METABOLITES_STATIC (13); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/33/3c10fd8d2d91c9e47891327246402e] +Mar-23 12:34:23.307 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:34:23.308 [Task submitter] INFO nextflow.Session - [27/4e94a8] Submitted process > CONPLEX_ALL (14) +Mar-23 12:34:26.594 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 54; name: GET_FINAL_METABOLITES_STATIC (15); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/57/5023ee10166882143a1e04f4172bd7] +Mar-23 12:34:26.638 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:34:26.640 [Task submitter] INFO nextflow.Session - [4f/914e0e] Submitted process > CONPLEX_ALL (15) +Mar-23 12:34:34.212 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 59; name: GET_FINAL_METABOLITES_STATIC (16); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/0e/b1ba678c16290a330b694983921f5c] +Mar-23 12:34:34.235 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:34:34.236 [Task submitter] INFO nextflow.Session - [45/a19ccf] Submitted process > CONPLEX_ALL (16) +Mar-23 12:34:37.582 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 62; name: GET_FINAL_METABOLITES_STATIC (17); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/5f/c1a0dc784da101e044346af396812d] +Mar-23 12:34:37.597 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:34:37.598 [Task submitter] INFO nextflow.Session - [38/9d4acc] Submitted process > CONPLEX_ALL (17) +Mar-23 12:34:49.033 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 22; name: HUMAN_TRANSFORMER (22); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/9c/1072348f82658bff6118dd98dff95e] +Mar-23 12:34:49.051 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:34:49.052 [Task submitter] INFO nextflow.Session - [d1/c7c098] Submitted process > GET_FINAL_METABOLITES_STATIC (18) +Mar-23 12:35:01.944 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 67; name: GET_FINAL_METABOLITES_STATIC (18); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/d1/c7c098985598b18afe2fe2f36fd599] +Mar-23 12:35:01.967 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:35:01.968 [Task submitter] INFO nextflow.Session - [ec/eb9042] Submitted process > CONPLEX_ALL (18) +Mar-23 12:35:16.248 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 6; name: HUMAN_TRANSFORMER (6); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/7f/fffcfc20b885868645588ea0184dec] +Mar-23 12:35:16.265 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:35:16.267 [Task submitter] INFO nextflow.Session - [74/02c4c2] Submitted process > GET_FINAL_METABOLITES_STATIC (19) +Mar-23 12:35:24.543 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 69; name: GET_FINAL_METABOLITES_STATIC (19); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/74/02c4c29cbca0ab154f2bf45979058b] +Mar-23 12:35:24.572 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:35:24.573 [Task submitter] INFO nextflow.Session - [d3/59e768] Submitted process > CONPLEX_ALL (19) +Mar-23 12:35:24.682 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 8; name: HUMAN_TRANSFORMER (8); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/02/5069402b2776a3ea94e1260994e70e] +Mar-23 12:35:24.725 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:35:24.726 [Task submitter] INFO nextflow.Session - [08/e2ff02] Submitted process > GET_FINAL_METABOLITES_STATIC (20) +Mar-23 12:35:39.562 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 71; name: GET_FINAL_METABOLITES_STATIC (20); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/08/e2ff02a72b3bc58a7dc651a408e61e] +Mar-23 12:35:39.581 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:35:39.582 [Task submitter] INFO nextflow.Session - [0f/05554b] Submitted process > CONPLEX_ALL (20) +Mar-23 12:36:08.369 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 17; name: HUMAN_TRANSFORMER (17); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/20/1a7d4d52fa8531ca500e62fff149e0] +Mar-23 12:36:08.387 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:36:08.388 [Task submitter] INFO nextflow.Session - [59/20c57b] Submitted process > GET_FINAL_METABOLITES_STATIC (21) +Mar-23 12:36:08.530 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 18; name: HUMAN_TRANSFORMER (18); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/30/24835fc80891aeb227cb5f6bee92b6] +Mar-23 12:36:08.555 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:36:08.556 [Task submitter] INFO nextflow.Session - [a4/5d15d8] Submitted process > GET_FINAL_METABOLITES_STATIC (22) +Mar-23 12:36:28.253 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 73; name: GET_FINAL_METABOLITES_STATIC (21); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/59/20c57b919b048249caea887376f7cf] +Mar-23 12:36:28.269 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:36:28.270 [Task submitter] INFO nextflow.Session - [05/1a80de] Submitted process > CONPLEX_ALL (21) +Mar-23 12:36:28.294 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 74; name: GET_FINAL_METABOLITES_STATIC (22); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/a4/5d15d8c541c82fc8fd5c20a4ecfa6f] +Mar-23 12:36:28.318 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:36:28.319 [Task submitter] INFO nextflow.Session - [bb/6e26ea] Submitted process > CONPLEX_ALL (22) +Mar-23 12:36:34.979 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 35; name: CONPLEX_ALL (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/a5/23b628f89e2a7835409a6c7d718387] +Mar-23 12:36:35.019 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:36:35.020 [Task submitter] INFO nextflow.Session - [13/14251c] Submitted process > TISSUE_DISTRIBUTION (1) +Mar-23 12:36:35.028 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:36:35.029 [Task submitter] INFO nextflow.Session - [2d/e5bbd5] Submitted process > BIO_METRICS (1) +Mar-23 12:36:35.049 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:36:35.050 [Task submitter] INFO nextflow.Session - [e4/66e3d5] Submitted process > NETWORK_ENRICHMENT (1) +Mar-23 12:36:45.553 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 34 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/f7/f16540761aee41c7248ad1fe8f3eee] +~> TaskHandler[id: 16; name: HUMAN_TRANSFORMER (16); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/f1/b1e309add0f1cd88797c7527fdf6f3] +~> TaskHandler[id: 4; name: HUMAN_TRANSFORMER (4); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/f3/2167e6d747c6ad3334197c296e88d9] +~> TaskHandler[id: 9; name: HUMAN_TRANSFORMER (9); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/35/b8dc93d08d0110ce4b508b43b52dff] +~> TaskHandler[id: 7; name: HUMAN_TRANSFORMER (7); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ce/eac613e5ebba4a75ecd7d8352f7c99] +~> TaskHandler[id: 10; name: HUMAN_TRANSFORMER (10); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/de/d2b3dae152dc4064dd3caf84986f07] +~> TaskHandler[id: 29; name: HUMAN_TRANSFORMER (29); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/d7/93d38d4103afc3e0a87aa8fb1ae84d] +~> TaskHandler[id: 12; name: HUMAN_TRANSFORMER (12); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/d6/937a35d19297dce8b144bc2aa88b04] +~> TaskHandler[id: 30; name: HUMAN_TRANSFORMER (30); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ba/11e874c2fb4e51162424748812e93d] +~> TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/f8/10a61c18a03652d1b03d448e2b9f99] +.. remaining tasks omitted. +Mar-23 12:37:00.095 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 79; name: TISSUE_DISTRIBUTION (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/13/14251cf5407e48cccef51699b56e1d] +Mar-23 12:37:01.585 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 77; name: NETWORK_ENRICHMENT (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/e4/66e3d504c2bd118ecb08f6aefd542d] +Mar-23 12:37:13.160 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 78; name: BIO_METRICS (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/2d/e5bbd5fc1420d3b5e51dcff10ee00e] +Mar-23 12:37:20.128 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 10; name: HUMAN_TRANSFORMER (10); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/de/d2b3dae152dc4064dd3caf84986f07] +Mar-23 12:37:20.152 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:20.154 [Task submitter] INFO nextflow.Session - [eb/c954be] Submitted process > GET_FINAL_METABOLITES_STATIC (23) +Mar-23 12:37:25.363 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 80; name: GET_FINAL_METABOLITES_STATIC (23); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/eb/c954bec177186d1d22d0f840ba29c3] +Mar-23 12:37:25.390 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:25.391 [Task submitter] INFO nextflow.Session - [33/07094f] Submitted process > CONPLEX_ALL (23) +Mar-23 12:37:29.653 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 9; name: HUMAN_TRANSFORMER (9); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/35/b8dc93d08d0110ce4b508b43b52dff] +Mar-23 12:37:29.684 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:29.685 [Task submitter] INFO nextflow.Session - [01/bec09d] Submitted process > GET_FINAL_METABOLITES_STATIC (24) +Mar-23 12:37:35.160 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 82; name: GET_FINAL_METABOLITES_STATIC (24); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/01/bec09d3e94eb30f39b777429901529] +Mar-23 12:37:35.176 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:35.176 [Task submitter] INFO nextflow.Session - [9e/eb3ea1] Submitted process > CONPLEX_ALL (24) +Mar-23 12:37:37.560 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 36; name: CONPLEX_ALL (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/69/3bf75df83d44f572f4b434c2c06735] +Mar-23 12:37:37.579 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:37.579 [Task submitter] INFO nextflow.Session - [4f/f22d29] Submitted process > NETWORK_ENRICHMENT (2) +Mar-23 12:37:37.584 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:37.584 [Task submitter] INFO nextflow.Session - [29/a97dbb] Submitted process > TISSUE_DISTRIBUTION (2) +Mar-23 12:37:37.590 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:37.590 [Task submitter] INFO nextflow.Session - [d6/3961cf] Submitted process > BIO_METRICS (2) +Mar-23 12:37:48.785 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 47; name: CONPLEX_ALL (5); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/11/41fa416225698c2a4a337496069fbe] +Mar-23 12:37:48.807 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:48.807 [Task submitter] INFO nextflow.Session - [f3/d557be] Submitted process > TISSUE_DISTRIBUTION (3) +Mar-23 12:37:48.815 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:48.816 [Task submitter] INFO nextflow.Session - [50/5fcb68] Submitted process > NETWORK_ENRICHMENT (3) +Mar-23 12:37:48.825 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:48.826 [Task submitter] INFO nextflow.Session - [95/4f5cd2] Submitted process > BIO_METRICS (3) +Mar-23 12:37:48.842 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 50; name: CONPLEX_ALL (7); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/dd/50d7305b7f7abb66d81414f76920cb] +Mar-23 12:37:49.286 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:49.287 [Task submitter] INFO nextflow.Session - [3a/c26113] Submitted process > NETWORK_ENRICHMENT (4) +Mar-23 12:37:49.296 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:49.297 [Task submitter] INFO nextflow.Session - [f0/c644ac] Submitted process > BIO_METRICS (4) +Mar-23 12:37:49.316 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:49.317 [Task submitter] INFO nextflow.Session - [b3/5cf0e3] Submitted process > TISSUE_DISTRIBUTION (4) +Mar-23 12:37:51.027 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 56; name: CONPLEX_ALL (9); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/f1/5e18e2e5c18fe745b07b36bec151d6] +Mar-23 12:37:51.044 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:51.045 [Task submitter] INFO nextflow.Session - [d6/b41e0c] Submitted process > TISSUE_DISTRIBUTION (5) +Mar-23 12:37:51.050 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:51.050 [Task submitter] INFO nextflow.Session - [24/ff2c47] Submitted process > NETWORK_ENRICHMENT (5) +Mar-23 12:37:51.056 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:51.056 [Task submitter] INFO nextflow.Session - [93/3e3be9] Submitted process > BIO_METRICS (5) +Mar-23 12:37:53.706 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 42; name: CONPLEX_ALL (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/47/e3689cad62beb34489586494b2cbaf] +Mar-23 12:37:53.736 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:53.737 [Task submitter] INFO nextflow.Session - [c0/371e2e] Submitted process > NETWORK_ENRICHMENT (6) +Mar-23 12:37:53.749 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:53.750 [Task submitter] INFO nextflow.Session - [06/c8de2a] Submitted process > TISSUE_DISTRIBUTION (6) +Mar-23 12:37:53.765 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:37:53.766 [Task submitter] INFO nextflow.Session - [ad/3874d7] Submitted process > BIO_METRICS (6) +Mar-23 12:38:01.136 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 45; name: CONPLEX_ALL (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/2b/1f832e20c7d01f6d40033975ca1a15] +Mar-23 12:38:01.153 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:01.154 [Task submitter] INFO nextflow.Session - [07/6783cd] Submitted process > TISSUE_DISTRIBUTION (7) +Mar-23 12:38:01.160 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:01.161 [Task submitter] INFO nextflow.Session - [b2/3de5d2] Submitted process > NETWORK_ENRICHMENT (7) +Mar-23 12:38:01.169 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:01.170 [Task submitter] INFO nextflow.Session - [49/9986ab] Submitted process > BIO_METRICS (7) +Mar-23 12:38:03.159 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 49; name: CONPLEX_ALL (6); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/8a/d9678534e279927c670d8e3cbc76dd] +Mar-23 12:38:03.160 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 57; name: CONPLEX_ALL (10); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/31/8a1dcdbe63608cb636165b802ba3ee] +Mar-23 12:38:03.178 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:03.179 [Task submitter] INFO nextflow.Session - [22/af8d38] Submitted process > TISSUE_DISTRIBUTION (9) +Mar-23 12:38:03.192 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:03.193 [Task submitter] INFO nextflow.Session - [0c/31da68] Submitted process > TISSUE_DISTRIBUTION (8) +Mar-23 12:38:03.202 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:03.203 [Task submitter] INFO nextflow.Session - [7b/9bfa0d] Submitted process > NETWORK_ENRICHMENT (8) +Mar-23 12:38:03.212 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:03.212 [Task submitter] INFO nextflow.Session - [e8/8b5576] Submitted process > NETWORK_ENRICHMENT (9) +Mar-23 12:38:03.222 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:03.222 [Task submitter] INFO nextflow.Session - [44/6aa7bc] Submitted process > BIO_METRICS (9) +Mar-23 12:38:03.230 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:03.231 [Task submitter] INFO nextflow.Session - [11/bd53f9] Submitted process > BIO_METRICS (8) +Mar-23 12:38:06.801 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 58; name: CONPLEX_ALL (11); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/de/729b4378fdd22d1e8923d20d20b68f] +Mar-23 12:38:06.816 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:06.817 [Task submitter] INFO nextflow.Session - [90/dbf361] Submitted process > NETWORK_ENRICHMENT (10) +Mar-23 12:38:06.821 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:06.821 [Task submitter] INFO nextflow.Session - [54/ebab16] Submitted process > TISSUE_DISTRIBUTION (10) +Mar-23 12:38:06.827 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:06.827 [Task submitter] INFO nextflow.Session - [9d/f715d0] Submitted process > BIO_METRICS (10) +Mar-23 12:38:13.153 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 55; name: CONPLEX_ALL (8); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/9a/2fecc9ed2b4eba73680416b03cb2a6] +Mar-23 12:38:13.172 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:13.173 [Task submitter] INFO nextflow.Session - [e5/8cf296] Submitted process > TISSUE_DISTRIBUTION (11) +Mar-23 12:38:13.177 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:13.178 [Task submitter] INFO nextflow.Session - [80/eb1340] Submitted process > NETWORK_ENRICHMENT (11) +Mar-23 12:38:13.183 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:13.183 [Task submitter] INFO nextflow.Session - [3b/8d8bae] Submitted process > BIO_METRICS (11) +Mar-23 12:38:21.439 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 84; name: NETWORK_ENRICHMENT (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/4f/f22d295989de10b2dfc29f2c1e6f66] +Mar-23 12:38:31.128 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 60; name: CONPLEX_ALL (12); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/89/e57fd5f026ab500a7afd27b1efbc59] +Mar-23 12:38:31.148 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:31.149 [Task submitter] INFO nextflow.Session - [23/e0edb4] Submitted process > TISSUE_DISTRIBUTION (12) +Mar-23 12:38:31.157 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:31.157 [Task submitter] INFO nextflow.Session - [01/ccfeaf] Submitted process > NETWORK_ENRICHMENT (12) +Mar-23 12:38:31.165 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:31.165 [Task submitter] INFO nextflow.Session - [be/1a62f0] Submitted process > BIO_METRICS (12) +Mar-23 12:38:35.640 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 63; name: CONPLEX_ALL (14); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/27/4e94a8b156b5b5b67d4cb0e08f0410] +Mar-23 12:38:35.655 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:35.655 [Task submitter] INFO nextflow.Session - [df/37378b] Submitted process > TISSUE_DISTRIBUTION (13) +Mar-23 12:38:35.659 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:35.660 [Task submitter] INFO nextflow.Session - [ae/161ea0] Submitted process > NETWORK_ENRICHMENT (13) +Mar-23 12:38:35.664 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:35.665 [Task submitter] INFO nextflow.Session - [9a/2588bd] Submitted process > BIO_METRICS (13) +Mar-23 12:38:38.539 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 64; name: CONPLEX_ALL (15); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/4f/914e0ed20b550030977102ec634240] +Mar-23 12:38:38.558 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:38.558 [Task submitter] INFO nextflow.Session - [bb/e5559b] Submitted process > TISSUE_DISTRIBUTION (14) +Mar-23 12:38:38.567 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:38.568 [Task submitter] INFO nextflow.Session - [da/58f57a] Submitted process > NETWORK_ENRICHMENT (14) +Mar-23 12:38:38.576 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:38.577 [Task submitter] INFO nextflow.Session - [41/44f65d] Submitted process > BIO_METRICS (14) +Mar-23 12:38:44.202 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 61; name: CONPLEX_ALL (13); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/6b/d6191a21da8e951e3b5e3fe4777c19] +Mar-23 12:38:44.217 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:44.217 [Task submitter] INFO nextflow.Session - [2a/b7677d] Submitted process > BIO_METRICS (15) +Mar-23 12:38:44.222 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:44.222 [Task submitter] INFO nextflow.Session - [74/ab9e37] Submitted process > TISSUE_DISTRIBUTION (15) +Mar-23 12:38:44.233 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:44.233 [Task submitter] INFO nextflow.Session - [15/d4d10b] Submitted process > NETWORK_ENRICHMENT (15) +Mar-23 12:38:49.342 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 66; name: CONPLEX_ALL (17); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/38/9d4acc90f36d106b7cac368917e550] +Mar-23 12:38:49.361 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:49.361 [Task submitter] INFO nextflow.Session - [4c/876912] Submitted process > BIO_METRICS (16) +Mar-23 12:38:49.368 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:49.369 [Task submitter] INFO nextflow.Session - [77/9891c5] Submitted process > TISSUE_DISTRIBUTION (16) +Mar-23 12:38:49.477 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:49.478 [Task submitter] INFO nextflow.Session - [6b/fdd0b6] Submitted process > NETWORK_ENRICHMENT (16) +Mar-23 12:38:51.241 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 65; name: CONPLEX_ALL (16); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/45/a19ccfb8ec236e0945dbed55042d80] +Mar-23 12:38:51.260 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:51.261 [Task submitter] INFO nextflow.Session - [33/88746a] Submitted process > BIO_METRICS (17) +Mar-23 12:38:51.272 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:51.272 [Task submitter] INFO nextflow.Session - [a7/3ea963] Submitted process > TISSUE_DISTRIBUTION (17) +Mar-23 12:38:51.277 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:51.277 [Task submitter] INFO nextflow.Session - [16/232012] Submitted process > NETWORK_ENRICHMENT (17) +Mar-23 12:38:54.493 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 90; name: NETWORK_ENRICHMENT (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/3a/c26113bb0d9cbc2cd6ffa649e984bb] +Mar-23 12:38:55.975 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 4; name: HUMAN_TRANSFORMER (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/f3/2167e6d747c6ad3334197c296e88d9] +Mar-23 12:38:55.990 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:38:55.990 [Task submitter] INFO nextflow.Session - [95/f2bdb4] Submitted process > GET_FINAL_METABOLITES_STATIC (25) +Mar-23 12:39:03.617 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 96; name: NETWORK_ENRICHMENT (6); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/c0/371e2e1eb6c520d6cbd8551d527bbf] +Mar-23 12:39:04.694 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 94; name: NETWORK_ENRICHMENT (5); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/24/ff2c475fceb977db4d2b5997a021aa] +Mar-23 12:39:05.817 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 7; name: HUMAN_TRANSFORMER (7); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ce/eac613e5ebba4a75ecd7d8352f7c99] +Mar-23 12:39:05.835 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:39:05.836 [Task submitter] INFO nextflow.Session - [51/532018] Submitted process > GET_FINAL_METABOLITES_STATIC (26) +Mar-23 12:39:10.024 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 99; name: NETWORK_ENRICHMENT (7); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/b2/3de5d2d296ef7d0cb0e0efd1b8bfa9] +Mar-23 12:39:10.121 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 105; name: NETWORK_ENRICHMENT (9); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/e8/8b5576e0a0da896d8c4563708a6349] +Mar-23 12:39:10.449 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 89; name: NETWORK_ENRICHMENT (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/50/5fcb68e7c6d0ba17c6ac0d933c1bb0] +Mar-23 12:39:13.309 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 68; name: CONPLEX_ALL (18); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ec/eb90424872ea2ef085458b17b9d492] +Mar-23 12:39:13.334 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:39:13.339 [Task submitter] INFO nextflow.Session - [07/eb3846] Submitted process > TISSUE_DISTRIBUTION (18) +Mar-23 12:39:13.348 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:39:13.348 [Task submitter] INFO nextflow.Session - [71/d6e25b] Submitted process > BIO_METRICS (18) +Mar-23 12:39:13.360 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:39:13.361 [Task submitter] INFO nextflow.Session - [3e/2c8de8] Submitted process > NETWORK_ENRICHMENT (18) +Mar-23 12:39:31.597 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 108; name: NETWORK_ENRICHMENT (10); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/90/dbf3618498e513aac253cd058fd607] +Mar-23 12:39:34.625 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/f8/10a61c18a03652d1b03d448e2b9f99] +Mar-23 12:39:34.665 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:39:34.665 [Task submitter] INFO nextflow.Session - [33/a93fae] Submitted process > GET_FINAL_METABOLITES_STATIC (27) +Mar-23 12:39:35.548 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 102; name: NETWORK_ENRICHMENT (8); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/7b/9bfa0d7db2e92177e7ac89f660ddcf] +Mar-23 12:39:35.931 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 111; name: NETWORK_ENRICHMENT (11); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/80/eb1340f1819de2da6c04fc667c0862] +Mar-23 12:39:36.507 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 114; name: NETWORK_ENRICHMENT (12); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/01/ccfeaf7ba27e6a72be85662f791d0c] +Mar-23 12:39:39.172 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 132; name: GET_FINAL_METABOLITES_STATIC (25); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/95/f2bdb4530d0ac3c1f3ff00f2e5d9d1] +Mar-23 12:39:39.190 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:39:39.190 [Task submitter] INFO nextflow.Session - [08/033ef2] Submitted process > CONPLEX_ALL (25) +Mar-23 12:39:41.637 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 133; name: GET_FINAL_METABOLITES_STATIC (26); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/51/53201879a33a087d8def46956e30ef] +Mar-23 12:39:41.767 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:39:41.767 [Task submitter] INFO nextflow.Session - [2e/5eca88] Submitted process > CONPLEX_ALL (26) +Mar-23 12:39:43.198 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/f7/f16540761aee41c7248ad1fe8f3eee] +Mar-23 12:39:43.215 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:39:43.215 [Task submitter] INFO nextflow.Session - [5e/fd8e5e] Submitted process > GET_FINAL_METABOLITES_STATIC (28) +Mar-23 12:39:46.363 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 123; name: NETWORK_ENRICHMENT (15); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/15/d4d10b05f38730d049401c5fe85786] +Mar-23 12:39:47.959 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 118; name: NETWORK_ENRICHMENT (13); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ae/161ea0024d53dc3bfd63e24b85f039] +Mar-23 12:39:49.774 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 128; name: NETWORK_ENRICHMENT (16); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/6b/fdd0b657c77c21dc5e2c9c569a1a75] +Mar-23 12:39:51.400 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 135; name: NETWORK_ENRICHMENT (18); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/3e/2c8de8d100be5dcb969e5862c56c36] +Mar-23 12:39:51.501 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 120; name: NETWORK_ENRICHMENT (14); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/da/58f57a81f0b6279a3662cef7c8b069] +Mar-23 12:39:51.630 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 130; name: NETWORK_ENRICHMENT (17); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/16/232012a2858c1b774c7ff8dd8ff8a6] +Mar-23 12:39:53.640 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 85; name: TISSUE_DISTRIBUTION (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/29/a97dbb292f4ded621fbc410922dd16] +Mar-23 12:39:57.351 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 70; name: CONPLEX_ALL (19); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/d3/59e76867961a8af5b324f9dd41e8ca] +Mar-23 12:39:57.368 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:39:57.368 [Task submitter] INFO nextflow.Session - [43/7b1489] Submitted process > NETWORK_ENRICHMENT (19) +Mar-23 12:39:57.373 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:39:57.373 [Task submitter] INFO nextflow.Session - [20/365d8d] Submitted process > TISSUE_DISTRIBUTION (19) +Mar-23 12:39:57.379 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:39:57.379 [Task submitter] INFO nextflow.Session - [3a/83663f] Submitted process > BIO_METRICS (19) +Mar-23 12:39:59.201 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 30; name: HUMAN_TRANSFORMER (30); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ba/11e874c2fb4e51162424748812e93d] +Mar-23 12:39:59.217 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:39:59.218 [Task submitter] INFO nextflow.Session - [da/1d1b41] Submitted process > GET_FINAL_METABOLITES_STATIC (29) +Mar-23 12:40:01.754 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 29; name: HUMAN_TRANSFORMER (29); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/d7/93d38d4103afc3e0a87aa8fb1ae84d] +Mar-23 12:40:01.768 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:40:01.769 [Task submitter] INFO nextflow.Session - [3a/04d53e] Submitted process > GET_FINAL_METABOLITES_STATIC (30) +Mar-23 12:40:03.823 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 72; name: CONPLEX_ALL (20); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/0f/05554b5b13f98da9dbd653ecd2b483] +Mar-23 12:40:03.840 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:40:03.840 [Task submitter] INFO nextflow.Session - [60/32b570] Submitted process > NETWORK_ENRICHMENT (20) +Mar-23 12:40:03.846 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:40:03.847 [Task submitter] INFO nextflow.Session - [11/082da7] Submitted process > TISSUE_DISTRIBUTION (20) +Mar-23 12:40:03.854 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:40:03.855 [Task submitter] INFO nextflow.Session - [dc/26dfd8] Submitted process > BIO_METRICS (20) +Mar-23 12:40:14.513 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 137; name: GET_FINAL_METABOLITES_STATIC (27); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/33/a93fae31481f246b097b2aa33dfd28] +Mar-23 12:40:14.533 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:40:14.534 [Task submitter] INFO nextflow.Session - [17/80ca83] Submitted process > CONPLEX_ALL (27) +Mar-23 12:40:14.542 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 140; name: GET_FINAL_METABOLITES_STATIC (28); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/5e/fd8e5e54cb4f183b2ce8d52af21e94] +Mar-23 12:40:14.562 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:40:14.563 [Task submitter] INFO nextflow.Session - [b1/057b65] Submitted process > CONPLEX_ALL (28) +Mar-23 12:40:16.079 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 86; name: BIO_METRICS (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/d6/3961cfb71a9ca8371fe4115528c8b5] +Mar-23 12:40:30.984 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 143; name: NETWORK_ENRICHMENT (19); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/43/7b1489d70ac412e0cab45c8f67df8c] +Mar-23 12:40:32.161 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 148; name: NETWORK_ENRICHMENT (20); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/60/32b570e65114e89cc469b5c9bb57ba] +Mar-23 12:40:35.079 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 145; name: GET_FINAL_METABOLITES_STATIC (30); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/3a/04d53e8b7d32e0e1abcd6974cd75ad] +Mar-23 12:40:35.099 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:40:35.099 [Task submitter] INFO nextflow.Session - [0f/26ca05] Submitted process > CONPLEX_ALL (29) +Mar-23 12:40:35.166 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 144; name: GET_FINAL_METABOLITES_STATIC (29); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/da/1d1b412830b1587ece28bac11c9469] +Mar-23 12:40:35.184 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:40:35.185 [Task submitter] INFO nextflow.Session - [e6/bffd78] Submitted process > CONPLEX_ALL (30) +Mar-23 12:40:48.469 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 88; name: TISSUE_DISTRIBUTION (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/f3/d557beb05b9a2f2f94c9bbf0699f74] +Mar-23 12:41:11.219 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 95; name: TISSUE_DISTRIBUTION (5); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/d6/b41e0c0e6da6d488e749655f7e3c07] +Mar-23 12:41:21.212 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 93; name: BIO_METRICS (5); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/93/3e3be92e196d43903b3ab0ab53e533] +Mar-23 12:41:23.435 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 76; name: CONPLEX_ALL (22); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/bb/6e26ea2dad5145467b34925806585b] +Mar-23 12:41:23.455 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:41:23.456 [Task submitter] INFO nextflow.Session - [7b/fb352b] Submitted process > TISSUE_DISTRIBUTION (21) +Mar-23 12:41:23.460 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:41:23.461 [Task submitter] INFO nextflow.Session - [fb/887e51] Submitted process > NETWORK_ENRICHMENT (21) +Mar-23 12:41:23.466 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:41:23.466 [Task submitter] INFO nextflow.Session - [4f/7fe0cb] Submitted process > BIO_METRICS (21) +Mar-23 12:41:26.018 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 92; name: TISSUE_DISTRIBUTION (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/b3/5cf0e3f2e08e8e9e60a13940ff9a4a] +Mar-23 12:41:27.209 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 75; name: CONPLEX_ALL (21); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/05/1a80de9a1ebeace669f6f6012c9d72] +Mar-23 12:41:27.227 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:41:27.227 [Task submitter] INFO nextflow.Session - [57/539445] Submitted process > TISSUE_DISTRIBUTION (22) +Mar-23 12:41:27.232 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:41:27.232 [Task submitter] INFO nextflow.Session - [99/22ebf4] Submitted process > NETWORK_ENRICHMENT (22) +Mar-23 12:41:27.239 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:41:27.239 [Task submitter] INFO nextflow.Session - [73/7f0338] Submitted process > BIO_METRICS (22) +Mar-23 12:41:33.288 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 87; name: BIO_METRICS (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/95/4f5cd24f3efc2e219247618f44651f] +Mar-23 12:41:40.921 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 100; name: TISSUE_DISTRIBUTION (7); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/07/6783cdc83d5ffb569734dddb53b723] +Mar-23 12:41:44.186 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 91; name: BIO_METRICS (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/f0/c644acab981f0e2a200a49d011d24a] +Mar-23 12:41:45.591 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 45 -- submitted tasks are shown below +~> TaskHandler[id: 16; name: HUMAN_TRANSFORMER (16); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/f1/b1e309add0f1cd88797c7527fdf6f3] +~> TaskHandler[id: 12; name: HUMAN_TRANSFORMER (12); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/d6/937a35d19297dce8b144bc2aa88b04] +~> TaskHandler[id: 81; name: CONPLEX_ALL (23); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/33/07094f1b16e171068beb4d45f0d323] +~> TaskHandler[id: 83; name: CONPLEX_ALL (24); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/9e/eb3ea15b69c05a2e60cd0a088cf8c1] +~> TaskHandler[id: 97; name: TISSUE_DISTRIBUTION (6); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/06/c8de2ac82664b8e4ea4fa2d0ace04c] +~> TaskHandler[id: 98; name: BIO_METRICS (6); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ad/3874d7773511b299a0cd2ac9667439] +~> TaskHandler[id: 101; name: BIO_METRICS (7); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/49/9986abc0e786727dd60bc1e7bc9e1b] +~> TaskHandler[id: 106; name: TISSUE_DISTRIBUTION (9); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/22/af8d38620c99efde756aac21397250] +~> TaskHandler[id: 103; name: TISSUE_DISTRIBUTION (8); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/0c/31da68f73ca6075ec6eb53e51150df] +~> TaskHandler[id: 107; name: BIO_METRICS (9); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/44/6aa7bc6c7377f12a92c16187d56a9b] +.. remaining tasks omitted. +Mar-23 12:41:48.802 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 103; name: TISSUE_DISTRIBUTION (8); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/0c/31da68f73ca6075ec6eb53e51150df] +Mar-23 12:41:57.796 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 157; name: NETWORK_ENRICHMENT (22); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/99/22ebf44395545226bf7ec246f27fc1] +Mar-23 12:41:57.812 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 154; name: NETWORK_ENRICHMENT (21); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/fb/887e5104f41ba7c6ada83e6273068a] +Mar-23 12:42:02.049 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 98; name: BIO_METRICS (6); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ad/3874d7773511b299a0cd2ac9667439] +Mar-23 12:42:03.645 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 104; name: BIO_METRICS (8); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/11/bd53f98856474786ea24da75e2ee1b] +Mar-23 12:42:06.492 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 106; name: TISSUE_DISTRIBUTION (9); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/22/af8d38620c99efde756aac21397250] +Mar-23 12:42:15.864 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 81; name: CONPLEX_ALL (23); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/33/07094f1b16e171068beb4d45f0d323] +Mar-23 12:42:15.880 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:42:15.881 [Task submitter] INFO nextflow.Session - [81/57b8bf] Submitted process > BIO_METRICS (23) +Mar-23 12:42:15.885 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:42:15.885 [Task submitter] INFO nextflow.Session - [e0/27ecec] Submitted process > TISSUE_DISTRIBUTION (23) +Mar-23 12:42:15.889 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:42:15.889 [Task submitter] INFO nextflow.Session - [30/367e53] Submitted process > NETWORK_ENRICHMENT (23) +Mar-23 12:42:17.651 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 101; name: BIO_METRICS (7); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/49/9986abc0e786727dd60bc1e7bc9e1b] +Mar-23 12:42:20.021 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 109; name: TISSUE_DISTRIBUTION (10); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/54/ebab16dd4258d0ee83b4afa0f14f0e] +Mar-23 12:42:22.679 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 107; name: BIO_METRICS (9); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/44/6aa7bc6c7377f12a92c16187d56a9b] +Mar-23 12:42:27.342 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 139; name: CONPLEX_ALL (26); status: COMPLETED; exit: 137; error: -; workDir: /data/bugra/digital_trials/work/2e/5eca88b0106f9b71dfbcdc4bd48329] +Mar-23 12:42:27.352 [TaskFinalizer-4] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=CONPLEX_ALL (26); work-dir=/data/bugra/digital_trials/work/2e/5eca88b0106f9b71dfbcdc4bd48329 + error [nextflow.exception.ProcessFailedException]: Process `CONPLEX_ALL (26)` terminated with an error exit status (137) +Mar-23 12:42:27.369 [TaskFinalizer-4] INFO nextflow.processor.TaskProcessor - [2e/5eca88] NOTE: Process `CONPLEX_ALL (26)` terminated with an error exit status (137) -- Execution is retried (1) +Mar-23 12:42:27.381 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:42:27.381 [Task submitter] INFO nextflow.Session - [b0/f4117d] Re-submitted process > CONPLEX_ALL (26) +Mar-23 12:42:33.874 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 152; name: CONPLEX_ALL (30); status: COMPLETED; exit: 137; error: -; workDir: /data/bugra/digital_trials/work/e6/bffd78b931d61bc7d3d448de37dd5d] +Mar-23 12:42:33.876 [TaskFinalizer-5] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=CONPLEX_ALL (30); work-dir=/data/bugra/digital_trials/work/e6/bffd78b931d61bc7d3d448de37dd5d + error [nextflow.exception.ProcessFailedException]: Process `CONPLEX_ALL (30)` terminated with an error exit status (137) +Mar-23 12:42:33.877 [TaskFinalizer-5] INFO nextflow.processor.TaskProcessor - [e6/bffd78] NOTE: Process `CONPLEX_ALL (30)` terminated with an error exit status (137) -- Execution is retried (1) +Mar-23 12:42:33.888 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:42:33.888 [Task submitter] INFO nextflow.Session - [7d/fdb02c] Re-submitted process > CONPLEX_ALL (30) +Mar-23 12:42:36.888 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 150; name: CONPLEX_ALL (28); status: COMPLETED; exit: 137; error: -; workDir: /data/bugra/digital_trials/work/b1/057b65a97a41bbe473ee2f46eb9b40] +Mar-23 12:42:36.893 [TaskFinalizer-6] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=CONPLEX_ALL (28); work-dir=/data/bugra/digital_trials/work/b1/057b65a97a41bbe473ee2f46eb9b40 + error [nextflow.exception.ProcessFailedException]: Process `CONPLEX_ALL (28)` terminated with an error exit status (137) +Mar-23 12:42:36.894 [TaskFinalizer-6] INFO nextflow.processor.TaskProcessor - [b1/057b65] NOTE: Process `CONPLEX_ALL (28)` terminated with an error exit status (137) -- Execution is retried (1) +Mar-23 12:42:36.902 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:42:36.903 [Task submitter] INFO nextflow.Session - [8a/d50b0a] Re-submitted process > CONPLEX_ALL (28) +Mar-23 12:42:38.762 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 149; name: CONPLEX_ALL (27); status: COMPLETED; exit: 137; error: -; workDir: /data/bugra/digital_trials/work/17/80ca834858cd7e184c1bda62c00603] +Mar-23 12:42:38.764 [TaskFinalizer-8] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=CONPLEX_ALL (27); work-dir=/data/bugra/digital_trials/work/17/80ca834858cd7e184c1bda62c00603 + error [nextflow.exception.ProcessFailedException]: Process `CONPLEX_ALL (27)` terminated with an error exit status (137) +Mar-23 12:42:38.765 [TaskFinalizer-8] INFO nextflow.processor.TaskProcessor - [17/80ca83] NOTE: Process `CONPLEX_ALL (27)` terminated with an error exit status (137) -- Execution is retried (1) +Mar-23 12:42:38.770 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:42:38.770 [Task submitter] INFO nextflow.Session - [34/389a02] Re-submitted process > CONPLEX_ALL (27) +Mar-23 12:42:38.845 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 117; name: TISSUE_DISTRIBUTION (13); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/df/37378b71bdf76c2878dd171863bb83] +Mar-23 12:42:45.640 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 134; name: TISSUE_DISTRIBUTION (18); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/07/eb38462f5d9bdba6ad8eb32015e50d] +Mar-23 12:42:45.650 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 110; name: BIO_METRICS (10); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/9d/f715d039ac5b83b554f8480c11c08b] +Mar-23 12:42:47.104 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 159; name: NETWORK_ENRICHMENT (23); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/30/367e53a63fb710ffd441deac10d977] +Mar-23 12:42:48.514 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 115; name: TISSUE_DISTRIBUTION (12); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/23/e0edb40b343cab6e97f10f55f5ed5a] +Mar-23 12:42:49.125 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 83; name: CONPLEX_ALL (24); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/9e/eb3ea15b69c05a2e60cd0a088cf8c1] +Mar-23 12:42:49.142 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:42:49.142 [Task submitter] INFO nextflow.Session - [ca/82ccc0] Submitted process > TISSUE_DISTRIBUTION (24) +Mar-23 12:42:49.148 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:42:49.148 [Task submitter] INFO nextflow.Session - [2c/a4ea8f] Submitted process > BIO_METRICS (24) +Mar-23 12:42:49.154 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:42:49.155 [Task submitter] INFO nextflow.Session - [ba/75b2a6] Submitted process > NETWORK_ENRICHMENT (24) +Mar-23 12:42:51.112 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 124; name: TISSUE_DISTRIBUTION (15); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/74/ab9e376731231ee4d73b8f8e018b03] +Mar-23 12:42:53.006 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 151; name: CONPLEX_ALL (29); status: COMPLETED; exit: 137; error: -; workDir: /data/bugra/digital_trials/work/0f/26ca056cde3d0a0faccc5d4300ad77] +Mar-23 12:42:53.009 [TaskFinalizer-5] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=CONPLEX_ALL (29); work-dir=/data/bugra/digital_trials/work/0f/26ca056cde3d0a0faccc5d4300ad77 + error [nextflow.exception.ProcessFailedException]: Process `CONPLEX_ALL (29)` terminated with an error exit status (137) +Mar-23 12:42:53.009 [TaskFinalizer-5] INFO nextflow.processor.TaskProcessor - [0f/26ca05] NOTE: Process `CONPLEX_ALL (29)` terminated with an error exit status (137) -- Execution is retried (1) +Mar-23 12:42:53.019 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:42:53.019 [Task submitter] INFO nextflow.Session - [36/87bdb0] Re-submitted process > CONPLEX_ALL (29) +Mar-23 12:42:53.120 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 113; name: TISSUE_DISTRIBUTION (11); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/e5/8cf2969c5ca16cfee21167ab260e6a] +Mar-23 12:42:59.070 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 119; name: BIO_METRICS (13); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/9a/2588bd738c68f1f0b9c3430ff00ba6] +Mar-23 12:43:00.711 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 121; name: TISSUE_DISTRIBUTION (14); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/bb/e5559b9c17fe9fe9f8bfe2e025c183] +Mar-23 12:43:04.334 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 112; name: BIO_METRICS (11); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/3b/8d8bae39a0214c412b57c1436e3d18] +Mar-23 12:43:06.770 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 129; name: TISSUE_DISTRIBUTION (17); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/a7/3ea963b0cb5accd9c0cf7dcef07ca0] +Mar-23 12:43:07.775 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 127; name: TISSUE_DISTRIBUTION (16); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/77/9891c577fca50a494253f4a5120458] +Mar-23 12:43:09.983 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 116; name: BIO_METRICS (12); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/be/1a62f09fbfc5a13f64656527d26476] +Mar-23 12:43:11.024 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 125; name: BIO_METRICS (15); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/2a/b7677df131761a1fc65c1ae07cc506] +Mar-23 12:43:18.627 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 167; name: NETWORK_ENRICHMENT (24); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ba/75b2a67efede49e2757e606a1c8caf] +Mar-23 12:43:23.672 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 122; name: BIO_METRICS (14); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/41/44f65ddd2463c35daf1512af64ad53] +Mar-23 12:43:25.318 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 126; name: BIO_METRICS (16); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/4c/8769120a19babc0bd6325e0a971ddf] +Mar-23 12:43:31.525 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 136; name: BIO_METRICS (18); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/71/d6e25b32e8710641786734a3527926] +Mar-23 12:43:38.096 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 97; name: TISSUE_DISTRIBUTION (6); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/06/c8de2ac82664b8e4ea4fa2d0ace04c] +Mar-23 12:43:41.450 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 147; name: TISSUE_DISTRIBUTION (20); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/11/082da7bfa22391d70b7ccec1f21cbe] +Mar-23 12:43:57.244 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 131; name: BIO_METRICS (17); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/33/88746ad8a88226e3f9c903ab251a72] +Mar-23 12:44:03.502 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 142; name: TISSUE_DISTRIBUTION (19); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/20/365d8d2bad0b7a7928b3b5ccb16ef5] +Mar-23 12:44:30.557 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 12; name: HUMAN_TRANSFORMER (12); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/d6/937a35d19297dce8b144bc2aa88b04] +Mar-23 12:44:30.579 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:44:30.580 [Task submitter] INFO nextflow.Session - [45/f1829b] Submitted process > GET_FINAL_METABOLITES_STATIC (31) +Mar-23 12:44:37.854 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 170; name: GET_FINAL_METABOLITES_STATIC (31); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/45/f1829b25b4f3df485be705cc48b802] +Mar-23 12:44:38.097 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:44:38.098 [Task submitter] INFO nextflow.Session - [ab/ae2b82] Submitted process > CONPLEX_ALL (31) +Mar-23 12:44:46.347 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 141; name: BIO_METRICS (19); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/3a/83663f248b80abd0bd711b5851e130] +Mar-23 12:44:52.756 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 138; name: CONPLEX_ALL (25); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/08/033ef25b49e18111d147d94fa5e9cc] +Mar-23 12:44:52.773 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:44:52.774 [Task submitter] INFO nextflow.Session - [1d/835cc1] Submitted process > TISSUE_DISTRIBUTION (25) +Mar-23 12:44:52.780 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:44:52.780 [Task submitter] INFO nextflow.Session - [6b/e16abe] Submitted process > NETWORK_ENRICHMENT (25) +Mar-23 12:44:52.787 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:44:52.787 [Task submitter] INFO nextflow.Session - [aa/55bfe8] Submitted process > BIO_METRICS (25) +Mar-23 12:44:56.670 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 146; name: BIO_METRICS (20); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/dc/26dfd877e58d766955e8a73e475a07] +Mar-23 12:44:58.289 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 153; name: TISSUE_DISTRIBUTION (21); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/7b/fb352b6e09abc1540368c2236e8256] +Mar-23 12:45:00.346 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 158; name: TISSUE_DISTRIBUTION (22); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/57/539445dedec26946d36643db2589db] +Mar-23 12:45:01.619 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 172; name: NETWORK_ENRICHMENT (25); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/6b/e16abeb9a9c0520d86e7f1541b5743] +Mar-23 12:45:36.525 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 160; name: TISSUE_DISTRIBUTION (23); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/e0/27ecec03371e5c50a226da16062585] +Mar-23 12:46:01.360 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 16; name: HUMAN_TRANSFORMER (16); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/f1/b1e309add0f1cd88797c7527fdf6f3] +Mar-23 12:46:01.384 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:46:01.385 [Task submitter] INFO nextflow.Session - [0a/d4196d] Submitted process > GET_FINAL_METABOLITES_STATIC (32) +Mar-23 12:46:07.899 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 175; name: GET_FINAL_METABOLITES_STATIC (32); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/0a/d4196d87e1a8ef468783e1e1c79ce0] +Mar-23 12:46:07.922 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:46:07.922 [Task submitter] INFO nextflow.Session - [a5/442c00] Submitted process > CONPLEX_ALL (32) +Mar-23 12:46:10.425 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 168; name: TISSUE_DISTRIBUTION (24); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ca/82ccc0e2a0af7a1bf260340e34c41e] +Mar-23 12:46:14.425 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 155; name: BIO_METRICS (21); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/4f/7fe0cb8a6e108636ff6e7ed72823dc] +Mar-23 12:46:16.494 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 156; name: BIO_METRICS (22); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/73/7f03385bcff8b67e3e71660f0b2be3] +Mar-23 12:46:45.647 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 11 -- submitted tasks are shown below +~> TaskHandler[id: 161; name: BIO_METRICS (23); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/81/57b8bf8804037a9684d53e7fcbe5b3] +~> TaskHandler[id: 162; name: CONPLEX_ALL (26); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/b0/f4117da8bcb4e3fc730d2c03ba15dd] +~> TaskHandler[id: 163; name: CONPLEX_ALL (30); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/7d/fdb02caa4facf542099ed7099fc3be] +~> TaskHandler[id: 164; name: CONPLEX_ALL (28); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/8a/d50b0a94c90015f90f3e362b3d7d66] +~> TaskHandler[id: 165; name: CONPLEX_ALL (27); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/34/389a021aae6a91d9c31b4617ed5f9b] +~> TaskHandler[id: 166; name: BIO_METRICS (24); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/2c/a4ea8fafbe9245f2e726a094c64255] +~> TaskHandler[id: 169; name: CONPLEX_ALL (29); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/36/87bdb06ca1815d4a2c374961f0b77b] +~> TaskHandler[id: 171; name: CONPLEX_ALL (31); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ab/ae2b82ac588f8923a06cb0eed5c49b] +~> TaskHandler[id: 174; name: TISSUE_DISTRIBUTION (25); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/1d/835cc1e8516441e62d198308716622] +~> TaskHandler[id: 173; name: BIO_METRICS (25); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/aa/55bfe82411e2b1e6eed1e4f477aa67] +Mar-23 12:46:58.038 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 162; name: CONPLEX_ALL (26); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/b0/f4117da8bcb4e3fc730d2c03ba15dd] +Mar-23 12:46:58.056 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:46:58.056 [Task submitter] INFO nextflow.Session - [be/3ae495] Submitted process > TISSUE_DISTRIBUTION (26) +Mar-23 12:46:58.063 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:46:58.063 [Task submitter] INFO nextflow.Session - [46/111673] Submitted process > NETWORK_ENRICHMENT (26) +Mar-23 12:46:58.071 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:46:58.071 [Task submitter] INFO nextflow.Session - [ea/71f9ff] Submitted process > BIO_METRICS (26) +Mar-23 12:47:15.106 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 161; name: BIO_METRICS (23); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/81/57b8bf8804037a9684d53e7fcbe5b3] +Mar-23 12:47:21.919 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 178; name: NETWORK_ENRICHMENT (26); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/46/111673a303dccfac38753031b1bec3] +Mar-23 12:47:23.281 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 163; name: CONPLEX_ALL (30); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/7d/fdb02caa4facf542099ed7099fc3be] +Mar-23 12:47:23.303 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:47:23.304 [Task submitter] INFO nextflow.Session - [88/263dd7] Submitted process > TISSUE_DISTRIBUTION (27) +Mar-23 12:47:23.311 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:47:23.311 [Task submitter] INFO nextflow.Session - [22/774136] Submitted process > NETWORK_ENRICHMENT (27) +Mar-23 12:47:23.319 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:47:23.319 [Task submitter] INFO nextflow.Session - [ee/901f77] Submitted process > BIO_METRICS (27) +Mar-23 12:47:29.163 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 165; name: CONPLEX_ALL (27); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/34/389a021aae6a91d9c31b4617ed5f9b] +Mar-23 12:47:29.185 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:47:29.185 [Task submitter] INFO nextflow.Session - [31/4d6017] Submitted process > TISSUE_DISTRIBUTION (28) +Mar-23 12:47:29.197 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:47:29.198 [Task submitter] INFO nextflow.Session - [71/4770d2] Submitted process > BIO_METRICS (28) +Mar-23 12:47:29.206 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:47:29.207 [Task submitter] INFO nextflow.Session - [e6/75c16c] Submitted process > NETWORK_ENRICHMENT (28) +Mar-23 12:47:35.455 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 164; name: CONPLEX_ALL (28); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/8a/d50b0a94c90015f90f3e362b3d7d66] +Mar-23 12:47:35.475 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:47:35.476 [Task submitter] INFO nextflow.Session - [cd/02c261] Submitted process > NETWORK_ENRICHMENT (29) +Mar-23 12:47:35.481 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:47:35.482 [Task submitter] INFO nextflow.Session - [66/756e3b] Submitted process > TISSUE_DISTRIBUTION (29) +Mar-23 12:47:35.490 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:47:35.490 [Task submitter] INFO nextflow.Session - [73/6a98d9] Submitted process > BIO_METRICS (29) +Mar-23 12:47:38.389 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 169; name: CONPLEX_ALL (29); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/36/87bdb06ca1815d4a2c374961f0b77b] +Mar-23 12:47:38.404 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:47:38.405 [Task submitter] INFO nextflow.Session - [56/a7eff7] Submitted process > NETWORK_ENRICHMENT (30) +Mar-23 12:47:38.410 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:47:38.411 [Task submitter] INFO nextflow.Session - [e6/6470b7] Submitted process > BIO_METRICS (30) +Mar-23 12:47:38.416 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:47:38.416 [Task submitter] INFO nextflow.Session - [84/87263a] Submitted process > TISSUE_DISTRIBUTION (30) +Mar-23 12:47:46.501 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 166; name: BIO_METRICS (24); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/2c/a4ea8fafbe9245f2e726a094c64255] +Mar-23 12:47:57.793 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 181; name: NETWORK_ENRICHMENT (27); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/22/7741360aff319d2cc7a86045382efc] +Mar-23 12:48:08.279 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 185; name: NETWORK_ENRICHMENT (28); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/e6/75c16cbf79da0b24beceff8e168ca0] +Mar-23 12:48:09.527 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 186; name: NETWORK_ENRICHMENT (29); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/cd/02c261e8fb5efe121619696a80eaa9] +Mar-23 12:48:19.727 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 189; name: NETWORK_ENRICHMENT (30); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/56/a7eff72cc801847e15229fc8c18689] +Mar-23 12:48:27.070 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 174; name: TISSUE_DISTRIBUTION (25); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/1d/835cc1e8516441e62d198308716622] +Mar-23 12:49:53.547 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 173; name: BIO_METRICS (25); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/aa/55bfe82411e2b1e6eed1e4f477aa67] +Mar-23 12:50:15.102 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 179; name: TISSUE_DISTRIBUTION (26); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/be/3ae4956f6f27c011788bb1ac918559] +Mar-23 12:50:21.853 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 171; name: CONPLEX_ALL (31); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ab/ae2b82ac588f8923a06cb0eed5c49b] +Mar-23 12:50:21.876 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:50:21.877 [Task submitter] INFO nextflow.Session - [a7/cd7d1e] Submitted process > NETWORK_ENRICHMENT (31) +Mar-23 12:50:21.884 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:50:21.885 [Task submitter] INFO nextflow.Session - [c1/90656b] Submitted process > TISSUE_DISTRIBUTION (31) +Mar-23 12:50:21.892 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:50:21.893 [Task submitter] INFO nextflow.Session - [00/9f994b] Submitted process > BIO_METRICS (31) +Mar-23 12:50:41.432 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 180; name: TISSUE_DISTRIBUTION (27); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/88/263dd77fb345314be930f39cd14482] +Mar-23 12:50:45.129 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 193; name: NETWORK_ENRICHMENT (31); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/a7/cd7d1e33e61aec81febf58824af86a] +Mar-23 12:50:50.660 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 176; name: CONPLEX_ALL (32); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/a5/442c0005dd3b8de416fbc41833aad1] +Mar-23 12:50:50.685 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:50:50.685 [Task submitter] INFO nextflow.Session - [ab/e04a6b] Submitted process > TISSUE_DISTRIBUTION (32) +Mar-23 12:50:50.692 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:50:50.692 [Task submitter] INFO nextflow.Session - [f4/c186c7] Submitted process > NETWORK_ENRICHMENT (32) +Mar-23 12:50:50.699 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-23 12:50:50.700 [Task submitter] INFO nextflow.Session - [4f/1c0edc] Submitted process > BIO_METRICS (32) +Mar-23 12:50:57.650 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 190; name: TISSUE_DISTRIBUTION (30); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/84/87263a9f4c58567a49ffca61693a9d] +Mar-23 12:50:59.209 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 183; name: TISSUE_DISTRIBUTION (28); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/31/4d60170d7411af2597d44531f936d6] +Mar-23 12:51:01.431 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 187; name: TISSUE_DISTRIBUTION (29); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/66/756e3b7cedd5360359f276390f6a76] +Mar-23 12:51:14.271 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 195; name: NETWORK_ENRICHMENT (32); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/f4/c186c727624024d8307b91a07ccd87] +Mar-23 12:51:45.712 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 9 -- submitted tasks are shown below +~> TaskHandler[id: 177; name: BIO_METRICS (26); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ea/71f9ff3cd694cabbbd2cc9e6fb0f10] +~> TaskHandler[id: 182; name: BIO_METRICS (27); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ee/901f7799c39e4f135cef17a6fb192f] +~> TaskHandler[id: 184; name: BIO_METRICS (28); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/71/4770d26c1683d21b8608dfa37b2007] +~> TaskHandler[id: 188; name: BIO_METRICS (29); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/73/6a98d9dfb6cac2596cfad30611988e] +~> TaskHandler[id: 191; name: BIO_METRICS (30); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/e6/6470b7d646985f5c5c2beb931703b1] +~> TaskHandler[id: 192; name: TISSUE_DISTRIBUTION (31); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/c1/90656b98274556b91bbec9df9b84a4] +~> TaskHandler[id: 194; name: BIO_METRICS (31); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/00/9f994bbf43db001db949e4b5d4aee5] +~> TaskHandler[id: 196; name: TISSUE_DISTRIBUTION (32); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ab/e04a6b36921f8a90c0ea146cf5304f] +~> TaskHandler[id: 197; name: BIO_METRICS (32); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/4f/1c0edc01e00b16365405f69ec56ac7] +Mar-23 12:52:18.652 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 177; name: BIO_METRICS (26); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ea/71f9ff3cd694cabbbd2cc9e6fb0f10] +Mar-23 12:52:43.125 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 184; name: BIO_METRICS (28); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/71/4770d26c1683d21b8608dfa37b2007] +Mar-23 12:52:54.873 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 188; name: BIO_METRICS (29); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/73/6a98d9dfb6cac2596cfad30611988e] +Mar-23 12:52:59.195 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 182; name: BIO_METRICS (27); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ee/901f7799c39e4f135cef17a6fb192f] +Mar-23 12:53:14.006 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 191; name: BIO_METRICS (30); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/e6/6470b7d646985f5c5c2beb931703b1] +Mar-23 12:55:10.091 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 196; name: TISSUE_DISTRIBUTION (32); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ab/e04a6b36921f8a90c0ea146cf5304f] +Mar-23 12:56:14.510 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 197; name: BIO_METRICS (32); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/4f/1c0edc01e00b16365405f69ec56ac7] +Mar-23 12:56:24.917 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 192; name: TISSUE_DISTRIBUTION (31); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/c1/90656b98274556b91bbec9df9b84a4] +Mar-23 12:56:45.747 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 194; name: BIO_METRICS (31); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/00/9f994bbf43db001db949e4b5d4aee5] +Mar-23 12:58:48.217 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 194; name: BIO_METRICS (31); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/00/9f994bbf43db001db949e4b5d4aee5] +Mar-23 12:58:48.222 [main] DEBUG nextflow.Session - Session await > all processes finished +Mar-23 12:58:48.318 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Mar-23 12:58:48.318 [main] DEBUG nextflow.Session - Session await > all barriers passed +Mar-23 12:58:48.321 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'TaskFinalizer' shutdown completed (hard=false) +Mar-23 12:58:48.322 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'PublishDir' shutdown completed (hard=false) +Mar-23 12:58:48.339 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=192; failedCount=5; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=5; abortedCount=0; succeedDuration=9h 44m 45s; failedDuration=11m 48s; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=62; peakCpus=62; peakMemory=250 GB; ] +Mar-23 12:58:48.481 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Mar-23 12:58:48.552 [main] INFO org.pf4j.AbstractPluginManager - Stop plugin 'nf-tower@1.11.3' +Mar-23 12:58:48.552 [main] DEBUG nextflow.plugin.BasePlugin - Plugin stopped nf-tower +Mar-23 12:58:48.553 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'FileTransfer' shutdown completed (hard=false) +Mar-23 12:58:48.554 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/.nextflow.log.2 b/.nextflow.log.2 new file mode 100644 index 0000000..4e3ad86 --- /dev/null +++ b/.nextflow.log.2 @@ -0,0 +1,971 @@ +Mar-18 21:20:15.931 [main] DEBUG nextflow.cli.Launcher - $> nextflow run test.nf -params-file /data/digital-trials-data/gabe-run3/gabe-run3.json +Mar-18 21:20:16.316 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 25.04.3 +Mar-18 21:20:16.347 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/home/omic/.nextflow/plugins; core-plugins: nf-amazon@2.15.0,nf-azure@1.16.0,nf-cloudcache@0.4.3,nf-codecommit@0.2.3,nf-console@1.2.1,nf-google@1.21.0,nf-k8s@1.0.0,nf-tower@1.11.3,nf-wave@1.12.1 +Mar-18 21:20:16.384 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Mar-18 21:20:16.386 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Mar-18 21:20:16.389 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Mar-18 21:20:16.403 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Mar-18 21:20:16.429 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugra/digital_trials/nextflow.config +Mar-18 21:20:16.432 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugra/digital_trials/nextflow.config +Mar-18 21:20:16.471 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /home/omic/.nextflow/secrets/store.json +Mar-18 21:20:16.476 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@6ef81f31] - activable => nextflow.secret.LocalSecretsProvider@6ef81f31 +Mar-18 21:20:16.506 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `standard` +Mar-18 21:20:17.272 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 from script declaration +Mar-18 21:20:17.293 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [zen_sax] DSL2 - revision: 0e14afbd94 +Mar-18 21:20:17.295 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Mar-18 21:20:17.296 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[nf-tower@1.11.3] +Mar-18 21:20:17.299 [main] DEBUG nextflow.plugin.PluginUpdater - Installing plugin nf-tower version: 1.11.3 +Mar-18 21:20:17.312 [main] INFO org.pf4j.AbstractPluginManager - Plugin 'nf-tower@1.11.3' resolved +Mar-18 21:20:17.312 [main] INFO org.pf4j.AbstractPluginManager - Start plugin 'nf-tower@1.11.3' +Mar-18 21:20:17.328 [main] DEBUG nextflow.plugin.BasePlugin - Plugin started nf-tower@1.11.3 +Mar-18 21:20:17.398 [main] DEBUG nextflow.Session - Session UUID: e75e46d9-ad7d-4b56-bdf1-9a1c0923dd64 +Mar-18 21:20:17.398 [main] DEBUG nextflow.Session - Run name: zen_sax +Mar-18 21:20:17.399 [main] DEBUG nextflow.Session - Executor pool size: 80 +Mar-18 21:20:17.410 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Mar-18 21:20:17.418 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Mar-18 21:20:17.450 [main] DEBUG nextflow.cli.CmdRun - + Version: 25.04.3 build 5949 + Created: 02-06-2025 20:56 UTC + System: Linux 6.11.0-26-generic + Runtime: Groovy 4.0.26 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 761650@k8s-node23 [127.0.1.1] + CPUs: 80 - Mem: 251.6 GB (27.7 GB) - Swap: 0 (0) +Mar-18 21:20:17.481 [main] DEBUG nextflow.Session - Work-dir: /data/bugra/digital_trials/work [btrfs] +Mar-18 21:20:17.482 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugra/digital_trials/bin +Mar-18 21:20:17.499 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Mar-18 21:20:17.519 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Mar-18 21:20:17.525 [main] DEBUG nextflow.Session - Observer factory: TowerFactory +Mar-18 21:20:17.528 [main] DEBUG nextflow.Session - Observer factory (v2): LinObserverFactory +Mar-18 21:20:17.561 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Mar-18 21:20:17.574 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 81; maxThreads: 1000 +Mar-18 21:20:17.799 [main] DEBUG nextflow.Session - Session start +Mar-18 21:20:18.332 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Mar-18 21:20:19.266 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-18 21:20:19.266 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-18 21:20:19.274 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Mar-18 21:20:19.284 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=80; memory=251.6 GB; capacity=80; pollInterval=100ms; dumpInterval=5m +Mar-18 21:20:19.287 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Mar-18 21:20:19.324 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'HUMAN_TRANSFORMER': maxForks=0; fair=false; array=0 +Mar-18 21:20:19.430 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-18 21:20:19.431 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-18 21:20:19.433 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'GET_FINAL_METABOLITES_STATIC': maxForks=0; fair=false; array=0 +Mar-18 21:20:19.447 [main] DEBUG nextflow.script.ProcessConfig - Config settings `withLabel:gpu_process` matches labels `gpu_process` for process with name PREPROCESS_PROTEIN +Mar-18 21:20:19.453 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-18 21:20:19.453 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-18 21:20:19.455 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'PREPROCESS_PROTEIN': maxForks=0; fair=false; array=0 +Mar-18 21:20:19.524 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-18 21:20:19.525 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-18 21:20:19.526 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'CONPLEX_ALL': maxForks=0; fair=false; array=0 +Mar-18 21:20:19.559 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-18 21:20:19.559 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-18 21:20:19.560 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'NETWORK_ENRICHMENT': maxForks=0; fair=false; array=0 +Mar-18 21:20:19.569 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-18 21:20:19.569 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-18 21:20:19.570 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'TISSUE_DISTRIBUTION': maxForks=0; fair=false; array=0 +Mar-18 21:20:19.595 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-18 21:20:19.596 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-18 21:20:19.597 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'BIO_METRICS': maxForks=0; fair=false; array=0 +Mar-18 21:20:19.600 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: HUMAN_TRANSFORMER, METABOLITES_BY_MASS, GET_FINAL_METABOLITES_STATIC, CONPLEX_ALL, NETWORK_ENRICHMENT, GET_FINAL_METABOLITES, CONPLEX, BIO_METRICS, SUPER_TRANSFORMER, TISSUE_DISTRIBUTION, MERGE_DRUG, MERGE_INTERACTIONS, PREPROCESS_PROTEIN, ORDERED_SEQUENCE +Mar-18 21:20:19.604 [main] DEBUG nextflow.Session - Igniting dataflow network (11) +Mar-18 21:20:19.612 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > HUMAN_TRANSFORMER +Mar-18 21:20:19.613 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > GET_FINAL_METABOLITES_STATIC +Mar-18 21:20:19.614 [PathVisitor-1] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /data/digital-trials-data/gabe-run3/input/ligands/; pattern: *.csv; options: [:] +Mar-18 21:20:19.614 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > PREPROCESS_PROTEIN +Mar-18 21:20:19.614 [PathVisitor-3] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /mnt/dreamdock-data/digital_trials/input/blank/; pattern: *.fasta; options: [:] +Mar-18 21:20:19.615 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > CONPLEX_ALL +Mar-18 21:20:19.616 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > NETWORK_ENRICHMENT +Mar-18 21:20:19.616 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > TISSUE_DISTRIBUTION +Mar-18 21:20:19.617 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > BIO_METRICS +Mar-18 21:20:19.618 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_e39e54e7aa543fd0: /data/bugra/digital_trials/main_biotransformer.nf + Script_d345b7a65a8f3255: /data/bugra/digital_trials/main_conplex.nf + Script_ec2c89c0dbf76553: /data/bugra/digital_trials/test.nf + Script_ec01f2a38db15aa5: /data/bugra/digital_trials/main_tissue.nf +Mar-18 21:20:19.618 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Mar-18 21:20:19.618 [main] DEBUG nextflow.Session - Session await +Mar-18 21:20:20.162 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.171 [Task submitter] INFO nextflow.Session - [72/b877a7] Submitted process > HUMAN_TRANSFORMER (22) +Mar-18 21:20:20.185 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.185 [Task submitter] INFO nextflow.Session - [b8/36834c] Submitted process > HUMAN_TRANSFORMER (17) +Mar-18 21:20:20.193 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.193 [Task submitter] INFO nextflow.Session - [7a/0eb83a] Submitted process > HUMAN_TRANSFORMER (45) +Mar-18 21:20:20.201 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.202 [Task submitter] INFO nextflow.Session - [0f/9a0cd5] Submitted process > HUMAN_TRANSFORMER (74) +Mar-18 21:20:20.209 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.210 [Task submitter] INFO nextflow.Session - [c4/e32501] Submitted process > HUMAN_TRANSFORMER (29) +Mar-18 21:20:20.217 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.217 [Task submitter] INFO nextflow.Session - [32/fb9e93] Submitted process > HUMAN_TRANSFORMER (54) +Mar-18 21:20:20.224 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.224 [Task submitter] INFO nextflow.Session - [fb/faa4aa] Submitted process > HUMAN_TRANSFORMER (55) +Mar-18 21:20:20.232 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.233 [Task submitter] INFO nextflow.Session - [5a/faa523] Submitted process > HUMAN_TRANSFORMER (40) +Mar-18 21:20:20.240 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.241 [Task submitter] INFO nextflow.Session - [7d/2fa815] Submitted process > HUMAN_TRANSFORMER (67) +Mar-18 21:20:20.250 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.251 [Task submitter] INFO nextflow.Session - [2a/96b957] Submitted process > HUMAN_TRANSFORMER (35) +Mar-18 21:20:20.265 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.265 [Task submitter] INFO nextflow.Session - [b9/e57dda] Submitted process > HUMAN_TRANSFORMER (9) +Mar-18 21:20:20.272 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.273 [Task submitter] INFO nextflow.Session - [fd/0b14fd] Submitted process > HUMAN_TRANSFORMER (86) +Mar-18 21:20:20.281 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.282 [Task submitter] INFO nextflow.Session - [a6/cc7c28] Submitted process > HUMAN_TRANSFORMER (51) +Mar-18 21:20:20.290 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.291 [Task submitter] INFO nextflow.Session - [b9/7e54d8] Submitted process > HUMAN_TRANSFORMER (48) +Mar-18 21:20:20.297 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.298 [Task submitter] INFO nextflow.Session - [a4/4bea8f] Submitted process > HUMAN_TRANSFORMER (1) +Mar-18 21:20:20.305 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.305 [Task submitter] INFO nextflow.Session - [a4/46870e] Submitted process > HUMAN_TRANSFORMER (25) +Mar-18 21:20:20.312 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.313 [Task submitter] INFO nextflow.Session - [99/0bf7d9] Submitted process > HUMAN_TRANSFORMER (13) +Mar-18 21:20:20.322 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.323 [Task submitter] INFO nextflow.Session - [7f/996282] Submitted process > HUMAN_TRANSFORMER (73) +Mar-18 21:20:20.333 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.333 [Task submitter] INFO nextflow.Session - [95/e721b6] Submitted process > HUMAN_TRANSFORMER (58) +Mar-18 21:20:20.342 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.343 [Task submitter] INFO nextflow.Session - [4c/6bcf63] Submitted process > HUMAN_TRANSFORMER (95) +Mar-18 21:20:20.352 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.353 [Task submitter] INFO nextflow.Session - [75/1131f1] Submitted process > HUMAN_TRANSFORMER (80) +Mar-18 21:20:20.364 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.365 [Task submitter] INFO nextflow.Session - [21/9c8453] Submitted process > HUMAN_TRANSFORMER (70) +Mar-18 21:20:20.375 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.376 [Task submitter] INFO nextflow.Session - [45/5aca40] Submitted process > HUMAN_TRANSFORMER (50) +Mar-18 21:20:20.385 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.386 [Task submitter] INFO nextflow.Session - [9f/6ebe51] Submitted process > HUMAN_TRANSFORMER (100) +Mar-18 21:20:20.394 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.395 [Task submitter] INFO nextflow.Session - [ab/216ae0] Submitted process > HUMAN_TRANSFORMER (5) +Mar-18 21:20:20.404 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.405 [Task submitter] INFO nextflow.Session - [da/540299] Submitted process > HUMAN_TRANSFORMER (46) +Mar-18 21:20:20.411 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.412 [Task submitter] INFO nextflow.Session - [b5/f38923] Submitted process > HUMAN_TRANSFORMER (39) +Mar-18 21:20:20.418 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.418 [Task submitter] INFO nextflow.Session - [68/1826f5] Submitted process > HUMAN_TRANSFORMER (78) +Mar-18 21:20:20.424 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.424 [Task submitter] INFO nextflow.Session - [ed/3b042b] Submitted process > HUMAN_TRANSFORMER (33) +Mar-18 21:20:20.431 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.431 [Task submitter] INFO nextflow.Session - [3f/075456] Submitted process > HUMAN_TRANSFORMER (6) +Mar-18 21:20:20.436 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.437 [Task submitter] INFO nextflow.Session - [7a/791a5f] Submitted process > HUMAN_TRANSFORMER (31) +Mar-18 21:20:20.442 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.443 [Task submitter] INFO nextflow.Session - [74/3c1d46] Submitted process > HUMAN_TRANSFORMER (60) +Mar-18 21:20:20.449 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.449 [Task submitter] INFO nextflow.Session - [03/bc533b] Submitted process > HUMAN_TRANSFORMER (42) +Mar-18 21:20:20.456 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.456 [Task submitter] INFO nextflow.Session - [22/fd1af0] Submitted process > HUMAN_TRANSFORMER (49) +Mar-18 21:20:20.465 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.466 [Task submitter] INFO nextflow.Session - [43/60db45] Submitted process > HUMAN_TRANSFORMER (61) +Mar-18 21:20:20.475 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.476 [Task submitter] INFO nextflow.Session - [c3/96d9ca] Submitted process > HUMAN_TRANSFORMER (47) +Mar-18 21:20:20.485 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.486 [Task submitter] INFO nextflow.Session - [1e/136b16] Submitted process > HUMAN_TRANSFORMER (28) +Mar-18 21:20:20.494 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.495 [Task submitter] INFO nextflow.Session - [b3/18f2d8] Submitted process > HUMAN_TRANSFORMER (21) +Mar-18 21:20:20.503 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.504 [Task submitter] INFO nextflow.Session - [eb/bd1719] Submitted process > HUMAN_TRANSFORMER (26) +Mar-18 21:20:20.511 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.512 [Task submitter] INFO nextflow.Session - [2d/813f73] Submitted process > HUMAN_TRANSFORMER (69) +Mar-18 21:20:20.518 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.518 [Task submitter] INFO nextflow.Session - [d6/469d3a] Submitted process > HUMAN_TRANSFORMER (62) +Mar-18 21:20:20.524 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.524 [Task submitter] INFO nextflow.Session - [7d/6149e5] Submitted process > HUMAN_TRANSFORMER (15) +Mar-18 21:20:20.533 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.533 [Task submitter] INFO nextflow.Session - [b0/358e08] Submitted process > HUMAN_TRANSFORMER (4) +Mar-18 21:20:20.539 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.540 [Task submitter] INFO nextflow.Session - [97/d91d94] Submitted process > HUMAN_TRANSFORMER (79) +Mar-18 21:20:20.545 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.546 [Task submitter] INFO nextflow.Session - [58/36391d] Submitted process > HUMAN_TRANSFORMER (52) +Mar-18 21:20:20.551 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.552 [Task submitter] INFO nextflow.Session - [16/6dd6cf] Submitted process > HUMAN_TRANSFORMER (66) +Mar-18 21:20:20.558 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.558 [Task submitter] INFO nextflow.Session - [44/42e04d] Submitted process > HUMAN_TRANSFORMER (43) +Mar-18 21:20:20.570 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.571 [Task submitter] INFO nextflow.Session - [34/bc34df] Submitted process > HUMAN_TRANSFORMER (123) +Mar-18 21:20:20.578 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.579 [Task submitter] INFO nextflow.Session - [23/9ecd04] Submitted process > HUMAN_TRANSFORMER (44) +Mar-18 21:20:20.585 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-18 21:20:20.586 [Task submitter] INFO nextflow.Session - [72/752728] Submitted process > HUMAN_TRANSFORMER (30) +Mar-18 21:20:28.975 [SIGINT handler] DEBUG nextflow.Session - Session aborted -- Cause: SIGINT +Mar-18 21:20:28.996 [SIGINT handler] DEBUG nextflow.Session - The following nodes are still active: +[process] GET_FINAL_METABOLITES_STATIC + status=ACTIVE + port 0: (queue) OPEN ; channel: smiles_csv + port 1: (value) bound ; channel: chembl_db + port 2: (cntrl) - ; channel: $ + +[process] CONPLEX_ALL + status=ACTIVE + port 0: (queue) OPEN ; channel: - + port 1: (value) bound ; channel: input_zarr + port 2: (cntrl) - ; channel: $ + +[process] NETWORK_ENRICHMENT + status=ACTIVE + port 0: (queue) OPEN ; channel: interactions + port 1: (cntrl) - ; channel: $ + +[process] TISSUE_DISTRIBUTION + status=ACTIVE + port 0: (queue) OPEN ; channel: interaction + port 1: (cntrl) - ; channel: $ + +[process] BIO_METRICS + status=ACTIVE + port 0: (queue) OPEN ; channel: - + port 1: (cntrl) - ; channel: $ + +Mar-18 21:20:29.001 [main] DEBUG nextflow.Session - Session await > all processes finished +Mar-18 21:20:29.002 [main] DEBUG nextflow.Session - Session await > all barriers passed +Mar-18 21:20:29.008 [main] WARN n.processor.TaskPollingMonitor - Killing running tasks (50) +Mar-18 21:20:29.204 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 74; name: HUMAN_TRANSFORMER (74); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/0f/9a0cd5d97aee26e6b419677d571f1d] +Mar-18 21:20:29.206 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Mar-18 21:20:29.211 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 29; name: HUMAN_TRANSFORMER (29); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/c4/e32501010caae58fa439c623a2fecd] +Mar-18 21:20:29.212 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 54; name: HUMAN_TRANSFORMER (54); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/32/fb9e93711155e96b0eca9ca1a8454e] +Mar-18 21:20:29.214 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 55; name: HUMAN_TRANSFORMER (55); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/fb/faa4aaa5a507b07f6ad9fb9cdf2127] +Mar-18 21:20:29.216 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 40; name: HUMAN_TRANSFORMER (40); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/5a/faa523c3ce4d70240791b474747fde] +Mar-18 21:20:29.217 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 67; name: HUMAN_TRANSFORMER (67); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/7d/2fa8150c57d90a74cd338cd5ce8bfe] +Mar-18 21:20:29.219 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 35; name: HUMAN_TRANSFORMER (35); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/2a/96b957dfb012e27d77c31f4b94d051] +Mar-18 21:20:29.220 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 86; name: HUMAN_TRANSFORMER (86); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/fd/0b14fd788e43705a0d86419395e93c] +Mar-18 21:20:29.221 [main] DEBUG n.executor.local.LocalTaskHandler - Unable to kill HUMAN_TRANSFORMER (45) -- command: kill -TERM 762008; exit: 1 + bash: line 1: kill: (762008) - No such process + +Mar-18 21:20:29.222 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 51; name: HUMAN_TRANSFORMER (51); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/a6/cc7c28680437f5e2c42a1709323bb7] +Mar-18 21:20:29.223 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 48; name: HUMAN_TRANSFORMER (48); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/b9/7e54d83d949dca0466afe4c816d12d] +Mar-18 21:20:29.225 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: HUMAN_TRANSFORMER (1); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/a4/4bea8fb78d84cb4e6a1b3b78de1a1d] +Mar-18 21:20:29.226 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 25; name: HUMAN_TRANSFORMER (25); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/a4/46870eb8ce5691c0f2149045550ad7] +Mar-18 21:20:29.227 [TaskFinalizer-2] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (29); work-dir=/data/bugra/digital_trials/work/c4/e32501010caae58fa439c623a2fecd + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (29)` terminated with an error exit status (130) +Mar-18 21:20:29.227 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 13; name: HUMAN_TRANSFORMER (13); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/99/0bf7d908b80de58cfef30a9ae30875] +Mar-18 21:20:29.228 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 73; name: HUMAN_TRANSFORMER (73); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/7f/99628294d9fb367576004fc4cff3eb] +Mar-18 21:20:29.229 [main] DEBUG n.executor.local.LocalTaskHandler - Unable to kill HUMAN_TRANSFORMER (25) -- command: kill -TERM 762373; exit: 1 + bash: line 1: kill: (762373) - No such process + +Mar-18 21:20:29.229 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 58; name: HUMAN_TRANSFORMER (58); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/95/e721b6a649d83eb7e942021377d531] +Mar-18 21:20:29.231 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 95; name: HUMAN_TRANSFORMER (95); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/4c/6bcf63f1afb66a1ed51a58c8ef54a3] +Mar-18 21:20:29.232 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 80; name: HUMAN_TRANSFORMER (80); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/75/1131f1d70cc028dd7b726be37d1e31] +Mar-18 21:20:29.233 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 70; name: HUMAN_TRANSFORMER (70); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/21/9c8453efe5eeb789846c2451f0a13f] +Mar-18 21:20:29.234 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 50; name: HUMAN_TRANSFORMER (50); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/45/5aca403dc4da2c3d24fe10177924c8] +Mar-18 21:20:29.234 [main] DEBUG n.executor.local.LocalTaskHandler - Unable to kill HUMAN_TRANSFORMER (80) -- command: kill -TERM 762532; exit: 1 + bash: line 1: kill: (762532) - No such process + +Mar-18 21:20:29.235 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 100; name: HUMAN_TRANSFORMER (100); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/9f/6ebe51bfe8573e36f728abd651796c] +Mar-18 21:20:29.237 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 5; name: HUMAN_TRANSFORMER (5); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/ab/216ae0fc95fd279206b22f34dc000a] +Mar-18 21:20:29.238 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 46; name: HUMAN_TRANSFORMER (46); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/da/540299373969ef3de95545b6de644f] +Mar-18 21:20:29.239 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 39; name: HUMAN_TRANSFORMER (39); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/b5/f389239211a370dc32541c3a4fa3e7] +Mar-18 21:20:29.239 [main] DEBUG n.executor.local.LocalTaskHandler - Unable to kill HUMAN_TRANSFORMER (5) -- command: kill -TERM 762695; exit: 1 + bash: line 1: kill: (762695) - No such process + +Mar-18 21:20:29.240 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 78; name: HUMAN_TRANSFORMER (78); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/68/1826f56db8ca6748424d2048035406] +Mar-18 21:20:29.240 [TaskFinalizer-2] INFO nextflow.processor.TaskProcessor - [c4/e32501] NOTE: Process `HUMAN_TRANSFORMER (29)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.241 [TaskFinalizer-10] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (48); work-dir=/data/bugra/digital_trials/work/b9/7e54d83d949dca0466afe4c816d12d + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (48)` terminated with an error exit status (130) +Mar-18 21:20:29.241 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 33; name: HUMAN_TRANSFORMER (33); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/ed/3b042b5b484c9ff44f2901ae29af3b] +Mar-18 21:20:29.242 [TaskFinalizer-10] INFO nextflow.processor.TaskProcessor - [b9/7e54d8] NOTE: Process `HUMAN_TRANSFORMER (48)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.242 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 6; name: HUMAN_TRANSFORMER (6); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/3f/075456044e2114e2f07d282a4652f8] +Mar-18 21:20:29.242 [TaskFinalizer-6] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (67); work-dir=/data/bugra/digital_trials/work/7d/2fa8150c57d90a74cd338cd5ce8bfe + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (67)` terminated with an error exit status (130) +Mar-18 21:20:29.243 [TaskFinalizer-6] INFO nextflow.processor.TaskProcessor - [7d/2fa815] NOTE: Process `HUMAN_TRANSFORMER (67)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.243 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 31; name: HUMAN_TRANSFORMER (31); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/7a/791a5fc3d48e3532dd905a9d6ffe60] +Mar-18 21:20:29.244 [TaskFinalizer-3] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (54); work-dir=/data/bugra/digital_trials/work/32/fb9e93711155e96b0eca9ca1a8454e + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (54)` terminated with an error exit status (130) +Mar-18 21:20:29.245 [TaskFinalizer-3] INFO nextflow.processor.TaskProcessor - [32/fb9e93] NOTE: Process `HUMAN_TRANSFORMER (54)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.245 [TaskFinalizer-5] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (40); work-dir=/data/bugra/digital_trials/work/5a/faa523c3ce4d70240791b474747fde + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (40)` terminated with an error exit status (130) +Mar-18 21:20:29.245 [main] DEBUG n.executor.local.LocalTaskHandler - Unable to kill HUMAN_TRANSFORMER (33) -- command: kill -TERM 762806; exit: 1 + bash: line 1: kill: (762806) - No such process + +Mar-18 21:20:29.246 [TaskFinalizer-5] INFO nextflow.processor.TaskProcessor - [5a/faa523] NOTE: Process `HUMAN_TRANSFORMER (40)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.247 [TaskFinalizer-7] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (35); work-dir=/data/bugra/digital_trials/work/2a/96b957dfb012e27d77c31f4b94d051 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (35)` terminated with an error exit status (130) +Mar-18 21:20:29.247 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 60; name: HUMAN_TRANSFORMER (60); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/74/3c1d464c97545d0573e617639c1996] +Mar-18 21:20:29.248 [TaskFinalizer-7] INFO nextflow.processor.TaskProcessor - [2a/96b957] NOTE: Process `HUMAN_TRANSFORMER (35)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.248 [TaskFinalizer-1] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (74); work-dir=/data/bugra/digital_trials/work/0f/9a0cd5d97aee26e6b419677d571f1d + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (74)` terminated with an error exit status (130) +Mar-18 21:20:29.248 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 42; name: HUMAN_TRANSFORMER (42); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/03/bc533b3f0412ff4170434e49742e08] +Mar-18 21:20:29.249 [TaskFinalizer-1] INFO nextflow.processor.TaskProcessor - [0f/9a0cd5] NOTE: Process `HUMAN_TRANSFORMER (74)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.249 [main] DEBUG n.executor.local.LocalTaskHandler - Unable to kill HUMAN_TRANSFORMER (60) -- command: kill -TERM 762866; exit: 1 + bash: line 1: kill: (762866) - No such process + +Mar-18 21:20:29.249 [TaskFinalizer-8] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (86); work-dir=/data/bugra/digital_trials/work/fd/0b14fd788e43705a0d86419395e93c + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (86)` terminated with an error exit status (130) +Mar-18 21:20:29.250 [TaskFinalizer-8] INFO nextflow.processor.TaskProcessor - [fd/0b14fd] NOTE: Process `HUMAN_TRANSFORMER (86)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.251 [TaskFinalizer-9] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (51); work-dir=/data/bugra/digital_trials/work/a6/cc7c28680437f5e2c42a1709323bb7 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (51)` terminated with an error exit status (130) +Mar-18 21:20:29.251 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 49; name: HUMAN_TRANSFORMER (49); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/22/fd1af06b9e3d47711a38d32e512b6a] +Mar-18 21:20:29.252 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 61; name: HUMAN_TRANSFORMER (61); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/43/60db45ede0bd4446d23695ada0d61e] +Mar-18 21:20:29.252 [TaskFinalizer-9] INFO nextflow.processor.TaskProcessor - [a6/cc7c28] NOTE: Process `HUMAN_TRANSFORMER (51)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.252 [TaskFinalizer-4] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (55); work-dir=/data/bugra/digital_trials/work/fb/faa4aaa5a507b07f6ad9fb9cdf2127 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (55)` terminated with an error exit status (130) +Mar-18 21:20:29.253 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 47; name: HUMAN_TRANSFORMER (47); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/c3/96d9ca9db58d7b185d3a1593398cf5] +Mar-18 21:20:29.253 [TaskFinalizer-4] INFO nextflow.processor.TaskProcessor - [fb/faa4aa] NOTE: Process `HUMAN_TRANSFORMER (55)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.253 [TaskFinalizer-8] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (70); work-dir=/data/bugra/digital_trials/work/21/9c8453efe5eeb789846c2451f0a13f + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (70)` terminated with an error exit status (130) +Mar-18 21:20:29.254 [main] DEBUG n.executor.local.LocalTaskHandler - Unable to kill HUMAN_TRANSFORMER (49) -- command: kill -TERM 762944; exit: 1 + bash: line 1: kill: (762944) - No such process + +Mar-18 21:20:29.254 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 28; name: HUMAN_TRANSFORMER (28); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/1e/136b163a14f2e329c0a63def34303a] +Mar-18 21:20:29.254 [TaskFinalizer-8] INFO nextflow.processor.TaskProcessor - [21/9c8453] NOTE: Process `HUMAN_TRANSFORMER (70)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.255 [TaskFinalizer-1] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (80); work-dir=/data/bugra/digital_trials/work/75/1131f1d70cc028dd7b726be37d1e31 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (80)` terminated with an error exit status (130) +Mar-18 21:20:29.255 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 21; name: HUMAN_TRANSFORMER (21); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/b3/18f2d8de1dee7ebd1e29c36766bb38] +Mar-18 21:20:29.256 [TaskFinalizer-1] INFO nextflow.processor.TaskProcessor - [75/1131f1] NOTE: Process `HUMAN_TRANSFORMER (80)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.256 [TaskFinalizer-7] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (95); work-dir=/data/bugra/digital_trials/work/4c/6bcf63f1afb66a1ed51a58c8ef54a3 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (95)` terminated with an error exit status (130) +Mar-18 21:20:29.256 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 26; name: HUMAN_TRANSFORMER (26); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/eb/bd17199be64672ed1cd2a9c2de98fc] +Mar-18 21:20:29.257 [TaskFinalizer-7] INFO nextflow.processor.TaskProcessor - [4c/6bcf63] NOTE: Process `HUMAN_TRANSFORMER (95)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.257 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 69; name: HUMAN_TRANSFORMER (69); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/2d/813f736812d2fe55b217ee6f3a6080] +Mar-18 21:20:29.257 [TaskFinalizer-5] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (58); work-dir=/data/bugra/digital_trials/work/95/e721b6a649d83eb7e942021377d531 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (58)` terminated with an error exit status (130) +Mar-18 21:20:29.258 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 62; name: HUMAN_TRANSFORMER (62); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/d6/469d3a52fd3e47c31e3f9629531225] +Mar-18 21:20:29.258 [TaskFinalizer-5] INFO nextflow.processor.TaskProcessor - [95/e721b6] NOTE: Process `HUMAN_TRANSFORMER (58)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.258 [TaskFinalizer-3] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (73); work-dir=/data/bugra/digital_trials/work/7f/99628294d9fb367576004fc4cff3eb + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (73)` terminated with an error exit status (130) +Mar-18 21:20:29.259 [main] DEBUG n.executor.local.LocalTaskHandler - Unable to kill HUMAN_TRANSFORMER (21) -- command: kill -TERM 763075; exit: 1 + bash: line 1: kill: (763075) - No such process + +Mar-18 21:20:29.259 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 15; name: HUMAN_TRANSFORMER (15); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/7d/6149e5bb637d5906e412e869847053] +Mar-18 21:20:29.259 [TaskFinalizer-3] INFO nextflow.processor.TaskProcessor - [7f/996282] NOTE: Process `HUMAN_TRANSFORMER (73)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.260 [TaskFinalizer-6] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (13); work-dir=/data/bugra/digital_trials/work/99/0bf7d908b80de58cfef30a9ae30875 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (13)` terminated with an error exit status (130) +Mar-18 21:20:29.260 [TaskFinalizer-6] INFO nextflow.processor.TaskProcessor - [99/0bf7d9] NOTE: Process `HUMAN_TRANSFORMER (13)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.260 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 4; name: HUMAN_TRANSFORMER (4); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/b0/358e0857d3fc84723c4c6f68449def] +Mar-18 21:20:29.261 [TaskFinalizer-10] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (25); work-dir=/data/bugra/digital_trials/work/a4/46870eb8ce5691c0f2149045550ad7 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (25)` terminated with an error exit status (130) +Mar-18 21:20:29.261 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 79; name: HUMAN_TRANSFORMER (79); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/97/d91d948e50cf63f8b4ff02716cae35] +Mar-18 21:20:29.262 [TaskFinalizer-10] INFO nextflow.processor.TaskProcessor - [a4/46870e] NOTE: Process `HUMAN_TRANSFORMER (25)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.262 [TaskFinalizer-2] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (1); work-dir=/data/bugra/digital_trials/work/a4/4bea8fb78d84cb4e6a1b3b78de1a1d + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (1)` terminated with an error exit status (130) +Mar-18 21:20:29.263 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 52; name: HUMAN_TRANSFORMER (52); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/58/36391d12e7f01e89c4c4b007a48fdf] +Mar-18 21:20:29.263 [TaskFinalizer-2] INFO nextflow.processor.TaskProcessor - [a4/4bea8f] NOTE: Process `HUMAN_TRANSFORMER (1)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.263 [TaskFinalizer-6] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (6); work-dir=/data/bugra/digital_trials/work/3f/075456044e2114e2f07d282a4652f8 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (6)` terminated with an error exit status (130) +Mar-18 21:20:29.264 [main] DEBUG n.executor.local.LocalTaskHandler - Unable to kill HUMAN_TRANSFORMER (4) -- command: kill -TERM 763174; exit: 1 + bash: line 1: kill: (763174) - No such process + +Mar-18 21:20:29.264 [TaskFinalizer-6] INFO nextflow.processor.TaskProcessor - [3f/075456] NOTE: Process `HUMAN_TRANSFORMER (6)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.264 [TaskFinalizer-3] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (33); work-dir=/data/bugra/digital_trials/work/ed/3b042b5b484c9ff44f2901ae29af3b + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (33)` terminated with an error exit status (130) +Mar-18 21:20:29.264 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 66; name: HUMAN_TRANSFORMER (66); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/16/6dd6cfac099d7134782d3b80712847] +Mar-18 21:20:29.265 [TaskFinalizer-3] INFO nextflow.processor.TaskProcessor - [ed/3b042b] NOTE: Process `HUMAN_TRANSFORMER (33)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.265 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 43; name: HUMAN_TRANSFORMER (43); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/44/42e04d6d950d65bdc5c53a29f24aff] +Mar-18 21:20:29.266 [TaskFinalizer-5] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (78); work-dir=/data/bugra/digital_trials/work/68/1826f56db8ca6748424d2048035406 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (78)` terminated with an error exit status (130) +Mar-18 21:20:29.266 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 123; name: HUMAN_TRANSFORMER (123); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/34/bc34dfc5b77bd45bf850bbefd1ade3] +Mar-18 21:20:29.266 [TaskFinalizer-5] INFO nextflow.processor.TaskProcessor - [68/1826f5] NOTE: Process `HUMAN_TRANSFORMER (78)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.267 [TaskFinalizer-7] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (39); work-dir=/data/bugra/digital_trials/work/b5/f389239211a370dc32541c3a4fa3e7 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (39)` terminated with an error exit status (130) +Mar-18 21:20:29.268 [TaskFinalizer-7] INFO nextflow.processor.TaskProcessor - [b5/f38923] NOTE: Process `HUMAN_TRANSFORMER (39)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.268 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 44; name: HUMAN_TRANSFORMER (44); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/23/9ecd04cb0afa1a6189c69d0c0fe507] +Mar-18 21:20:29.268 [TaskFinalizer-1] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (46); work-dir=/data/bugra/digital_trials/work/da/540299373969ef3de95545b6de644f + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (46)` terminated with an error exit status (130) +Mar-18 21:20:29.268 [main] DEBUG n.executor.local.LocalTaskHandler - Unable to kill HUMAN_TRANSFORMER (43) -- command: kill -TERM 763252; exit: 1 + bash: line 1: kill: (763252) - No such process + +Mar-18 21:20:29.269 [TaskFinalizer-1] INFO nextflow.processor.TaskProcessor - [da/540299] NOTE: Process `HUMAN_TRANSFORMER (46)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.269 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 30; name: HUMAN_TRANSFORMER (30); status: COMPLETED; exit: 130; error: -; workDir: /data/bugra/digital_trials/work/72/7527282097aa9de800c0e570242280] +Mar-18 21:20:29.269 [TaskFinalizer-8] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (5); work-dir=/data/bugra/digital_trials/work/ab/216ae0fc95fd279206b22f34dc000a + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (5)` terminated with an error exit status (130) +Mar-18 21:20:29.270 [TaskFinalizer-8] INFO nextflow.processor.TaskProcessor - [ab/216ae0] NOTE: Process `HUMAN_TRANSFORMER (5)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.270 [TaskFinalizer-4] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (100); work-dir=/data/bugra/digital_trials/work/9f/6ebe51bfe8573e36f728abd651796c + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (100)` terminated with an error exit status (130) +Mar-18 21:20:29.271 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Mar-18 21:20:29.271 [TaskFinalizer-4] INFO nextflow.processor.TaskProcessor - [9f/6ebe51] NOTE: Process `HUMAN_TRANSFORMER (100)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.272 [TaskFinalizer-9] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (50); work-dir=/data/bugra/digital_trials/work/45/5aca403dc4da2c3d24fe10177924c8 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (50)` terminated with an error exit status (130) +Mar-18 21:20:29.272 [TaskFinalizer-9] INFO nextflow.processor.TaskProcessor - [45/5aca40] NOTE: Process `HUMAN_TRANSFORMER (50)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.273 [TaskFinalizer-8] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (21); work-dir=/data/bugra/digital_trials/work/b3/18f2d8de1dee7ebd1e29c36766bb38 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (21)` terminated with an error exit status (130) +Mar-18 21:20:29.273 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=0; failedCount=24; ignoredCount=0; cachedCount=0; pendingCount=524; submittedCount=0; runningCount=13; retriesCount=24; abortedCount=13; succeedDuration=0ms; failedDuration=3m 33s; cachedDuration=0ms;loadCpus=13; loadMemory=65 GB; peakRunning=50; peakCpus=50; peakMemory=250 GB; ] +Mar-18 21:20:29.274 [TaskFinalizer-8] INFO nextflow.processor.TaskProcessor - [b3/18f2d8] NOTE: Process `HUMAN_TRANSFORMER (21)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.274 [TaskFinalizer-1] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (28); work-dir=/data/bugra/digital_trials/work/1e/136b163a14f2e329c0a63def34303a + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (28)` terminated with an error exit status (130) +Mar-18 21:20:29.275 [TaskFinalizer-1] INFO nextflow.processor.TaskProcessor - [1e/136b16] NOTE: Process `HUMAN_TRANSFORMER (28)` terminated with an error exit status (130) -- Execution is retried (1) +Mar-18 21:20:29.275 [TaskFinalizer-7] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (47); work-dir=/data/bugra/digital_trials/work/c3/96d9ca9db58d7b185d3a1593398cf5 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (47)` terminated with an error exit status (130) +Mar-18 21:20:29.277 [TaskFinalizer-7] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.293 [TaskFinalizer-5] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (61); work-dir=/data/bugra/digital_trials/work/43/60db45ede0bd4446d23695ada0d61e + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (61)` terminated with an error exit status (130) +Mar-18 21:20:29.294 [TaskFinalizer-5] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.295 [TaskFinalizer-3] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (49); work-dir=/data/bugra/digital_trials/work/22/fd1af06b9e3d47711a38d32e512b6a + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (49)` terminated with an error exit status (130) +Mar-18 21:20:29.295 [TaskFinalizer-3] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.296 [TaskFinalizer-6] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (42); work-dir=/data/bugra/digital_trials/work/03/bc533b3f0412ff4170434e49742e08 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (42)` terminated with an error exit status (130) +Mar-18 21:20:29.296 [TaskFinalizer-6] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.297 [TaskFinalizer-2] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (60); work-dir=/data/bugra/digital_trials/work/74/3c1d464c97545d0573e617639c1996 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (60)` terminated with an error exit status (130) +Mar-18 21:20:29.297 [TaskFinalizer-2] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.298 [TaskFinalizer-10] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (31); work-dir=/data/bugra/digital_trials/work/7a/791a5fc3d48e3532dd905a9d6ffe60 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (31)` terminated with an error exit status (130) +Mar-18 21:20:29.298 [TaskFinalizer-10] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.299 [TaskFinalizer-3] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (52); work-dir=/data/bugra/digital_trials/work/58/36391d12e7f01e89c4c4b007a48fdf + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (52)` terminated with an error exit status (130) +Mar-18 21:20:29.299 [TaskFinalizer-3] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.300 [TaskFinalizer-5] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (79); work-dir=/data/bugra/digital_trials/work/97/d91d948e50cf63f8b4ff02716cae35 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (79)` terminated with an error exit status (130) +Mar-18 21:20:29.301 [TaskFinalizer-5] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.301 [TaskFinalizer-7] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (4); work-dir=/data/bugra/digital_trials/work/b0/358e0857d3fc84723c4c6f68449def + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (4)` terminated with an error exit status (130) +Mar-18 21:20:29.301 [TaskFinalizer-7] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.302 [TaskFinalizer-1] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (15); work-dir=/data/bugra/digital_trials/work/7d/6149e5bb637d5906e412e869847053 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (15)` terminated with an error exit status (130) +Mar-18 21:20:29.302 [TaskFinalizer-1] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.303 [TaskFinalizer-8] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (62); work-dir=/data/bugra/digital_trials/work/d6/469d3a52fd3e47c31e3f9629531225 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (62)` terminated with an error exit status (130) +Mar-18 21:20:29.304 [TaskFinalizer-8] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.304 [TaskFinalizer-9] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (69); work-dir=/data/bugra/digital_trials/work/2d/813f736812d2fe55b217ee6f3a6080 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (69)` terminated with an error exit status (130) +Mar-18 21:20:29.305 [TaskFinalizer-9] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.305 [TaskFinalizer-4] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (26); work-dir=/data/bugra/digital_trials/work/eb/bd17199be64672ed1cd2a9c2de98fc + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (26)` terminated with an error exit status (130) +Mar-18 21:20:29.306 [TaskFinalizer-4] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.306 [TaskFinalizer-7] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (30); work-dir=/data/bugra/digital_trials/work/72/7527282097aa9de800c0e570242280 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (30)` terminated with an error exit status (130) +Mar-18 21:20:29.307 [TaskFinalizer-7] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.307 [TaskFinalizer-3] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (44); work-dir=/data/bugra/digital_trials/work/23/9ecd04cb0afa1a6189c69d0c0fe507 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (44)` terminated with an error exit status (130) +Mar-18 21:20:29.308 [TaskFinalizer-3] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.308 [TaskFinalizer-10] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (123); work-dir=/data/bugra/digital_trials/work/34/bc34dfc5b77bd45bf850bbefd1ade3 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (123)` terminated with an error exit status (130) +Mar-18 21:20:29.309 [TaskFinalizer-10] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.309 [TaskFinalizer-2] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (43); work-dir=/data/bugra/digital_trials/work/44/42e04d6d950d65bdc5c53a29f24aff + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (43)` terminated with an error exit status (130) +Mar-18 21:20:29.310 [TaskFinalizer-2] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.310 [TaskFinalizer-6] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=HUMAN_TRANSFORMER (66); work-dir=/data/bugra/digital_trials/work/16/6dd6cfac099d7134782d3b80712847 + error [nextflow.exception.ProcessFailedException]: Process `HUMAN_TRANSFORMER (66)` terminated with an error exit status (130) +Mar-18 21:20:29.311 [TaskFinalizer-6] ERROR nextflow.processor.TaskProcessor - Execution aborted due to an unexpected error +java.lang.NullPointerException: Cannot invoke method submit() on null object + at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:113) + at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.checkErrorStrategy(TaskProcessor.groovy:1163) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.resumeOrDie(TaskProcessor.groovy:1077) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.processor.TaskProcessor.finalizeTask(TaskProcessor.groovy:2402) + at nextflow.processor.TaskPollingMonitor.finalizeTask(TaskPollingMonitor.groovy:696) + at nextflow.processor.TaskPollingMonitor.safeFinalizeTask(TaskPollingMonitor.groovy:686) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1333) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1088) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:645) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:628) + at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:82) + at nextflow.processor.TaskPollingMonitor$_checkTaskStatus_lambda8.doCall(TaskPollingMonitor.groovy:676) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base/java.lang.Thread.run(Thread.java:1583) +Mar-18 21:20:29.452 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Mar-18 21:20:29.612 [main] INFO org.pf4j.AbstractPluginManager - Stop plugin 'nf-tower@1.11.3' +Mar-18 21:20:29.612 [main] DEBUG nextflow.plugin.BasePlugin - Plugin stopped nf-tower +Mar-18 21:20:29.614 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/.nextflow.log.3 b/.nextflow.log.3 new file mode 100644 index 0000000..2970d16 --- /dev/null +++ b/.nextflow.log.3 @@ -0,0 +1,117 @@ +Mar-09 15:03:54.815 [main] DEBUG nextflow.cli.Launcher - $> nextflow run test.nf -params-file /data/dreamdock-data/caline-run6/digtrial/caline-run6.json +Mar-09 15:03:55.224 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 25.04.3 +Mar-09 15:03:55.255 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/home/omic/.nextflow/plugins; core-plugins: nf-amazon@2.15.0,nf-azure@1.16.0,nf-cloudcache@0.4.3,nf-codecommit@0.2.3,nf-console@1.2.1,nf-google@1.21.0,nf-k8s@1.0.0,nf-tower@1.11.3,nf-wave@1.12.1 +Mar-09 15:03:55.294 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Mar-09 15:03:55.295 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Mar-09 15:03:55.299 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Mar-09 15:03:55.314 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Mar-09 15:03:55.342 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugra/digital_trials/nextflow.config +Mar-09 15:03:55.346 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugra/digital_trials/nextflow.config +Mar-09 15:03:55.386 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /home/omic/.nextflow/secrets/store.json +Mar-09 15:03:55.391 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@6ef81f31] - activable => nextflow.secret.LocalSecretsProvider@6ef81f31 +Mar-09 15:03:55.422 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `standard` +Mar-09 15:03:56.211 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 from script declaration +Mar-09 15:03:56.234 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [dreamy_panini] DSL2 - revision: 0e14afbd94 +Mar-09 15:03:56.236 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Mar-09 15:03:56.238 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[nf-tower@1.11.3] +Mar-09 15:03:56.240 [main] DEBUG nextflow.plugin.PluginUpdater - Installing plugin nf-tower version: 1.11.3 +Mar-09 15:03:56.252 [main] INFO org.pf4j.AbstractPluginManager - Plugin 'nf-tower@1.11.3' resolved +Mar-09 15:03:56.252 [main] INFO org.pf4j.AbstractPluginManager - Start plugin 'nf-tower@1.11.3' +Mar-09 15:03:56.269 [main] DEBUG nextflow.plugin.BasePlugin - Plugin started nf-tower@1.11.3 +Mar-09 15:03:56.340 [main] DEBUG nextflow.Session - Session UUID: c52cdca5-7bcc-4d96-8a19-824595cbfc30 +Mar-09 15:03:56.341 [main] DEBUG nextflow.Session - Run name: dreamy_panini +Mar-09 15:03:56.341 [main] DEBUG nextflow.Session - Executor pool size: 80 +Mar-09 15:03:56.354 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Mar-09 15:03:56.362 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Mar-09 15:03:56.395 [main] DEBUG nextflow.cli.CmdRun - + Version: 25.04.3 build 5949 + Created: 02-06-2025 20:56 UTC + System: Linux 6.11.0-26-generic + Runtime: Groovy 4.0.26 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 2939340@k8s-node23 [127.0.1.1] + CPUs: 80 - Mem: 251.6 GB (33.6 GB) - Swap: 0 (0) +Mar-09 15:03:56.430 [main] DEBUG nextflow.Session - Work-dir: /data/bugra/digital_trials/work [btrfs] +Mar-09 15:03:56.430 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugra/digital_trials/bin +Mar-09 15:03:56.457 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Mar-09 15:03:56.477 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Mar-09 15:03:56.483 [main] DEBUG nextflow.Session - Observer factory: TowerFactory +Mar-09 15:03:56.486 [main] DEBUG nextflow.Session - Observer factory (v2): LinObserverFactory +Mar-09 15:03:56.520 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Mar-09 15:03:56.533 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 81; maxThreads: 1000 +Mar-09 15:03:56.691 [main] DEBUG nextflow.Session - Session start +Mar-09 15:03:57.165 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Mar-09 15:03:58.082 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-09 15:03:58.083 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-09 15:03:58.093 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Mar-09 15:03:58.108 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=80; memory=251.6 GB; capacity=80; pollInterval=100ms; dumpInterval=5m +Mar-09 15:03:58.111 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Mar-09 15:03:58.146 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'HUMAN_TRANSFORMER': maxForks=0; fair=false; array=0 +Mar-09 15:03:58.247 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-09 15:03:58.247 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-09 15:03:58.249 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'GET_FINAL_METABOLITES_STATIC': maxForks=0; fair=false; array=0 +Mar-09 15:03:58.264 [main] DEBUG nextflow.script.ProcessConfig - Config settings `withLabel:gpu_process` matches labels `gpu_process` for process with name PREPROCESS_PROTEIN +Mar-09 15:03:58.269 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-09 15:03:58.270 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-09 15:03:58.271 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'PREPROCESS_PROTEIN': maxForks=0; fair=false; array=0 +Mar-09 15:03:58.337 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-09 15:03:58.337 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-09 15:03:58.338 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'CONPLEX_ALL': maxForks=0; fair=false; array=0 +Mar-09 15:03:58.371 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-09 15:03:58.371 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-09 15:03:58.372 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'NETWORK_ENRICHMENT': maxForks=0; fair=false; array=0 +Mar-09 15:03:58.380 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-09 15:03:58.380 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-09 15:03:58.381 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'TISSUE_DISTRIBUTION': maxForks=0; fair=false; array=0 +Mar-09 15:03:58.393 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Mar-09 15:03:58.394 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Mar-09 15:03:58.395 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'BIO_METRICS': maxForks=0; fair=false; array=0 +Mar-09 15:03:58.398 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: HUMAN_TRANSFORMER, METABOLITES_BY_MASS, GET_FINAL_METABOLITES_STATIC, CONPLEX_ALL, NETWORK_ENRICHMENT, GET_FINAL_METABOLITES, CONPLEX, BIO_METRICS, SUPER_TRANSFORMER, TISSUE_DISTRIBUTION, MERGE_DRUG, MERGE_INTERACTIONS, PREPROCESS_PROTEIN, ORDERED_SEQUENCE +Mar-09 15:03:58.401 [main] DEBUG nextflow.Session - Igniting dataflow network (11) +Mar-09 15:03:58.408 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > HUMAN_TRANSFORMER +Mar-09 15:03:58.410 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > GET_FINAL_METABOLITES_STATIC +Mar-09 15:03:58.411 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > PREPROCESS_PROTEIN +Mar-09 15:03:58.412 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > CONPLEX_ALL +Mar-09 15:03:58.412 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > NETWORK_ENRICHMENT +Mar-09 15:03:58.412 [PathVisitor-3] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /mnt/dreamdock-data/digital_trials/input/blank/; pattern: *.fasta; options: [:] +Mar-09 15:03:58.412 [PathVisitor-1] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /data/dreamdock-data/caline-run6/digtrial/input/; pattern: *.csv; options: [:] +Mar-09 15:03:58.413 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > TISSUE_DISTRIBUTION +Mar-09 15:03:58.414 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > BIO_METRICS +Mar-09 15:03:58.415 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_e39e54e7aa543fd0: /data/bugra/digital_trials/main_biotransformer.nf + Script_d345b7a65a8f3255: /data/bugra/digital_trials/main_conplex.nf + Script_ec2c89c0dbf76553: /data/bugra/digital_trials/test.nf + Script_ec01f2a38db15aa5: /data/bugra/digital_trials/main_tissue.nf +Mar-09 15:03:58.415 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Mar-09 15:03:58.415 [main] DEBUG nextflow.Session - Session await +Mar-09 15:03:58.625 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-09 15:03:58.629 [Task submitter] INFO nextflow.Session - [9f/8b91ca] Submitted process > HUMAN_TRANSFORMER (1) +Mar-09 15:04:06.589 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: HUMAN_TRANSFORMER (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/9f/8b91caff0c52ded09b143e6e91cbc0] +Mar-09 15:04:06.591 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Mar-09 15:04:06.623 [TaskFinalizer-1] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'PublishDir' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Mar-09 15:04:06.635 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-09 15:04:06.636 [Task submitter] INFO nextflow.Session - [08/710d4c] Submitted process > GET_FINAL_METABOLITES_STATIC (1) +Mar-09 15:04:11.034 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 2; name: GET_FINAL_METABOLITES_STATIC (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/08/710d4cc4e2be03a44b2df2383e7d9b] +Mar-09 15:04:11.122 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-09 15:04:11.125 [Task submitter] INFO nextflow.Session - [53/ea8e99] Submitted process > CONPLEX_ALL (1) +Mar-09 15:06:33.396 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 3; name: CONPLEX_ALL (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/53/ea8e99cffaf7ca1272d091bfac2929] +Mar-09 15:06:33.433 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-09 15:06:33.434 [Task submitter] INFO nextflow.Session - [fb/95c05c] Submitted process > TISSUE_DISTRIBUTION (1) +Mar-09 15:06:33.442 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-09 15:06:33.442 [Task submitter] INFO nextflow.Session - [9a/9129e3] Submitted process > BIO_METRICS (1) +Mar-09 15:06:33.448 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Mar-09 15:06:33.449 [Task submitter] INFO nextflow.Session - [16/77a5f6] Submitted process > NETWORK_ENRICHMENT (1) +Mar-09 15:06:43.140 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 6; name: NETWORK_ENRICHMENT (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/16/77a5f693ac1bd2bc124ddc7ec802e3] +Mar-09 15:06:44.636 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 5; name: TISSUE_DISTRIBUTION (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/fb/95c05c31fa620d6901fbfc0de32259] +Mar-09 15:06:56.374 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 4; name: BIO_METRICS (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/9a/9129e302133c74df23101091230822] +Mar-09 15:06:56.382 [main] DEBUG nextflow.Session - Session await > all processes finished +Mar-09 15:06:56.476 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Mar-09 15:06:56.477 [main] DEBUG nextflow.Session - Session await > all barriers passed +Mar-09 15:06:56.486 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'TaskFinalizer' shutdown completed (hard=false) +Mar-09 15:06:56.487 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'PublishDir' shutdown completed (hard=false) +Mar-09 15:06:56.501 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=6; failedCount=0; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=0; abortedCount=0; succeedDuration=3m 18s; failedDuration=0ms; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=3; peakCpus=3; peakMemory=11 GB; ] +Mar-09 15:06:56.581 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Mar-09 15:06:56.671 [main] INFO org.pf4j.AbstractPluginManager - Stop plugin 'nf-tower@1.11.3' +Mar-09 15:06:56.671 [main] DEBUG nextflow.plugin.BasePlugin - Plugin stopped nf-tower +Mar-09 15:06:56.673 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'FileTransfer' shutdown completed (hard=false) +Mar-09 15:06:56.674 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/.nextflow.log.4 b/.nextflow.log.4 new file mode 100644 index 0000000..e1a1446 --- /dev/null +++ b/.nextflow.log.4 @@ -0,0 +1,117 @@ +Feb-27 17:43:13.583 [main] DEBUG nextflow.cli.Launcher - $> nextflow run test.nf -params-file /data/dreamdock-data/caline-run6/digtrial/caline-run6.json +Feb-27 17:43:13.956 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 25.04.3 +Feb-27 17:43:13.997 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/home/omic/.nextflow/plugins; core-plugins: nf-amazon@2.15.0,nf-azure@1.16.0,nf-cloudcache@0.4.3,nf-codecommit@0.2.3,nf-console@1.2.1,nf-google@1.21.0,nf-k8s@1.0.0,nf-tower@1.11.3,nf-wave@1.12.1 +Feb-27 17:43:14.037 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Feb-27 17:43:14.038 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Feb-27 17:43:14.042 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Feb-27 17:43:14.057 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Feb-27 17:43:14.085 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugra/digital_trials/nextflow.config +Feb-27 17:43:14.088 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugra/digital_trials/nextflow.config +Feb-27 17:43:14.130 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /home/omic/.nextflow/secrets/store.json +Feb-27 17:43:14.136 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@6ef81f31] - activable => nextflow.secret.LocalSecretsProvider@6ef81f31 +Feb-27 17:43:14.166 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `standard` +Feb-27 17:43:14.913 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 from script declaration +Feb-27 17:43:14.935 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [wise_snyder] DSL2 - revision: 5cb3581ad6 +Feb-27 17:43:14.938 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Feb-27 17:43:14.939 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[nf-tower@1.11.3] +Feb-27 17:43:14.942 [main] DEBUG nextflow.plugin.PluginUpdater - Installing plugin nf-tower version: 1.11.3 +Feb-27 17:43:14.955 [main] INFO org.pf4j.AbstractPluginManager - Plugin 'nf-tower@1.11.3' resolved +Feb-27 17:43:14.955 [main] INFO org.pf4j.AbstractPluginManager - Start plugin 'nf-tower@1.11.3' +Feb-27 17:43:14.972 [main] DEBUG nextflow.plugin.BasePlugin - Plugin started nf-tower@1.11.3 +Feb-27 17:43:15.045 [main] DEBUG nextflow.Session - Session UUID: ab7a7317-9f8e-49f9-8ba6-8349b24a36ef +Feb-27 17:43:15.046 [main] DEBUG nextflow.Session - Run name: wise_snyder +Feb-27 17:43:15.047 [main] DEBUG nextflow.Session - Executor pool size: 80 +Feb-27 17:43:15.059 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Feb-27 17:43:15.067 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-27 17:43:15.104 [main] DEBUG nextflow.cli.CmdRun - + Version: 25.04.3 build 5949 + Created: 02-06-2025 20:56 UTC + System: Linux 6.11.0-26-generic + Runtime: Groovy 4.0.26 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 3937567@k8s-node23 [127.0.1.1] + CPUs: 80 - Mem: 251.6 GB (5.3 GB) - Swap: 0 (0) +Feb-27 17:43:15.139 [main] DEBUG nextflow.Session - Work-dir: /data/bugra/digital_trials/work [btrfs] +Feb-27 17:43:15.140 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugra/digital_trials/bin +Feb-27 17:43:15.158 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Feb-27 17:43:15.176 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Feb-27 17:43:15.182 [main] DEBUG nextflow.Session - Observer factory: TowerFactory +Feb-27 17:43:15.185 [main] DEBUG nextflow.Session - Observer factory (v2): LinObserverFactory +Feb-27 17:43:15.217 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Feb-27 17:43:15.229 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 81; maxThreads: 1000 +Feb-27 17:43:15.409 [main] DEBUG nextflow.Session - Session start +Feb-27 17:43:15.879 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Feb-27 17:43:16.759 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-27 17:43:16.760 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-27 17:43:16.767 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Feb-27 17:43:16.777 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=80; memory=251.6 GB; capacity=80; pollInterval=100ms; dumpInterval=5m +Feb-27 17:43:16.780 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Feb-27 17:43:16.815 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'HUMAN_TRANSFORMER': maxForks=0; fair=false; array=0 +Feb-27 17:43:16.900 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-27 17:43:16.900 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-27 17:43:16.902 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'GET_FINAL_METABOLITES_STATIC': maxForks=0; fair=false; array=0 +Feb-27 17:43:16.915 [main] DEBUG nextflow.script.ProcessConfig - Config settings `withLabel:gpu_process` matches labels `gpu_process` for process with name PREPROCESS_PROTEIN +Feb-27 17:43:16.920 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-27 17:43:16.920 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-27 17:43:16.922 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'PREPROCESS_PROTEIN': maxForks=0; fair=false; array=0 +Feb-27 17:43:16.984 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-27 17:43:16.984 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-27 17:43:16.985 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'CONPLEX_ALL': maxForks=0; fair=false; array=0 +Feb-27 17:43:17.016 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-27 17:43:17.016 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-27 17:43:17.017 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'NETWORK_ENRICHMENT': maxForks=0; fair=false; array=0 +Feb-27 17:43:17.025 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-27 17:43:17.025 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-27 17:43:17.026 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'TISSUE_DISTRIBUTION': maxForks=0; fair=false; array=0 +Feb-27 17:43:17.039 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-27 17:43:17.039 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-27 17:43:17.040 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'BIO_METRICS': maxForks=0; fair=false; array=0 +Feb-27 17:43:17.043 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: HUMAN_TRANSFORMER, METABOLITES_BY_MASS, GET_FINAL_METABOLITES_STATIC, CONPLEX_ALL, NETWORK_ENRICHMENT, GET_FINAL_METABOLITES, CONPLEX, BIO_METRICS, SUPER_TRANSFORMER, TISSUE_DISTRIBUTION, MERGE_DRUG, MERGE_INTERACTIONS, PREPROCESS_PROTEIN, ORDERED_SEQUENCE +Feb-27 17:43:17.046 [main] DEBUG nextflow.Session - Igniting dataflow network (11) +Feb-27 17:43:17.053 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > HUMAN_TRANSFORMER +Feb-27 17:43:17.069 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > GET_FINAL_METABOLITES_STATIC +Feb-27 17:43:17.071 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > PREPROCESS_PROTEIN +Feb-27 17:43:17.071 [PathVisitor-1] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /data/dreamdock-data/caline-run6/digtrial/input/; pattern: *.csv; options: [:] +Feb-27 17:43:17.071 [PathVisitor-3] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /mnt/dreamdock-data/digital_trials/input/blank/; pattern: *.fasta; options: [:] +Feb-27 17:43:17.071 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > CONPLEX_ALL +Feb-27 17:43:17.072 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > NETWORK_ENRICHMENT +Feb-27 17:43:17.073 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > TISSUE_DISTRIBUTION +Feb-27 17:43:17.073 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > BIO_METRICS +Feb-27 17:43:17.074 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_c432c676a3e7c0cb: /data/bugra/digital_trials/test.nf + Script_e39e54e7aa543fd0: /data/bugra/digital_trials/main_biotransformer.nf + Script_d345b7a65a8f3255: /data/bugra/digital_trials/main_conplex.nf + Script_ec01f2a38db15aa5: /data/bugra/digital_trials/main_tissue.nf +Feb-27 17:43:17.075 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Feb-27 17:43:17.075 [main] DEBUG nextflow.Session - Session await +Feb-27 17:43:17.299 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-27 17:43:17.303 [Task submitter] INFO nextflow.Session - [b8/48fb21] Submitted process > HUMAN_TRANSFORMER (1) +Feb-27 17:43:24.518 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: HUMAN_TRANSFORMER (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/b8/48fb213f9b113a32b1649ada113509] +Feb-27 17:43:24.519 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-27 17:43:24.547 [TaskFinalizer-1] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'PublishDir' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-27 17:43:24.559 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-27 17:43:24.560 [Task submitter] INFO nextflow.Session - [f5/a871d4] Submitted process > GET_FINAL_METABOLITES_STATIC (1) +Feb-27 17:43:28.371 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 2; name: GET_FINAL_METABOLITES_STATIC (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/f5/a871d46063710b8620594ede8bc8f2] +Feb-27 17:43:28.423 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-27 17:43:28.424 [Task submitter] INFO nextflow.Session - [54/3e3c99] Submitted process > CONPLEX_ALL (1) +Feb-27 17:45:36.007 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 3; name: CONPLEX_ALL (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/54/3e3c99cd7077434aa2732f31dd7b5c] +Feb-27 17:45:36.075 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-27 17:45:36.075 [Task submitter] INFO nextflow.Session - [24/f1f52e] Submitted process > TISSUE_DISTRIBUTION (1) +Feb-27 17:45:36.081 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-27 17:45:36.082 [Task submitter] INFO nextflow.Session - [aa/de8363] Submitted process > BIO_METRICS (1) +Feb-27 17:45:36.087 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-27 17:45:36.088 [Task submitter] INFO nextflow.Session - [f3/73824b] Submitted process > NETWORK_ENRICHMENT (1) +Feb-27 17:45:44.940 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 6; name: NETWORK_ENRICHMENT (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/f3/73824bf939c5be1858680c6af0e5e6] +Feb-27 17:45:47.754 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 4; name: TISSUE_DISTRIBUTION (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/24/f1f52e39bf1496db70950a7c5a04c8] +Feb-27 17:45:58.442 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 5; name: BIO_METRICS (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/aa/de8363f3884d595a7a7df0291508ef] +Feb-27 17:45:58.448 [main] DEBUG nextflow.Session - Session await > all processes finished +Feb-27 17:45:58.542 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Feb-27 17:45:58.542 [main] DEBUG nextflow.Session - Session await > all barriers passed +Feb-27 17:45:58.548 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'TaskFinalizer' shutdown completed (hard=false) +Feb-27 17:45:58.549 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'PublishDir' shutdown completed (hard=false) +Feb-27 17:45:58.557 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=6; failedCount=0; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=0; abortedCount=0; succeedDuration=3m 1s; failedDuration=0ms; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=3; peakCpus=3; peakMemory=11 GB; ] +Feb-27 17:45:58.693 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Feb-27 17:45:58.772 [main] INFO org.pf4j.AbstractPluginManager - Stop plugin 'nf-tower@1.11.3' +Feb-27 17:45:58.772 [main] DEBUG nextflow.plugin.BasePlugin - Plugin stopped nf-tower +Feb-27 17:45:58.774 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'FileTransfer' shutdown completed (hard=false) +Feb-27 17:45:58.775 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/.nextflow.log.5 b/.nextflow.log.5 new file mode 100644 index 0000000..0b41152 --- /dev/null +++ b/.nextflow.log.5 @@ -0,0 +1,122 @@ +Feb-27 17:41:44.642 [main] DEBUG nextflow.cli.Launcher - $> nextflow run test.nf -params-file /data/dreamdock-data/caline-run6/digtrial/caline-run6.json +Feb-27 17:41:45.022 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 25.04.3 +Feb-27 17:41:45.053 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/home/omic/.nextflow/plugins; core-plugins: nf-amazon@2.15.0,nf-azure@1.16.0,nf-cloudcache@0.4.3,nf-codecommit@0.2.3,nf-console@1.2.1,nf-google@1.21.0,nf-k8s@1.0.0,nf-tower@1.11.3,nf-wave@1.12.1 +Feb-27 17:41:45.091 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Feb-27 17:41:45.092 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Feb-27 17:41:45.096 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Feb-27 17:41:45.109 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Feb-27 17:41:45.142 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugra/digital_trials/nextflow.config +Feb-27 17:41:45.146 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugra/digital_trials/nextflow.config +Feb-27 17:41:45.190 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /home/omic/.nextflow/secrets/store.json +Feb-27 17:41:45.196 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@6ef81f31] - activable => nextflow.secret.LocalSecretsProvider@6ef81f31 +Feb-27 17:41:45.226 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `standard` +Feb-27 17:41:45.999 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 from script declaration +Feb-27 17:41:46.021 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [chaotic_leakey] DSL2 - revision: 5cb3581ad6 +Feb-27 17:41:46.024 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Feb-27 17:41:46.025 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[nf-tower@1.11.3] +Feb-27 17:41:46.028 [main] DEBUG nextflow.plugin.PluginUpdater - Installing plugin nf-tower version: 1.11.3 +Feb-27 17:41:46.042 [main] INFO org.pf4j.AbstractPluginManager - Plugin 'nf-tower@1.11.3' resolved +Feb-27 17:41:46.043 [main] INFO org.pf4j.AbstractPluginManager - Start plugin 'nf-tower@1.11.3' +Feb-27 17:41:46.062 [main] DEBUG nextflow.plugin.BasePlugin - Plugin started nf-tower@1.11.3 +Feb-27 17:41:46.139 [main] DEBUG nextflow.Session - Session UUID: 6d6a967c-f1c2-433b-8c30-4f047e71a910 +Feb-27 17:41:46.140 [main] DEBUG nextflow.Session - Run name: chaotic_leakey +Feb-27 17:41:46.140 [main] DEBUG nextflow.Session - Executor pool size: 80 +Feb-27 17:41:46.153 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Feb-27 17:41:46.161 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-27 17:41:46.198 [main] DEBUG nextflow.cli.CmdRun - + Version: 25.04.3 build 5949 + Created: 02-06-2025 20:56 UTC + System: Linux 6.11.0-26-generic + Runtime: Groovy 4.0.26 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 3934402@k8s-node23 [127.0.1.1] + CPUs: 80 - Mem: 251.6 GB (5 GB) - Swap: 0 (0) +Feb-27 17:41:46.237 [main] DEBUG nextflow.Session - Work-dir: /data/bugra/digital_trials/work [btrfs] +Feb-27 17:41:46.238 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugra/digital_trials/bin +Feb-27 17:41:46.254 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Feb-27 17:41:46.273 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Feb-27 17:41:46.279 [main] DEBUG nextflow.Session - Observer factory: TowerFactory +Feb-27 17:41:46.281 [main] DEBUG nextflow.Session - Observer factory (v2): LinObserverFactory +Feb-27 17:41:46.315 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Feb-27 17:41:46.328 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 81; maxThreads: 1000 +Feb-27 17:41:46.574 [main] DEBUG nextflow.Session - Session start +Feb-27 17:41:47.067 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Feb-27 17:41:47.963 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-27 17:41:47.964 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-27 17:41:47.971 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Feb-27 17:41:47.981 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=80; memory=251.6 GB; capacity=80; pollInterval=100ms; dumpInterval=5m +Feb-27 17:41:47.984 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Feb-27 17:41:48.018 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'HUMAN_TRANSFORMER': maxForks=0; fair=false; array=0 +Feb-27 17:41:48.112 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-27 17:41:48.112 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-27 17:41:48.114 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'GET_FINAL_METABOLITES_STATIC': maxForks=0; fair=false; array=0 +Feb-27 17:41:48.127 [main] DEBUG nextflow.script.ProcessConfig - Config settings `withLabel:gpu_process` matches labels `gpu_process` for process with name PREPROCESS_PROTEIN +Feb-27 17:41:48.132 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-27 17:41:48.132 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-27 17:41:48.134 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'PREPROCESS_PROTEIN': maxForks=0; fair=false; array=0 +Feb-27 17:41:48.193 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-27 17:41:48.193 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-27 17:41:48.194 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'CONPLEX_ALL': maxForks=0; fair=false; array=0 +Feb-27 17:41:48.226 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-27 17:41:48.226 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-27 17:41:48.227 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'NETWORK_ENRICHMENT': maxForks=0; fair=false; array=0 +Feb-27 17:41:48.235 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-27 17:41:48.235 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-27 17:41:48.236 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'TISSUE_DISTRIBUTION': maxForks=0; fair=false; array=0 +Feb-27 17:41:48.247 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-27 17:41:48.248 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-27 17:41:48.248 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'BIO_METRICS': maxForks=0; fair=false; array=0 +Feb-27 17:41:48.251 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: HUMAN_TRANSFORMER, METABOLITES_BY_MASS, GET_FINAL_METABOLITES_STATIC, CONPLEX_ALL, NETWORK_ENRICHMENT, GET_FINAL_METABOLITES, CONPLEX, BIO_METRICS, SUPER_TRANSFORMER, TISSUE_DISTRIBUTION, MERGE_DRUG, MERGE_INTERACTIONS, PREPROCESS_PROTEIN, ORDERED_SEQUENCE +Feb-27 17:41:48.254 [main] DEBUG nextflow.Session - Igniting dataflow network (11) +Feb-27 17:41:48.261 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > HUMAN_TRANSFORMER +Feb-27 17:41:48.277 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > GET_FINAL_METABOLITES_STATIC +Feb-27 17:41:48.278 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > PREPROCESS_PROTEIN +Feb-27 17:41:48.279 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > CONPLEX_ALL +Feb-27 17:41:48.279 [PathVisitor-3] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /mnt/dreamdock-data/digital_trials/input/blank/; pattern: *.fasta; options: [:] +Feb-27 17:41:48.279 [PathVisitor-1] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /data/dreamdock-data/caline-run6/digtrial/input/; pattern: *.csv; options: [:] +Feb-27 17:41:48.280 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > NETWORK_ENRICHMENT +Feb-27 17:41:48.280 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > TISSUE_DISTRIBUTION +Feb-27 17:41:48.281 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > BIO_METRICS +Feb-27 17:41:48.282 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_c432c676a3e7c0cb: /data/bugra/digital_trials/test.nf + Script_e39e54e7aa543fd0: /data/bugra/digital_trials/main_biotransformer.nf + Script_d345b7a65a8f3255: /data/bugra/digital_trials/main_conplex.nf + Script_ec01f2a38db15aa5: /data/bugra/digital_trials/main_tissue.nf +Feb-27 17:41:48.282 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Feb-27 17:41:48.282 [main] DEBUG nextflow.Session - Session await +Feb-27 17:41:48.510 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-27 17:41:48.514 [Task submitter] INFO nextflow.Session - [9c/1a79a1] Submitted process > HUMAN_TRANSFORMER (1) +Feb-27 17:41:56.073 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: HUMAN_TRANSFORMER (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/9c/1a79a1afef130a28212413d1c010fd] +Feb-27 17:41:56.075 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-27 17:41:56.102 [TaskFinalizer-1] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'PublishDir' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-27 17:41:56.117 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-27 17:41:56.118 [Task submitter] INFO nextflow.Session - [3b/c06172] Submitted process > GET_FINAL_METABOLITES_STATIC (1) +Feb-27 17:42:01.333 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 2; name: GET_FINAL_METABOLITES_STATIC (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/3b/c061720cd41597e8b90414cc4a66b0] +Feb-27 17:42:01.387 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-27 17:42:01.388 [Task submitter] INFO nextflow.Session - [18/8af203] Submitted process > CONPLEX_ALL (1) +Feb-27 17:42:14.026 [SIGINT handler] DEBUG nextflow.Session - Session aborted -- Cause: SIGINT +Feb-27 17:42:14.046 [SIGINT handler] DEBUG nextflow.Session - The following nodes are still active: +[process] NETWORK_ENRICHMENT + status=ACTIVE + port 0: (queue) OPEN ; channel: interactions + port 1: (cntrl) - ; channel: $ + +[process] TISSUE_DISTRIBUTION + status=ACTIVE + port 0: (queue) OPEN ; channel: interaction + port 1: (cntrl) - ; channel: $ + +[process] BIO_METRICS + status=ACTIVE + port 0: (queue) OPEN ; channel: - + port 1: (cntrl) - ; channel: $ + +Feb-27 17:42:14.050 [main] DEBUG nextflow.Session - Session await > all processes finished +Feb-27 17:42:14.051 [main] DEBUG nextflow.Session - Session await > all barriers passed +Feb-27 17:42:14.051 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Feb-27 17:42:14.062 [main] WARN n.processor.TaskPollingMonitor - Killing running tasks (1) +Feb-27 17:42:14.084 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=2; failedCount=0; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=0; abortedCount=1; succeedDuration=12.6s; failedDuration=0ms; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=1; peakCpus=1; peakMemory=5 GB; ] +Feb-27 17:42:14.099 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Feb-27 17:42:14.172 [main] INFO org.pf4j.AbstractPluginManager - Stop plugin 'nf-tower@1.11.3' +Feb-27 17:42:14.173 [main] DEBUG nextflow.plugin.BasePlugin - Plugin stopped nf-tower +Feb-27 17:42:14.175 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/.nextflow.log.6 b/.nextflow.log.6 new file mode 100644 index 0000000..3a9475a --- /dev/null +++ b/.nextflow.log.6 @@ -0,0 +1,203 @@ +Feb-21 08:26:11.901 [main] DEBUG nextflow.cli.Launcher - $> nextflow run test.nf -params-file /data/dreamdock-data/gpr55-caline/digtrial/gpr55-2.json +Feb-21 08:26:12.274 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 25.04.3 +Feb-21 08:26:12.306 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/home/omic/.nextflow/plugins; core-plugins: nf-amazon@2.15.0,nf-azure@1.16.0,nf-cloudcache@0.4.3,nf-codecommit@0.2.3,nf-console@1.2.1,nf-google@1.21.0,nf-k8s@1.0.0,nf-tower@1.11.3,nf-wave@1.12.1 +Feb-21 08:26:12.344 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Feb-21 08:26:12.345 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Feb-21 08:26:12.349 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Feb-21 08:26:12.363 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Feb-21 08:26:12.391 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugra/digital_trials/nextflow.config +Feb-21 08:26:12.394 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugra/digital_trials/nextflow.config +Feb-21 08:26:12.433 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /home/omic/.nextflow/secrets/store.json +Feb-21 08:26:12.439 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@6ef81f31] - activable => nextflow.secret.LocalSecretsProvider@6ef81f31 +Feb-21 08:26:12.470 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `standard` +Feb-21 08:26:13.224 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 from script declaration +Feb-21 08:26:13.248 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [happy_einstein] DSL2 - revision: 5cb3581ad6 +Feb-21 08:26:13.250 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Feb-21 08:26:13.252 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[nf-tower@1.11.3] +Feb-21 08:26:13.254 [main] DEBUG nextflow.plugin.PluginUpdater - Installing plugin nf-tower version: 1.11.3 +Feb-21 08:26:13.266 [main] INFO org.pf4j.AbstractPluginManager - Plugin 'nf-tower@1.11.3' resolved +Feb-21 08:26:13.266 [main] INFO org.pf4j.AbstractPluginManager - Start plugin 'nf-tower@1.11.3' +Feb-21 08:26:13.282 [main] DEBUG nextflow.plugin.BasePlugin - Plugin started nf-tower@1.11.3 +Feb-21 08:26:13.348 [main] DEBUG nextflow.Session - Session UUID: aaa33539-42d2-4a58-bb4f-dbf3ef8277f7 +Feb-21 08:26:13.349 [main] DEBUG nextflow.Session - Run name: happy_einstein +Feb-21 08:26:13.350 [main] DEBUG nextflow.Session - Executor pool size: 80 +Feb-21 08:26:13.360 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Feb-21 08:26:13.368 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-21 08:26:13.399 [main] DEBUG nextflow.cli.CmdRun - + Version: 25.04.3 build 5949 + Created: 02-06-2025 20:56 UTC + System: Linux 6.11.0-26-generic + Runtime: Groovy 4.0.26 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 2226167@k8s-node23 [127.0.1.1] + CPUs: 80 - Mem: 251.6 GB (54.1 GB) - Swap: 0 (0) +Feb-21 08:26:13.429 [main] DEBUG nextflow.Session - Work-dir: /data/bugra/digital_trials/work [btrfs] +Feb-21 08:26:13.430 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugra/digital_trials/bin +Feb-21 08:26:13.445 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Feb-21 08:26:13.462 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Feb-21 08:26:13.467 [main] DEBUG nextflow.Session - Observer factory: TowerFactory +Feb-21 08:26:13.470 [main] DEBUG nextflow.Session - Observer factory (v2): LinObserverFactory +Feb-21 08:26:13.502 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Feb-21 08:26:13.514 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 81; maxThreads: 1000 +Feb-21 08:26:13.743 [main] DEBUG nextflow.Session - Session start +Feb-21 08:26:14.238 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Feb-21 08:26:15.158 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-21 08:26:15.158 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-21 08:26:15.167 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Feb-21 08:26:15.179 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=80; memory=251.6 GB; capacity=80; pollInterval=100ms; dumpInterval=5m +Feb-21 08:26:15.182 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Feb-21 08:26:15.220 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'HUMAN_TRANSFORMER': maxForks=0; fair=false; array=0 +Feb-21 08:26:15.319 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-21 08:26:15.319 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-21 08:26:15.321 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'GET_FINAL_METABOLITES_STATIC': maxForks=0; fair=false; array=0 +Feb-21 08:26:15.338 [main] DEBUG nextflow.script.ProcessConfig - Config settings `withLabel:gpu_process` matches labels `gpu_process` for process with name PREPROCESS_PROTEIN +Feb-21 08:26:15.344 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-21 08:26:15.344 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-21 08:26:15.346 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'PREPROCESS_PROTEIN': maxForks=0; fair=false; array=0 +Feb-21 08:26:15.417 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-21 08:26:15.417 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-21 08:26:15.419 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'CONPLEX_ALL': maxForks=0; fair=false; array=0 +Feb-21 08:26:15.452 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-21 08:26:15.453 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-21 08:26:15.454 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'NETWORK_ENRICHMENT': maxForks=0; fair=false; array=0 +Feb-21 08:26:15.462 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-21 08:26:15.463 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-21 08:26:15.464 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'TISSUE_DISTRIBUTION': maxForks=0; fair=false; array=0 +Feb-21 08:26:15.478 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-21 08:26:15.478 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-21 08:26:15.479 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'BIO_METRICS': maxForks=0; fair=false; array=0 +Feb-21 08:26:15.483 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: HUMAN_TRANSFORMER, METABOLITES_BY_MASS, GET_FINAL_METABOLITES_STATIC, CONPLEX_ALL, NETWORK_ENRICHMENT, GET_FINAL_METABOLITES, CONPLEX, BIO_METRICS, SUPER_TRANSFORMER, TISSUE_DISTRIBUTION, MERGE_DRUG, MERGE_INTERACTIONS, ORDERED_SEQUENCE, PREPROCESS_PROTEIN +Feb-21 08:26:15.486 [main] DEBUG nextflow.Session - Igniting dataflow network (11) +Feb-21 08:26:15.493 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > HUMAN_TRANSFORMER +Feb-21 08:26:15.494 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > GET_FINAL_METABOLITES_STATIC +Feb-21 08:26:15.496 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > PREPROCESS_PROTEIN +Feb-21 08:26:15.496 [PathVisitor-1] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /data/dreamdock-data/gpr55-caline/digtrial/input/ligands-2/; pattern: *.csv; options: [:] +Feb-21 08:26:15.496 [PathVisitor-3] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /mnt/dreamdock-data/digital_trials/input/blank/; pattern: *.fasta; options: [:] +Feb-21 08:26:15.497 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > CONPLEX_ALL +Feb-21 08:26:15.498 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > NETWORK_ENRICHMENT +Feb-21 08:26:15.499 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > TISSUE_DISTRIBUTION +Feb-21 08:26:15.499 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > BIO_METRICS +Feb-21 08:26:15.500 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_c432c676a3e7c0cb: /data/bugra/digital_trials/test.nf + Script_e39e54e7aa543fd0: /data/bugra/digital_trials/main_biotransformer.nf + Script_d345b7a65a8f3255: /data/bugra/digital_trials/main_conplex.nf + Script_ec01f2a38db15aa5: /data/bugra/digital_trials/main_tissue.nf +Feb-21 08:26:15.501 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Feb-21 08:26:15.501 [main] DEBUG nextflow.Session - Session await +Feb-21 08:26:15.782 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 08:26:15.786 [Task submitter] INFO nextflow.Session - [ca/885a1e] Submitted process > HUMAN_TRANSFORMER (2) +Feb-21 08:26:15.805 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 08:26:15.806 [Task submitter] INFO nextflow.Session - [2d/bb32e3] Submitted process > HUMAN_TRANSFORMER (1) +Feb-21 08:26:15.817 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 08:26:15.817 [Task submitter] INFO nextflow.Session - [0f/b91ea0] Submitted process > HUMAN_TRANSFORMER (3) +Feb-21 08:31:15.388 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 3 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ca/885a1e737e907d9d68c641155b12a7] +~> TaskHandler[id: 1; name: HUMAN_TRANSFORMER (1); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/2d/bb32e3b5f28c9eec85c5bb37846523] +~> TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/0f/b91ea06be4270d20b24cf9066994d1] +Feb-21 08:36:15.480 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 3 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ca/885a1e737e907d9d68c641155b12a7] +~> TaskHandler[id: 1; name: HUMAN_TRANSFORMER (1); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/2d/bb32e3b5f28c9eec85c5bb37846523] +~> TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/0f/b91ea06be4270d20b24cf9066994d1] +Feb-21 08:41:15.530 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 3 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ca/885a1e737e907d9d68c641155b12a7] +~> TaskHandler[id: 1; name: HUMAN_TRANSFORMER (1); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/2d/bb32e3b5f28c9eec85c5bb37846523] +~> TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/0f/b91ea06be4270d20b24cf9066994d1] +Feb-21 08:43:29.942 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: HUMAN_TRANSFORMER (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/2d/bb32e3b5f28c9eec85c5bb37846523] +Feb-21 08:43:29.945 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-21 08:43:29.985 [TaskFinalizer-1] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'PublishDir' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-21 08:43:30.002 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 08:43:30.003 [Task submitter] INFO nextflow.Session - [6a/f2fe26] Submitted process > GET_FINAL_METABOLITES_STATIC (1) +Feb-21 08:44:16.016 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 4; name: GET_FINAL_METABOLITES_STATIC (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/6a/f2fe266d28b090525b076c6971a9ac] +Feb-21 08:44:16.071 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 08:44:16.072 [Task submitter] INFO nextflow.Session - [b4/24dd60] Submitted process > CONPLEX_ALL (1) +Feb-21 08:45:20.806 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 5; name: CONPLEX_ALL (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/b4/24dd60196c0971a4af54b5ad1565b0] +Feb-21 08:45:20.838 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 08:45:20.838 [Task submitter] INFO nextflow.Session - [41/675f1d] Submitted process > TISSUE_DISTRIBUTION (1) +Feb-21 08:45:20.846 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 08:45:20.847 [Task submitter] INFO nextflow.Session - [f4/4b8797] Submitted process > BIO_METRICS (1) +Feb-21 08:45:20.854 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 08:45:20.854 [Task submitter] INFO nextflow.Session - [20/a798aa] Submitted process > NETWORK_ENRICHMENT (1) +Feb-21 08:45:30.689 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 8; name: NETWORK_ENRICHMENT (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/20/a798aac4125b2c858745f2db23b064] +Feb-21 08:46:15.561 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 4 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ca/885a1e737e907d9d68c641155b12a7] +~> TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/0f/b91ea06be4270d20b24cf9066994d1] +~> TaskHandler[id: 7; name: TISSUE_DISTRIBUTION (1); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/41/675f1daadc6833d1ba6e5b5b97f981] +~> TaskHandler[id: 6; name: BIO_METRICS (1); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/f4/4b8797cf0b654d2d69742b17114257] +Feb-21 08:46:26.149 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 6; name: BIO_METRICS (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/f4/4b8797cf0b654d2d69742b17114257] +Feb-21 08:46:43.111 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 7; name: TISSUE_DISTRIBUTION (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/41/675f1daadc6833d1ba6e5b5b97f981] +Feb-21 08:51:15.624 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 2 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ca/885a1e737e907d9d68c641155b12a7] +~> TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/0f/b91ea06be4270d20b24cf9066994d1] +Feb-21 08:56:15.658 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 2 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ca/885a1e737e907d9d68c641155b12a7] +~> TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/0f/b91ea06be4270d20b24cf9066994d1] +Feb-21 09:01:15.658 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 2 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ca/885a1e737e907d9d68c641155b12a7] +~> TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/0f/b91ea06be4270d20b24cf9066994d1] +Feb-21 09:04:21.812 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ca/885a1e737e907d9d68c641155b12a7] +Feb-21 09:04:21.842 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 09:04:21.844 [Task submitter] INFO nextflow.Session - [bc/640502] Submitted process > GET_FINAL_METABOLITES_STATIC (2) +Feb-21 09:06:15.670 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 2 -- submitted tasks are shown below +~> TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/0f/b91ea06be4270d20b24cf9066994d1] +~> TaskHandler[id: 9; name: GET_FINAL_METABOLITES_STATIC (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/bc/640502221e58476eee68f371fe82bb] +Feb-21 09:06:26.151 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 9; name: GET_FINAL_METABOLITES_STATIC (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/bc/640502221e58476eee68f371fe82bb] +Feb-21 09:06:26.183 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 09:06:26.184 [Task submitter] INFO nextflow.Session - [fc/c19a15] Submitted process > CONPLEX_ALL (2) +Feb-21 09:07:46.502 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 10; name: CONPLEX_ALL (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/fc/c19a15943208e08e3abb897eb631c0] +Feb-21 09:07:46.745 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 09:07:46.746 [Task submitter] INFO nextflow.Session - [1a/a9da00] Submitted process > BIO_METRICS (2) +Feb-21 09:07:46.758 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 09:07:46.759 [Task submitter] INFO nextflow.Session - [88/9bf0d8] Submitted process > NETWORK_ENRICHMENT (2) +Feb-21 09:07:46.771 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 09:07:46.772 [Task submitter] INFO nextflow.Session - [8f/a0549f] Submitted process > TISSUE_DISTRIBUTION (2) +Feb-21 09:07:54.952 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 12; name: NETWORK_ENRICHMENT (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/88/9bf0d88d7aeba1db6fb5b607608d47] +Feb-21 09:08:30.010 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 11; name: BIO_METRICS (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/1a/a9da0011763bb8b8bedaa177c7ad4d] +Feb-21 09:09:17.348 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 13; name: TISSUE_DISTRIBUTION (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/8f/a0549f011b0670ee0efe79c24eed12] +Feb-21 09:11:15.719 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/0f/b91ea06be4270d20b24cf9066994d1] +Feb-21 09:16:15.741 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/0f/b91ea06be4270d20b24cf9066994d1] +Feb-21 09:21:15.743 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/0f/b91ea06be4270d20b24cf9066994d1] +Feb-21 09:26:15.759 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/0f/b91ea06be4270d20b24cf9066994d1] +Feb-21 09:31:15.772 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/0f/b91ea06be4270d20b24cf9066994d1] +Feb-21 09:33:12.492 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/0f/b91ea06be4270d20b24cf9066994d1] +Feb-21 09:33:12.519 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 09:33:12.521 [Task submitter] INFO nextflow.Session - [5a/66192c] Submitted process > GET_FINAL_METABOLITES_STATIC (3) +Feb-21 09:36:15.836 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 14; name: GET_FINAL_METABOLITES_STATIC (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/5a/66192c1bce02251dae996035f42b6c] +Feb-21 09:36:49.412 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 14; name: GET_FINAL_METABOLITES_STATIC (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/5a/66192c1bce02251dae996035f42b6c] +Feb-21 09:36:49.436 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 09:36:49.437 [Task submitter] INFO nextflow.Session - [1b/e37700] Submitted process > CONPLEX_ALL (3) +Feb-21 09:37:18.524 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 15; name: CONPLEX_ALL (3); status: COMPLETED; exit: 137; error: -; workDir: /data/bugra/digital_trials/work/1b/e377009d05a6c1b5bb554d679c7b6d] +Feb-21 09:37:18.539 [TaskFinalizer-5] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=CONPLEX_ALL (3); work-dir=/data/bugra/digital_trials/work/1b/e377009d05a6c1b5bb554d679c7b6d + error [nextflow.exception.ProcessFailedException]: Process `CONPLEX_ALL (3)` terminated with an error exit status (137) +Feb-21 09:37:18.555 [TaskFinalizer-5] INFO nextflow.processor.TaskProcessor - [1b/e37700] NOTE: Process `CONPLEX_ALL (3)` terminated with an error exit status (137) -- Execution is retried (1) +Feb-21 09:37:18.569 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 09:37:18.570 [Task submitter] INFO nextflow.Session - [f9/d09bf9] Re-submitted process > CONPLEX_ALL (3) +Feb-21 09:39:45.775 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 16; name: CONPLEX_ALL (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/f9/d09bf98e06da2eff5d1cc7e692395e] +Feb-21 09:39:45.801 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 09:39:45.803 [Task submitter] INFO nextflow.Session - [c5/08ec8c] Submitted process > TISSUE_DISTRIBUTION (3) +Feb-21 09:39:45.812 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 09:39:45.813 [Task submitter] INFO nextflow.Session - [0a/3a0af0] Submitted process > NETWORK_ENRICHMENT (3) +Feb-21 09:39:45.833 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-21 09:39:45.834 [Task submitter] INFO nextflow.Session - [49/7a1605] Submitted process > BIO_METRICS (3) +Feb-21 09:39:58.587 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 18; name: NETWORK_ENRICHMENT (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/0a/3a0af0240fb975245cb9cab1214683] +Feb-21 09:41:15.781 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 17; name: BIO_METRICS (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/49/7a16055c1c8edcda53d29edbffefb3] +Feb-21 09:41:15.882 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 19; name: TISSUE_DISTRIBUTION (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/c5/08ec8c52e99f1e5f8284b75bd0523d] +Feb-21 09:42:16.950 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 19; name: TISSUE_DISTRIBUTION (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/c5/08ec8c52e99f1e5f8284b75bd0523d] +Feb-21 09:42:16.957 [main] DEBUG nextflow.Session - Session await > all processes finished +Feb-21 09:42:17.051 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Feb-21 09:42:17.051 [main] DEBUG nextflow.Session - Session await > all barriers passed +Feb-21 09:42:17.054 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'TaskFinalizer' shutdown completed (hard=false) +Feb-21 09:42:17.104 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'PublishDir' shutdown completed (hard=false) +Feb-21 09:42:17.122 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=18; failedCount=1; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=1; abortedCount=0; succeedDuration=2h 22m 49s; failedDuration=29s; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=5; peakCpus=5; peakMemory=21 GB; ] +Feb-21 09:42:17.188 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Feb-21 09:42:17.292 [main] INFO org.pf4j.AbstractPluginManager - Stop plugin 'nf-tower@1.11.3' +Feb-21 09:42:17.292 [main] DEBUG nextflow.plugin.BasePlugin - Plugin stopped nf-tower +Feb-21 09:42:17.294 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'FileTransfer' shutdown completed (hard=false) +Feb-21 09:42:17.295 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/.nextflow.log.7 b/.nextflow.log.7 new file mode 100644 index 0000000..920bb4f --- /dev/null +++ b/.nextflow.log.7 @@ -0,0 +1,189 @@ +Feb-20 12:47:41.705 [main] DEBUG nextflow.cli.Launcher - $> nextflow run test.nf -params-file /data/dreamdock-data/gpr55-caline/digtrial/gpr55-2.json +Feb-20 12:47:42.085 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 25.04.3 +Feb-20 12:47:42.117 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/home/omic/.nextflow/plugins; core-plugins: nf-amazon@2.15.0,nf-azure@1.16.0,nf-cloudcache@0.4.3,nf-codecommit@0.2.3,nf-console@1.2.1,nf-google@1.21.0,nf-k8s@1.0.0,nf-tower@1.11.3,nf-wave@1.12.1 +Feb-20 12:47:42.156 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Feb-20 12:47:42.157 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Feb-20 12:47:42.161 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Feb-20 12:47:42.176 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Feb-20 12:47:42.204 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugra/digital_trials/nextflow.config +Feb-20 12:47:42.207 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugra/digital_trials/nextflow.config +Feb-20 12:47:42.249 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /home/omic/.nextflow/secrets/store.json +Feb-20 12:47:42.254 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@6ef81f31] - activable => nextflow.secret.LocalSecretsProvider@6ef81f31 +Feb-20 12:47:42.284 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `standard` +Feb-20 12:47:43.029 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 from script declaration +Feb-20 12:47:43.053 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [voluminous_meucci] DSL2 - revision: 5cb3581ad6 +Feb-20 12:47:43.055 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Feb-20 12:47:43.057 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[nf-tower@1.11.3] +Feb-20 12:47:43.059 [main] DEBUG nextflow.plugin.PluginUpdater - Installing plugin nf-tower version: 1.11.3 +Feb-20 12:47:43.073 [main] INFO org.pf4j.AbstractPluginManager - Plugin 'nf-tower@1.11.3' resolved +Feb-20 12:47:43.073 [main] INFO org.pf4j.AbstractPluginManager - Start plugin 'nf-tower@1.11.3' +Feb-20 12:47:43.090 [main] DEBUG nextflow.plugin.BasePlugin - Plugin started nf-tower@1.11.3 +Feb-20 12:47:43.163 [main] DEBUG nextflow.Session - Session UUID: a63634f0-49a8-483c-8fd6-7fb017f33c21 +Feb-20 12:47:43.163 [main] DEBUG nextflow.Session - Run name: voluminous_meucci +Feb-20 12:47:43.164 [main] DEBUG nextflow.Session - Executor pool size: 80 +Feb-20 12:47:43.176 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Feb-20 12:47:43.183 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-20 12:47:43.216 [main] DEBUG nextflow.cli.CmdRun - + Version: 25.04.3 build 5949 + Created: 02-06-2025 20:56 UTC + System: Linux 6.11.0-26-generic + Runtime: Groovy 4.0.26 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 854173@k8s-node23 [127.0.1.1] + CPUs: 80 - Mem: 251.6 GB (57.9 GB) - Swap: 0 (0) +Feb-20 12:47:43.251 [main] DEBUG nextflow.Session - Work-dir: /data/bugra/digital_trials/work [btrfs] +Feb-20 12:47:43.252 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugra/digital_trials/bin +Feb-20 12:47:43.270 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Feb-20 12:47:43.287 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Feb-20 12:47:43.294 [main] DEBUG nextflow.Session - Observer factory: TowerFactory +Feb-20 12:47:43.296 [main] DEBUG nextflow.Session - Observer factory (v2): LinObserverFactory +Feb-20 12:47:43.328 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Feb-20 12:47:43.340 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 81; maxThreads: 1000 +Feb-20 12:47:43.528 [main] DEBUG nextflow.Session - Session start +Feb-20 12:47:44.002 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Feb-20 12:47:44.878 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-20 12:47:44.879 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-20 12:47:44.887 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Feb-20 12:47:44.897 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=80; memory=251.6 GB; capacity=80; pollInterval=100ms; dumpInterval=5m +Feb-20 12:47:44.900 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Feb-20 12:47:44.935 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'HUMAN_TRANSFORMER': maxForks=0; fair=false; array=0 +Feb-20 12:47:45.021 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-20 12:47:45.022 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-20 12:47:45.024 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'GET_FINAL_METABOLITES_STATIC': maxForks=0; fair=false; array=0 +Feb-20 12:47:45.036 [main] DEBUG nextflow.script.ProcessConfig - Config settings `withLabel:gpu_process` matches labels `gpu_process` for process with name PREPROCESS_PROTEIN +Feb-20 12:47:45.041 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-20 12:47:45.041 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-20 12:47:45.043 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'PREPROCESS_PROTEIN': maxForks=0; fair=false; array=0 +Feb-20 12:47:45.100 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-20 12:47:45.101 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-20 12:47:45.102 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'CONPLEX_ALL': maxForks=0; fair=false; array=0 +Feb-20 12:47:45.132 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-20 12:47:45.132 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-20 12:47:45.133 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'NETWORK_ENRICHMENT': maxForks=0; fair=false; array=0 +Feb-20 12:47:45.141 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-20 12:47:45.141 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-20 12:47:45.142 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'TISSUE_DISTRIBUTION': maxForks=0; fair=false; array=0 +Feb-20 12:47:45.174 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-20 12:47:45.174 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-20 12:47:45.175 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'BIO_METRICS': maxForks=0; fair=false; array=0 +Feb-20 12:47:45.179 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: HUMAN_TRANSFORMER, METABOLITES_BY_MASS, GET_FINAL_METABOLITES_STATIC, CONPLEX_ALL, NETWORK_ENRICHMENT, GET_FINAL_METABOLITES, CONPLEX, BIO_METRICS, SUPER_TRANSFORMER, TISSUE_DISTRIBUTION, MERGE_DRUG, MERGE_INTERACTIONS, PREPROCESS_PROTEIN, ORDERED_SEQUENCE +Feb-20 12:47:45.182 [main] DEBUG nextflow.Session - Igniting dataflow network (11) +Feb-20 12:47:45.190 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > HUMAN_TRANSFORMER +Feb-20 12:47:45.191 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > GET_FINAL_METABOLITES_STATIC +Feb-20 12:47:45.192 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > PREPROCESS_PROTEIN +Feb-20 12:47:45.192 [PathVisitor-1] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /data/dreamdock-data/gpr55-caline/digtrial/input/ligands-2/; pattern: *.csv; options: [:] +Feb-20 12:47:45.192 [PathVisitor-3] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /mnt/dreamdock-data/digital_trials/input/blank/; pattern: *.fasta; options: [:] +Feb-20 12:47:45.193 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > CONPLEX_ALL +Feb-20 12:47:45.193 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > NETWORK_ENRICHMENT +Feb-20 12:47:45.194 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > TISSUE_DISTRIBUTION +Feb-20 12:47:45.194 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > BIO_METRICS +Feb-20 12:47:45.195 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_c432c676a3e7c0cb: /data/bugra/digital_trials/test.nf + Script_e39e54e7aa543fd0: /data/bugra/digital_trials/main_biotransformer.nf + Script_d345b7a65a8f3255: /data/bugra/digital_trials/main_conplex.nf + Script_ec01f2a38db15aa5: /data/bugra/digital_trials/main_tissue.nf +Feb-20 12:47:45.195 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Feb-20 12:47:45.195 [main] DEBUG nextflow.Session - Session await +Feb-20 12:47:45.473 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:47:45.477 [Task submitter] INFO nextflow.Session - [97/35ef6b] Submitted process > HUMAN_TRANSFORMER (1) +Feb-20 12:47:45.496 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:47:45.497 [Task submitter] INFO nextflow.Session - [2d/780298] Submitted process > HUMAN_TRANSFORMER (3) +Feb-20 12:47:45.505 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:47:45.506 [Task submitter] INFO nextflow.Session - [61/1051d3] Submitted process > HUMAN_TRANSFORMER (2) +Feb-20 12:47:45.516 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:47:45.517 [Task submitter] INFO nextflow.Session - [70/a09372] Submitted process > HUMAN_TRANSFORMER (4) +Feb-20 12:50:49.469 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/2d/780298364720d78ead18d8c29fdde5] +Feb-20 12:50:49.471 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-20 12:50:49.509 [TaskFinalizer-1] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'PublishDir' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-20 12:50:49.533 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:50:49.534 [Task submitter] INFO nextflow.Session - [00/400028] Submitted process > GET_FINAL_METABOLITES_STATIC (1) +Feb-20 12:51:03.390 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 5; name: GET_FINAL_METABOLITES_STATIC (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/00/400028dec573753492b97923ca40a4] +Feb-20 12:51:03.450 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:51:03.452 [Task submitter] INFO nextflow.Session - [ab/173fd5] Submitted process > CONPLEX_ALL (1) +Feb-20 12:51:40.012 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 4; name: HUMAN_TRANSFORMER (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/70/a09372fc0300634e7a2d63c19eca9e] +Feb-20 12:51:40.036 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:51:40.037 [Task submitter] INFO nextflow.Session - [93/602233] Submitted process > GET_FINAL_METABOLITES_STATIC (2) +Feb-20 12:51:57.731 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 7; name: GET_FINAL_METABOLITES_STATIC (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/93/602233592598ae353bc191fe5eb511] +Feb-20 12:51:57.751 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:51:57.751 [Task submitter] INFO nextflow.Session - [27/09061e] Submitted process > CONPLEX_ALL (2) +Feb-20 12:52:04.582 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 6; name: CONPLEX_ALL (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ab/173fd53ee5af1f9a99547c251a3860] +Feb-20 12:52:04.619 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:52:04.620 [Task submitter] INFO nextflow.Session - [97/9f27dd] Submitted process > TISSUE_DISTRIBUTION (1) +Feb-20 12:52:04.631 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:52:04.632 [Task submitter] INFO nextflow.Session - [15/a3f493] Submitted process > BIO_METRICS (1) +Feb-20 12:52:04.641 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:52:04.642 [Task submitter] INFO nextflow.Session - [9b/22fd33] Submitted process > NETWORK_ENRICHMENT (1) +Feb-20 12:52:19.322 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 9; name: NETWORK_ENRICHMENT (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/9b/22fd33156ac8f5e161b52c59cefc81] +Feb-20 12:52:45.073 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 5 -- submitted tasks are shown below +~> TaskHandler[id: 1; name: HUMAN_TRANSFORMER (1); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/97/35ef6b0fb9a5705089e16cf692f080] +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/61/1051d32de7028657b1414e31f05229] +~> TaskHandler[id: 8; name: CONPLEX_ALL (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/27/09061ebd4aed37c8d9f75c62e056c9] +~> TaskHandler[id: 11; name: TISSUE_DISTRIBUTION (1); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/97/9f27dd23c432d4c981bc33a9fdea9d] +~> TaskHandler[id: 10; name: BIO_METRICS (1); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/15/a3f493c3f2ce41178d29e8ab6347a5] +Feb-20 12:52:47.429 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 8; name: CONPLEX_ALL (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/27/09061ebd4aed37c8d9f75c62e056c9] +Feb-20 12:52:47.452 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:52:47.453 [Task submitter] INFO nextflow.Session - [0a/f14dfa] Submitted process > NETWORK_ENRICHMENT (2) +Feb-20 12:52:47.463 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:52:47.464 [Task submitter] INFO nextflow.Session - [e7/226b4c] Submitted process > TISSUE_DISTRIBUTION (2) +Feb-20 12:52:47.471 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:52:47.472 [Task submitter] INFO nextflow.Session - [d6/fb313d] Submitted process > BIO_METRICS (2) +Feb-20 12:52:57.393 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 14; name: NETWORK_ENRICHMENT (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/0a/f14dfa87e070755e2a9c79353c721d] +Feb-20 12:53:05.991 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 10; name: BIO_METRICS (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/15/a3f493c3f2ce41178d29e8ab6347a5] +Feb-20 12:53:21.010 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 13; name: BIO_METRICS (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/d6/fb313d80c7d4a29ba04f1238d20f9f] +Feb-20 12:53:40.394 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 11; name: TISSUE_DISTRIBUTION (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/97/9f27dd23c432d4c981bc33a9fdea9d] +Feb-20 12:54:14.723 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 12; name: TISSUE_DISTRIBUTION (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/e7/226b4ced31f47b82c4a3f8aa57125e] +Feb-20 12:55:18.592 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: HUMAN_TRANSFORMER (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/97/35ef6b0fb9a5705089e16cf692f080] +Feb-20 12:55:18.619 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:55:18.620 [Task submitter] INFO nextflow.Session - [69/5d280f] Submitted process > GET_FINAL_METABOLITES_STATIC (3) +Feb-20 12:55:51.877 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 15; name: GET_FINAL_METABOLITES_STATIC (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/69/5d280fbd362e9d8b61059bbd73baf8] +Feb-20 12:55:51.907 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:55:51.908 [Task submitter] INFO nextflow.Session - [74/48a2a7] Submitted process > CONPLEX_ALL (3) +Feb-20 12:57:06.254 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 16; name: CONPLEX_ALL (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/74/48a2a7780c3f777bbb2ae0f25f0a8c] +Feb-20 12:57:06.278 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:57:06.279 [Task submitter] INFO nextflow.Session - [4a/6f0805] Submitted process > TISSUE_DISTRIBUTION (3) +Feb-20 12:57:06.289 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:57:06.290 [Task submitter] INFO nextflow.Session - [b8/073303] Submitted process > NETWORK_ENRICHMENT (3) +Feb-20 12:57:06.300 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 12:57:06.301 [Task submitter] INFO nextflow.Session - [06/d7b03a] Submitted process > BIO_METRICS (3) +Feb-20 12:57:14.098 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 18; name: NETWORK_ENRICHMENT (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/b8/073303b55a5a4562ac607a9627b4ce] +Feb-20 12:57:45.164 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 3 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/61/1051d32de7028657b1414e31f05229] +~> TaskHandler[id: 19; name: TISSUE_DISTRIBUTION (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/4a/6f0805028d05f5942ff8c0dd6e0fb6] +~> TaskHandler[id: 17; name: BIO_METRICS (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/06/d7b03ab59a78de182f97d57a4af883] +Feb-20 12:58:34.071 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 17; name: BIO_METRICS (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/06/d7b03ab59a78de182f97d57a4af883] +Feb-20 12:59:57.288 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 19; name: TISSUE_DISTRIBUTION (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/4a/6f0805028d05f5942ff8c0dd6e0fb6] +Feb-20 13:02:45.233 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/61/1051d32de7028657b1414e31f05229] +Feb-20 13:07:45.260 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/61/1051d32de7028657b1414e31f05229] +Feb-20 13:12:45.271 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/61/1051d32de7028657b1414e31f05229] +Feb-20 13:14:43.334 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/61/1051d32de7028657b1414e31f05229] +Feb-20 13:14:43.363 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 13:14:43.364 [Task submitter] INFO nextflow.Session - [5f/44be98] Submitted process > GET_FINAL_METABOLITES_STATIC (4) +Feb-20 13:16:13.312 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 20; name: GET_FINAL_METABOLITES_STATIC (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/5f/44be985eebec27883ed97d8dc19c80] +Feb-20 13:16:13.349 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 13:16:13.350 [Task submitter] INFO nextflow.Session - [b4/630a29] Submitted process > CONPLEX_ALL (4) +Feb-20 13:17:45.345 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 21; name: CONPLEX_ALL (4); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/b4/630a2983878cda3d03d42c45cca98f] +Feb-20 13:17:48.021 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 21; name: CONPLEX_ALL (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/b4/630a2983878cda3d03d42c45cca98f] +Feb-20 13:17:48.045 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 13:17:48.046 [Task submitter] INFO nextflow.Session - [5c/ee7ebf] Submitted process > TISSUE_DISTRIBUTION (4) +Feb-20 13:17:48.057 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 13:17:48.057 [Task submitter] INFO nextflow.Session - [09/a6adcd] Submitted process > BIO_METRICS (4) +Feb-20 13:17:48.066 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-20 13:17:48.067 [Task submitter] INFO nextflow.Session - [5d/16d116] Submitted process > NETWORK_ENRICHMENT (4) +Feb-20 13:17:56.561 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 23; name: NETWORK_ENRICHMENT (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/5d/16d1169328307314e2ca18b0d54c1f] +Feb-20 13:18:46.519 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 22; name: BIO_METRICS (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/09/a6adcd0a29467e13550a9805afd96b] +Feb-20 13:20:03.461 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 24; name: TISSUE_DISTRIBUTION (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/5c/ee7ebf9a1241900d75d373a0f55c6a] +Feb-20 13:20:03.466 [main] DEBUG nextflow.Session - Session await > all processes finished +Feb-20 13:20:03.563 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Feb-20 13:20:03.563 [main] DEBUG nextflow.Session - Session await > all barriers passed +Feb-20 13:20:03.572 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'TaskFinalizer' shutdown completed (hard=false) +Feb-20 13:20:03.576 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'PublishDir' shutdown completed (hard=false) +Feb-20 13:20:03.592 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=24; failedCount=0; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=0; abortedCount=0; succeedDuration=1h 1m 34s; failedDuration=0ms; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=7; peakCpus=7; peakMemory=31 GB; ] +Feb-20 13:20:03.653 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Feb-20 13:20:03.735 [main] INFO org.pf4j.AbstractPluginManager - Stop plugin 'nf-tower@1.11.3' +Feb-20 13:20:03.735 [main] DEBUG nextflow.plugin.BasePlugin - Plugin stopped nf-tower +Feb-20 13:20:03.737 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'FileTransfer' shutdown completed (hard=false) +Feb-20 13:20:03.738 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/.nextflow.log.8 b/.nextflow.log.8 new file mode 100644 index 0000000..70bccc8 --- /dev/null +++ b/.nextflow.log.8 @@ -0,0 +1,96 @@ +Feb-20 12:45:31.438 [main] DEBUG nextflow.cli.Launcher - $> nextflow run test.nf -params-file /data/dreamdock-data/gpr55-caline/digtrial/gpr55-2.json +Feb-20 12:45:31.816 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 25.04.3 +Feb-20 12:45:31.845 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/home/omic/.nextflow/plugins; core-plugins: nf-amazon@2.15.0,nf-azure@1.16.0,nf-cloudcache@0.4.3,nf-codecommit@0.2.3,nf-console@1.2.1,nf-google@1.21.0,nf-k8s@1.0.0,nf-tower@1.11.3,nf-wave@1.12.1 +Feb-20 12:45:31.879 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Feb-20 12:45:31.880 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Feb-20 12:45:31.884 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Feb-20 12:45:31.897 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Feb-20 12:45:31.922 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugra/digital_trials/nextflow.config +Feb-20 12:45:31.925 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugra/digital_trials/nextflow.config +Feb-20 12:45:31.961 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /home/omic/.nextflow/secrets/store.json +Feb-20 12:45:31.966 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@6ef81f31] - activable => nextflow.secret.LocalSecretsProvider@6ef81f31 +Feb-20 12:45:31.995 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `standard` +Feb-20 12:45:32.749 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 from script declaration +Feb-20 12:45:32.771 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [mad_jepsen] DSL2 - revision: 5cb3581ad6 +Feb-20 12:45:32.773 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Feb-20 12:45:32.775 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[nf-tower@1.11.3] +Feb-20 12:45:32.777 [main] DEBUG nextflow.plugin.PluginUpdater - Installing plugin nf-tower version: 1.11.3 +Feb-20 12:45:32.790 [main] INFO org.pf4j.AbstractPluginManager - Plugin 'nf-tower@1.11.3' resolved +Feb-20 12:45:32.790 [main] INFO org.pf4j.AbstractPluginManager - Start plugin 'nf-tower@1.11.3' +Feb-20 12:45:32.808 [main] DEBUG nextflow.plugin.BasePlugin - Plugin started nf-tower@1.11.3 +Feb-20 12:45:32.881 [main] DEBUG nextflow.Session - Session UUID: 9b7d6ce5-46a6-43c0-accf-fd12d7d33e5d +Feb-20 12:45:32.882 [main] DEBUG nextflow.Session - Run name: mad_jepsen +Feb-20 12:45:32.883 [main] DEBUG nextflow.Session - Executor pool size: 80 +Feb-20 12:45:32.896 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Feb-20 12:45:32.905 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-20 12:45:32.940 [main] DEBUG nextflow.cli.CmdRun - + Version: 25.04.3 build 5949 + Created: 02-06-2025 20:56 UTC + System: Linux 6.11.0-26-generic + Runtime: Groovy 4.0.26 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 851238@k8s-node23 [127.0.1.1] + CPUs: 80 - Mem: 251.6 GB (56.5 GB) - Swap: 0 (0) +Feb-20 12:45:32.977 [main] DEBUG nextflow.Session - Work-dir: /data/bugra/digital_trials/work [btrfs] +Feb-20 12:45:32.978 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugra/digital_trials/bin +Feb-20 12:45:32.997 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Feb-20 12:45:33.016 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Feb-20 12:45:33.022 [main] DEBUG nextflow.Session - Observer factory: TowerFactory +Feb-20 12:45:33.025 [main] DEBUG nextflow.Session - Observer factory (v2): LinObserverFactory +Feb-20 12:45:33.059 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Feb-20 12:45:33.073 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 81; maxThreads: 1000 +Feb-20 12:45:33.221 [main] DEBUG nextflow.Session - Session start +Feb-20 12:45:33.684 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Feb-20 12:45:34.592 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-20 12:45:34.592 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-20 12:45:34.600 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Feb-20 12:45:34.611 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=80; memory=251.6 GB; capacity=80; pollInterval=100ms; dumpInterval=5m +Feb-20 12:45:34.614 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Feb-20 12:45:34.649 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'HUMAN_TRANSFORMER': maxForks=0; fair=false; array=0 +Feb-20 12:45:34.755 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-20 12:45:34.755 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-20 12:45:34.757 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'GET_FINAL_METABOLITES_STATIC': maxForks=0; fair=false; array=0 +Feb-20 12:45:34.772 [main] DEBUG nextflow.script.ProcessConfig - Config settings `withLabel:gpu_process` matches labels `gpu_process` for process with name PREPROCESS_PROTEIN +Feb-20 12:45:34.778 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-20 12:45:34.779 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-20 12:45:34.781 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'PREPROCESS_PROTEIN': maxForks=0; fair=false; array=0 +Feb-20 12:45:34.850 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-20 12:45:34.850 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-20 12:45:34.851 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'CONPLEX_ALL': maxForks=0; fair=false; array=0 +Feb-20 12:45:34.887 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-20 12:45:34.887 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-20 12:45:34.888 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'NETWORK_ENRICHMENT': maxForks=0; fair=false; array=0 +Feb-20 12:45:34.897 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-20 12:45:34.897 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-20 12:45:34.899 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'TISSUE_DISTRIBUTION': maxForks=0; fair=false; array=0 +Feb-20 12:45:34.927 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-20 12:45:34.927 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-20 12:45:34.928 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'BIO_METRICS': maxForks=0; fair=false; array=0 +Feb-20 12:45:34.933 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: HUMAN_TRANSFORMER, METABOLITES_BY_MASS, GET_FINAL_METABOLITES_STATIC, CONPLEX_ALL, NETWORK_ENRICHMENT, GET_FINAL_METABOLITES, CONPLEX, BIO_METRICS, SUPER_TRANSFORMER, TISSUE_DISTRIBUTION, MERGE_DRUG, MERGE_INTERACTIONS, PREPROCESS_PROTEIN, ORDERED_SEQUENCE +Feb-20 12:45:34.935 [main] DEBUG nextflow.Session - Igniting dataflow network (11) +Feb-20 12:45:34.942 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > HUMAN_TRANSFORMER +Feb-20 12:45:34.944 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > GET_FINAL_METABOLITES_STATIC +Feb-20 12:45:34.945 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > PREPROCESS_PROTEIN +Feb-20 12:45:34.946 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > CONPLEX_ALL +Feb-20 12:45:34.946 [PathVisitor-3] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /mnt/dreamdock-data/digital_trials/input/blank/; pattern: *.fasta; options: [:] +Feb-20 12:45:34.946 [PathVisitor-1] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /data/dreamdock-data/gpr55-caline/digtrial/input/ligands2/; pattern: *.csv; options: [:] +Feb-20 12:45:34.947 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > NETWORK_ENRICHMENT +Feb-20 12:45:34.947 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > TISSUE_DISTRIBUTION +Feb-20 12:45:34.948 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > BIO_METRICS +Feb-20 12:45:34.949 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_c432c676a3e7c0cb: /data/bugra/digital_trials/test.nf + Script_e39e54e7aa543fd0: /data/bugra/digital_trials/main_biotransformer.nf + Script_d345b7a65a8f3255: /data/bugra/digital_trials/main_conplex.nf + Script_ec01f2a38db15aa5: /data/bugra/digital_trials/main_tissue.nf +Feb-20 12:45:34.949 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Feb-20 12:45:34.949 [main] DEBUG nextflow.Session - Session await +Feb-20 12:45:34.951 [PathVisitor-1] DEBUG nextflow.file.PathVisitor - No such file or directory: /data/dreamdock-data/gpr55-caline/digtrial/input/ligands2/ -- Skipping visit +Feb-20 12:45:34.966 [main] DEBUG nextflow.Session - Session await > all processes finished +Feb-20 12:45:35.028 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Feb-20 12:45:35.028 [main] DEBUG nextflow.Session - Session await > all barriers passed +Feb-20 12:45:35.037 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=0; failedCount=0; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=0; abortedCount=0; succeedDuration=0ms; failedDuration=0ms; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=0; peakCpus=0; peakMemory=0; ] +Feb-20 12:45:35.083 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Feb-20 12:45:35.175 [main] INFO org.pf4j.AbstractPluginManager - Stop plugin 'nf-tower@1.11.3' +Feb-20 12:45:35.175 [main] DEBUG nextflow.plugin.BasePlugin - Plugin stopped nf-tower +Feb-20 12:45:35.179 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'FileTransfer' shutdown completed (hard=false) +Feb-20 12:45:35.180 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/.nextflow.log.9 b/.nextflow.log.9 new file mode 100644 index 0000000..a485f1a --- /dev/null +++ b/.nextflow.log.9 @@ -0,0 +1,189 @@ +Feb-18 08:16:32.779 [main] DEBUG nextflow.cli.Launcher - $> nextflow run test.nf -params-file /data/digital-trials-data/caline-run5/caline-run5.json +Feb-18 08:16:33.190 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 25.04.3 +Feb-18 08:16:33.221 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/home/omic/.nextflow/plugins; core-plugins: nf-amazon@2.15.0,nf-azure@1.16.0,nf-cloudcache@0.4.3,nf-codecommit@0.2.3,nf-console@1.2.1,nf-google@1.21.0,nf-k8s@1.0.0,nf-tower@1.11.3,nf-wave@1.12.1 +Feb-18 08:16:33.261 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Feb-18 08:16:33.262 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Feb-18 08:16:33.266 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Feb-18 08:16:33.284 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Feb-18 08:16:33.314 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugra/digital_trials/nextflow.config +Feb-18 08:16:33.318 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugra/digital_trials/nextflow.config +Feb-18 08:16:33.362 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /home/omic/.nextflow/secrets/store.json +Feb-18 08:16:33.368 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@6ef81f31] - activable => nextflow.secret.LocalSecretsProvider@6ef81f31 +Feb-18 08:16:33.406 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `standard` +Feb-18 08:16:34.180 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 from script declaration +Feb-18 08:16:34.202 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [fabulous_marconi] DSL2 - revision: 5cb3581ad6 +Feb-18 08:16:34.204 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Feb-18 08:16:34.206 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[nf-tower@1.11.3] +Feb-18 08:16:34.208 [main] DEBUG nextflow.plugin.PluginUpdater - Installing plugin nf-tower version: 1.11.3 +Feb-18 08:16:34.221 [main] INFO org.pf4j.AbstractPluginManager - Plugin 'nf-tower@1.11.3' resolved +Feb-18 08:16:34.222 [main] INFO org.pf4j.AbstractPluginManager - Start plugin 'nf-tower@1.11.3' +Feb-18 08:16:34.239 [main] DEBUG nextflow.plugin.BasePlugin - Plugin started nf-tower@1.11.3 +Feb-18 08:16:34.310 [main] DEBUG nextflow.Session - Session UUID: ece3d722-9ceb-41e2-826d-635604e82e89 +Feb-18 08:16:34.311 [main] DEBUG nextflow.Session - Run name: fabulous_marconi +Feb-18 08:16:34.311 [main] DEBUG nextflow.Session - Executor pool size: 80 +Feb-18 08:16:34.324 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Feb-18 08:16:34.332 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-18 08:16:34.414 [main] DEBUG nextflow.cli.CmdRun - + Version: 25.04.3 build 5949 + Created: 02-06-2025 20:56 UTC + System: Linux 6.11.0-26-generic + Runtime: Groovy 4.0.26 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 1283371@k8s-node23 [127.0.1.1] + CPUs: 80 - Mem: 251.6 GB (50.5 GB) - Swap: 0 (0) +Feb-18 08:16:34.449 [main] DEBUG nextflow.Session - Work-dir: /data/bugra/digital_trials/work [btrfs] +Feb-18 08:16:34.450 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugra/digital_trials/bin +Feb-18 08:16:34.467 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Feb-18 08:16:34.486 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Feb-18 08:16:34.492 [main] DEBUG nextflow.Session - Observer factory: TowerFactory +Feb-18 08:16:34.495 [main] DEBUG nextflow.Session - Observer factory (v2): LinObserverFactory +Feb-18 08:16:34.544 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Feb-18 08:16:34.560 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 81; maxThreads: 1000 +Feb-18 08:16:34.812 [main] DEBUG nextflow.Session - Session start +Feb-18 08:16:35.337 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Feb-18 08:16:36.243 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-18 08:16:36.244 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-18 08:16:36.252 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Feb-18 08:16:36.262 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=80; memory=251.6 GB; capacity=80; pollInterval=100ms; dumpInterval=5m +Feb-18 08:16:36.265 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Feb-18 08:16:36.300 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'HUMAN_TRANSFORMER': maxForks=0; fair=false; array=0 +Feb-18 08:16:36.400 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-18 08:16:36.400 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-18 08:16:36.402 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'GET_FINAL_METABOLITES_STATIC': maxForks=0; fair=false; array=0 +Feb-18 08:16:36.417 [main] DEBUG nextflow.script.ProcessConfig - Config settings `withLabel:gpu_process` matches labels `gpu_process` for process with name PREPROCESS_PROTEIN +Feb-18 08:16:36.422 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-18 08:16:36.422 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-18 08:16:36.424 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'PREPROCESS_PROTEIN': maxForks=0; fair=false; array=0 +Feb-18 08:16:36.485 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-18 08:16:36.486 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-18 08:16:36.487 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'CONPLEX_ALL': maxForks=0; fair=false; array=0 +Feb-18 08:16:36.516 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-18 08:16:36.516 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-18 08:16:36.518 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'NETWORK_ENRICHMENT': maxForks=0; fair=false; array=0 +Feb-18 08:16:36.525 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-18 08:16:36.525 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-18 08:16:36.526 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'TISSUE_DISTRIBUTION': maxForks=0; fair=false; array=0 +Feb-18 08:16:36.537 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Feb-18 08:16:36.537 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Feb-18 08:16:36.538 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'BIO_METRICS': maxForks=0; fair=false; array=0 +Feb-18 08:16:36.541 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: HUMAN_TRANSFORMER, METABOLITES_BY_MASS, GET_FINAL_METABOLITES_STATIC, CONPLEX_ALL, NETWORK_ENRICHMENT, GET_FINAL_METABOLITES, CONPLEX, BIO_METRICS, SUPER_TRANSFORMER, TISSUE_DISTRIBUTION, MERGE_DRUG, MERGE_INTERACTIONS, PREPROCESS_PROTEIN, ORDERED_SEQUENCE +Feb-18 08:16:36.544 [main] DEBUG nextflow.Session - Igniting dataflow network (11) +Feb-18 08:16:36.551 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > HUMAN_TRANSFORMER +Feb-18 08:16:36.552 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > GET_FINAL_METABOLITES_STATIC +Feb-18 08:16:36.553 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > PREPROCESS_PROTEIN +Feb-18 08:16:36.554 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > CONPLEX_ALL +Feb-18 08:16:36.554 [PathVisitor-3] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /mnt/dreamdock-data/digital_trials/input/blank/; pattern: *.fasta; options: [:] +Feb-18 08:16:36.554 [PathVisitor-1] DEBUG nextflow.file.PathVisitor - files for syntax: glob; folder: /data/digital-trials-data/caline-run5/input/ligands/; pattern: *.csv; options: [:] +Feb-18 08:16:36.555 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > NETWORK_ENRICHMENT +Feb-18 08:16:36.555 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > TISSUE_DISTRIBUTION +Feb-18 08:16:36.556 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > BIO_METRICS +Feb-18 08:16:36.557 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_c432c676a3e7c0cb: /data/bugra/digital_trials/test.nf + Script_e39e54e7aa543fd0: /data/bugra/digital_trials/main_biotransformer.nf + Script_d345b7a65a8f3255: /data/bugra/digital_trials/main_conplex.nf + Script_ec01f2a38db15aa5: /data/bugra/digital_trials/main_tissue.nf +Feb-18 08:16:36.557 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Feb-18 08:16:36.557 [main] DEBUG nextflow.Session - Session await +Feb-18 08:16:36.797 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:16:36.800 [Task submitter] INFO nextflow.Session - [b1/69b46f] Submitted process > HUMAN_TRANSFORMER (4) +Feb-18 08:16:36.815 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:16:36.816 [Task submitter] INFO nextflow.Session - [10/2fb928] Submitted process > HUMAN_TRANSFORMER (3) +Feb-18 08:16:36.823 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:16:36.824 [Task submitter] INFO nextflow.Session - [10/6b721f] Submitted process > HUMAN_TRANSFORMER (2) +Feb-18 08:16:36.831 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:16:36.831 [Task submitter] INFO nextflow.Session - [ac/d9d808] Submitted process > HUMAN_TRANSFORMER (1) +Feb-18 08:19:47.743 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 3; name: HUMAN_TRANSFORMER (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/10/2fb9287851aa5e184a108c2622d322] +Feb-18 08:19:47.747 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-18 08:19:47.788 [TaskFinalizer-1] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'PublishDir' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Feb-18 08:19:47.801 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:19:47.802 [Task submitter] INFO nextflow.Session - [4a/22722f] Submitted process > GET_FINAL_METABOLITES_STATIC (1) +Feb-18 08:19:56.711 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 5; name: GET_FINAL_METABOLITES_STATIC (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/4a/22722f5d74d0ebe540d7d39ea06b1b] +Feb-18 08:19:56.775 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:19:56.776 [Task submitter] INFO nextflow.Session - [7e/903d0b] Submitted process > CONPLEX_ALL (1) +Feb-18 08:20:40.566 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 4; name: HUMAN_TRANSFORMER (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/b1/69b46f4ee44257fa109faa38046f22] +Feb-18 08:20:40.586 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:20:40.587 [Task submitter] INFO nextflow.Session - [c6/ebbabc] Submitted process > GET_FINAL_METABOLITES_STATIC (2) +Feb-18 08:20:48.175 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 7; name: GET_FINAL_METABOLITES_STATIC (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/c6/ebbabc26d328ed82ed29fa3420b345] +Feb-18 08:20:48.196 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:20:48.197 [Task submitter] INFO nextflow.Session - [a8/9dfebd] Submitted process > CONPLEX_ALL (2) +Feb-18 08:21:02.719 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 6; name: CONPLEX_ALL (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/7e/903d0be26b0f46094fa4124ea7429e] +Feb-18 08:21:02.753 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:21:02.754 [Task submitter] INFO nextflow.Session - [80/5291a1] Submitted process > TISSUE_DISTRIBUTION (1) +Feb-18 08:21:02.761 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:21:02.761 [Task submitter] INFO nextflow.Session - [b1/0c641f] Submitted process > BIO_METRICS (1) +Feb-18 08:21:02.768 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:21:02.769 [Task submitter] INFO nextflow.Session - [41/ada4cf] Submitted process > NETWORK_ENRICHMENT (1) +Feb-18 08:21:13.500 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 11; name: NETWORK_ENRICHMENT (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/41/ada4cffa7038bb6a904ad7adffab70] +Feb-18 08:21:36.459 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 5 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/10/6b721ff03cf9bb6fdc069b2318e358] +~> TaskHandler[id: 1; name: HUMAN_TRANSFORMER (1); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/ac/d9d808f5e7ff0bc9ce47fce956e109] +~> TaskHandler[id: 8; name: CONPLEX_ALL (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/a8/9dfebda5ca5c8d25917ad9721d5ed6] +~> TaskHandler[id: 10; name: TISSUE_DISTRIBUTION (1); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/80/5291a1b8a9df4f84137206aab3afef] +~> TaskHandler[id: 9; name: BIO_METRICS (1); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/b1/0c641f36428a66f82eaaca889dfcc4] +Feb-18 08:21:36.580 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 9; name: BIO_METRICS (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/b1/0c641f36428a66f82eaaca889dfcc4] +Feb-18 08:21:45.303 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 8; name: CONPLEX_ALL (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/a8/9dfebda5ca5c8d25917ad9721d5ed6] +Feb-18 08:21:45.329 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:21:45.330 [Task submitter] INFO nextflow.Session - [c7/e9aec0] Submitted process > TISSUE_DISTRIBUTION (2) +Feb-18 08:21:45.337 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:21:45.337 [Task submitter] INFO nextflow.Session - [59/c2fca6] Submitted process > BIO_METRICS (2) +Feb-18 08:21:45.342 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:21:45.343 [Task submitter] INFO nextflow.Session - [85/b01dc2] Submitted process > NETWORK_ENRICHMENT (2) +Feb-18 08:21:53.257 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 13; name: NETWORK_ENRICHMENT (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/85/b01dc209496674d3dc3d3272884c01] +Feb-18 08:22:17.459 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 12; name: BIO_METRICS (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/59/c2fca62fef3a938fdbc8b0223f741d] +Feb-18 08:22:50.627 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 10; name: TISSUE_DISTRIBUTION (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/80/5291a1b8a9df4f84137206aab3afef] +Feb-18 08:23:28.694 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 14; name: TISSUE_DISTRIBUTION (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/c7/e9aec0a45e4143e662078f6751029f] +Feb-18 08:24:20.543 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: HUMAN_TRANSFORMER (1); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ac/d9d808f5e7ff0bc9ce47fce956e109] +Feb-18 08:24:20.570 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:24:20.571 [Task submitter] INFO nextflow.Session - [81/2dab34] Submitted process > GET_FINAL_METABOLITES_STATIC (3) +Feb-18 08:24:28.312 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 15; name: GET_FINAL_METABOLITES_STATIC (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/81/2dab347a00f1c46abab44c67984a92] +Feb-18 08:24:28.339 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:24:28.340 [Task submitter] INFO nextflow.Session - [c7/3c6e3d] Submitted process > CONPLEX_ALL (3) +Feb-18 08:25:56.687 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 16; name: CONPLEX_ALL (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/c7/3c6e3d019680ae4510c31fc27d9df0] +Feb-18 08:25:56.912 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:25:56.913 [Task submitter] INFO nextflow.Session - [81/f77500] Submitted process > TISSUE_DISTRIBUTION (3) +Feb-18 08:25:56.920 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:25:56.921 [Task submitter] INFO nextflow.Session - [6d/83c7a3] Submitted process > NETWORK_ENRICHMENT (3) +Feb-18 08:25:56.930 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:25:56.931 [Task submitter] INFO nextflow.Session - [60/56dbb4] Submitted process > BIO_METRICS (3) +Feb-18 08:26:05.728 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 18; name: NETWORK_ENRICHMENT (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/6d/83c7a3352024b70f27bbb97877137d] +Feb-18 08:26:36.497 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 3 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/10/6b721ff03cf9bb6fdc069b2318e358] +~> TaskHandler[id: 19; name: TISSUE_DISTRIBUTION (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/81/f775001059255636bc93e7534e6f1b] +~> TaskHandler[id: 17; name: BIO_METRICS (3); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/60/56dbb481dcd9014f733e6adcd305ac] +Feb-18 08:28:21.708 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 17; name: BIO_METRICS (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/60/56dbb481dcd9014f733e6adcd305ac] +Feb-18 08:29:23.190 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 19; name: TISSUE_DISTRIBUTION (3); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/81/f775001059255636bc93e7534e6f1b] +Feb-18 08:31:36.595 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/10/6b721ff03cf9bb6fdc069b2318e358] +Feb-18 08:36:36.600 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/10/6b721ff03cf9bb6fdc069b2318e358] +Feb-18 08:41:36.633 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/10/6b721ff03cf9bb6fdc069b2318e358] +Feb-18 08:45:15.975 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 2; name: HUMAN_TRANSFORMER (2); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/10/6b721ff03cf9bb6fdc069b2318e358] +Feb-18 08:45:15.999 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:45:16.001 [Task submitter] INFO nextflow.Session - [ca/ecd442] Submitted process > GET_FINAL_METABOLITES_STATIC (4) +Feb-18 08:45:36.006 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 20; name: GET_FINAL_METABOLITES_STATIC (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/ca/ecd44260f39786b4230f8c7740d148] +Feb-18 08:45:36.037 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:45:36.038 [Task submitter] INFO nextflow.Session - [46/a43ec7] Submitted process > CONPLEX_ALL (4) +Feb-18 08:46:36.691 [Task monitor] DEBUG n.processor.TaskPollingMonitor - !! executor local > tasks to be completed: 1 -- submitted tasks are shown below +~> TaskHandler[id: 21; name: CONPLEX_ALL (4); status: RUNNING; exit: -; error: -; workDir: /data/bugra/digital_trials/work/46/a43ec7ee9aa22e1e774cee2c12ad30] +Feb-18 08:47:29.226 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 21; name: CONPLEX_ALL (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/46/a43ec7ee9aa22e1e774cee2c12ad30] +Feb-18 08:47:29.251 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:47:29.252 [Task submitter] INFO nextflow.Session - [cc/bb7703] Submitted process > TISSUE_DISTRIBUTION (4) +Feb-18 08:47:29.261 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:47:29.262 [Task submitter] INFO nextflow.Session - [31/fe7897] Submitted process > NETWORK_ENRICHMENT (4) +Feb-18 08:47:29.273 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Feb-18 08:47:29.274 [Task submitter] INFO nextflow.Session - [4b/086a46] Submitted process > BIO_METRICS (4) +Feb-18 08:47:39.063 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 24; name: NETWORK_ENRICHMENT (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/31/fe78970d1a3fa2033c4c4ace31eeea] +Feb-18 08:50:24.140 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 22; name: TISSUE_DISTRIBUTION (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/cc/bb7703233cc2a65dbcc3a2cba4229f] +Feb-18 08:50:34.666 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 23; name: BIO_METRICS (4); status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/digital_trials/work/4b/086a4619532ee364d68e77bd33000f] +Feb-18 08:50:34.672 [main] DEBUG nextflow.Session - Session await > all processes finished +Feb-18 08:50:34.768 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Feb-18 08:50:34.768 [main] DEBUG nextflow.Session - Session await > all barriers passed +Feb-18 08:50:34.775 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'TaskFinalizer' shutdown completed (hard=false) +Feb-18 08:50:34.776 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'PublishDir' shutdown completed (hard=false) +Feb-18 08:50:34.789 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=24; failedCount=0; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=0; abortedCount=0; succeedDuration=1h 6m 51s; failedDuration=0ms; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=6; peakCpus=6; peakMemory=26 GB; ] +Feb-18 08:50:34.967 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Feb-18 08:50:35.030 [main] INFO org.pf4j.AbstractPluginManager - Stop plugin 'nf-tower@1.11.3' +Feb-18 08:50:35.030 [main] DEBUG nextflow.plugin.BasePlugin - Plugin stopped nf-tower +Feb-18 08:50:35.032 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'FileTransfer' shutdown completed (hard=false) +Feb-18 08:50:35.033 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/.nextflow.pid b/.nextflow.pid new file mode 100755 index 0000000..1447d0d --- /dev/null +++ b/.nextflow.pid @@ -0,0 +1 @@ +1195666 diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..f4bed56 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,121 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## What This Is + +Digital Trials is a Nextflow pipeline that simulates drug-protein interactions for digital clinical trials. Given a drug (as SMILES), it predicts metabolites, screens the drug and its metabolites against a proteome, performs pathway enrichment, and maps tissue distribution of interacting proteins. + +## Running the Pipeline + +```bash +# Local test run (uses params defined in main.nf) +nextflow run main.nf + +# With parameter file for cluster runs +nextflow run main.nf -params-file params/input_to_run.json + +# Kubernetes via Tower +export TOWER_ACCESS_TOKEN=68358d90995ae27fe78b4c1818f9f0097d834b00 +nextflow run main.nf -profile k8s -with-tower https://tower.stg.cluster.omic.ai/api -params-file params/input_to_run.json +``` + +## Building Containers + +```bash +# Build and tag individual containers via docker-compose +docker-compose build tissue +docker-compose build chembl +docker-compose build network + +# Images push to harbor.cluster.omic.ai/omic/digitaltrials/ +``` + +Each pipeline step has its own Dockerfile: `Dockerfile_biotransformer`, `Dockerfile_conplex`, `Dockerfile_tissue`, `Dockerfile_chembl`, `Dockerfile_network`. + +## Pipeline Architecture + +The pipeline is orchestrated in `main.nf` (entry point and parameter definitions) and composed from three module files: + +### Stage 1: Metabolite Prediction (`main_biotransformer.nf`) +- **HUMAN_TRANSFORMER** — Runs BioTransformer (Java) to predict human metabolites from input SMILES. Only `HUMAN` mode is fully implemented. +- **GET_FINAL_METABOLITES_STATIC** — Filters to terminal metabolites (not precursors), checks against local ChEMBL SQLite DB and PubChem, outputs canonical SMILES list. + +### Stage 2: Proteome Screening (`main_conplex.nf`) +- **PREPROCESS_PROTEIN** — Merges patient FASTA files and projects them into a Zarr vector store (GPU, uses `/app/project.py` inside container). +- **CONPLEX** — Screens drug + metabolite SMILES against protein Zarr DBs using ConPLex model. Runs `/app/convert.py`, `/app/screen.py`, `/app/get_round_2.py` inside the `metabolite-screen` container. Outputs drug scores and significant interactions TSVs. +- **NETWORK_ENRICHMENT** — Queries STRING DB API for pathway enrichment and protein-protein interactions from significant hits. + +### Stage 3: Tissue & Biological Properties (`main_tissue.nf`) +- **TISSUE_DISTRIBUTION** — Maps interacting proteins to tissue expression using HPA data (`drug_tissue_distribution.py`). +- **BIO_METRICS** — Aggregates biological properties across metabolites, drug scores, and interactions (`digital_patient_extract_metrics.py`). + +### Data Flow +``` +Input CSVs (SMILES+TARGET) → HUMAN_TRANSFORMER → GET_FINAL_METABOLITES_STATIC + ↓ +Patient FASTA → PREPROCESS_PROTEIN → Zarr ──→ CONPLEX (drug + metabolites vs proteome) +Pre-built Zarr ─────────────────────────↗ ↓ ↓ + NETWORK_ENRICHMENT TISSUE_DISTRIBUTION + ↓ + BIO_METRICS +``` + +Channels are joined by ligand ID (CSV `simpleName`), ensuring each drug's metabolites are matched to the correct ConPLex screening run. + +## Key Parameters (in `main.nf`) + +| Parameter | Purpose | Default | +|-----------|---------|---------| +| `params.mode` | BioTransformer mode — **use `HUMAN` only** | `HUMAN` | +| `params.threshold` | ConPLex binding score cutoff for significant interactions | `0.65` | +| `params.protein_network_threshold` | STRING DB enrichment cutoff | `0.65` | +| `params.keep_enst` | Keep per-protein Zarr results from ConPLex | `false` | +| `params.ligands` | Input directory of per-compound CSV files | — | +| `params.mutated_protein_fasta` | Directory of patient-specific FASTA files (or `blank`) | — | +| `params.protein_zarr` | Pre-built protein sequence Zarr DB | — | +| `params.chembl_db` | Path to ChEMBL SQLite database file | — | +| `params.outdir` | Output root directory | — | +| `params.bt_initial_memory` | Biotransformer starting memory (GB) | `5` | +| `params.bt_growth_memory` | Biotransformer additional memory per retry (GB) | `15` | +| `params.bt_max_retries` | Biotransformer max retry attempts | `10` | +| `params.bt_fail_action` | Biotransformer failure strategy: `'terminate'` or `'ignore'` | `'terminate'` | +| `params.conplex_initial_memory` | ConPLex starting memory (GB) | `5` | +| `params.conplex_growth_memory` | ConPLex additional memory per retry (GB) | `15` | +| `params.conplex_max_retries` | ConPLex max retry attempts | `1` | +| `params.conplex_fail_action` | ConPLex failure strategy: `'terminate'` or `'ignore'` | `'ignore'` | + +## Nextflow Gotchas + +- Params loaded from JSON are strings — use `.toInteger()` when used in resource directives (e.g., `memory`, `maxRetries`) +- `main.nf` defines all default param values; params files only need to override what they change + +## Sub-pipeline: Metabolite Screen Adaptive + +`nf_metabol_screen_adaptive/` is a standalone Nextflow pipeline for ConPLex-based metabolite screening. It has its own `main.nf`, `test.nf`, `Dockerfile`, and `nextflow.config`. Used for development/testing of the screening step independently. + +## Container Registry + +All images are at `harbor.cluster.omic.ai/omic/digitaltrials/`. Container refs in `main.nf` use sha256 digests for reproducibility (except tissue which uses version tags). When updating containers, pin to a digest or explicit version tag. + +## Input Format + +Per-compound `.csv` files named by identifier (e.g., InChIKey). 4-line key-value format: +``` +SMILES + +TARGET + +``` + +Input directories are under `/data/digital-trials-data/` (e.g., `input_to_run/`, `input_knowen_target/`, `input_new/input/`). +See also `/data/runs/docs/digital-trials-input-format.md` for format details. + +## Output Structure + +Results are organized under `{outdir}/{project_name}/`: +- `1_biotransformer/` — Raw metabolite predictions +- `1b_final_metabolites/` — Filtered terminal metabolites +- `2_conplex/` — Drug scores and significant interaction TSVs +- `3_string/` — Network enrichment and interaction TSVs +- `4_tissue_distribution/` — Tissue distribution and biological properties TSVs diff --git a/Dockerfile_biotransformer b/Dockerfile_biotransformer new file mode 100755 index 0000000..f55036c --- /dev/null +++ b/Dockerfile_biotransformer @@ -0,0 +1,71 @@ +FROM debian:bullseye-slim + +USER root + +SHELL ["/bin/bash", "-c"] +WORKDIR /home +RUN mkdir -p /home/omic +WORKDIR /home/omic +ARG DEBIAN_FRONTEND=noninteractive + +RUN apt update -y && apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + curl \ + git \ + wget \ + ca-certificates \ + default-jre \ + unzip \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh \ + && bash miniconda.sh -b -p /opt/conda \ + && rm miniconda.sh \ + && ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh \ + && echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc \ + && echo "conda activate base" >> ~/.bashrc \ + && find /opt/conda/ -follow -type f -name '*.a' -delete \ + && find /opt/conda/ -follow -type f -name '*.js.map' -delete \ + && /opt/conda/bin/conda clean -afy + +ENV PATH /opt/conda/bin:$PATH + +# main conda env (biotransformer) +RUN conda create -n biotransformer +ENV PATH="$PATH:/opt/conda/envs/biotransformer/bin" +RUN echo "source activate biotransformer" >> ~/.bashrc +RUN conda clean --all -f -y + +# Install RDKit +RUN conda install -y -n biotransformer -c conda-forge rdkit + +WORKDIR /home/omic +# RUN wget https://bitbucket.org/wishartlab/biotransformer3.0jar/get/6432cf887ed7.zip && \ +# unzip 6432cf887ed7.zip && \ +# rm 6432cf887ed7.zip && \ +# mv wishartlab-biotransformer3.0jar-6432cf887ed7 biotransformer + +# RUN git clone https://github.com/Wishartlab-openscience/Biotransformer.git && \ +# mv Biotransformer biotransformer +RUN git clone https://bitbucket.org/wishartlab/biotransformer3.0jar biotransformer && mv biotransformer/BioTransformer3.0_20230525.jar biotransformer/biotransformer +WORKDIR /home/omic/biotransformer +# RUN wget https://bitbucket.org/wishartlab/biotransformer3.0jar/raw/6432cf887ed70c7c943c2dfeb60298ccdc788d7d/BioTransformer3.0_20230525.jar && \ +# mv BioTransformer3.0_20230525.jar biotransformer && \ +# chmod +x biotransformer +ENV PATH="$PATH:/home/omic/biotransformer" + +# Create a symlink from /home/omic/biotransformer/database to /home/omic/biotransformer/btkb +RUN ln -s /home/omic/biotransformer/database /home/omic/biotransformer/btkb + +## Test +# RUN java -jar biotransformer -multiThread "2 example.csv 36000 3 1 true" + +#Download The Human Metabolome Database smiles +RUN wget https://hmdb.ca/system/downloads/current/structures.zip +RUN unzip structures.zip + + +#install pandas and requests +RUN conda install -y -n biotransformer -c conda-forge pandas requests diff --git a/Dockerfile_chembl b/Dockerfile_chembl new file mode 100644 index 0000000..0473457 --- /dev/null +++ b/Dockerfile_chembl @@ -0,0 +1,15 @@ +FROM mambaorg/micromamba:2.1.1 + +USER root + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +RUN micromamba install -n base -y -c conda-forge --channel-priority flexible \ + python=3.12 \ + numpy \ + pandas \ + rdkit \ + procps-ng + +# Note: No need for requests or chembl-downloader in the container +# since we're passing the pre-downloaded database as input \ No newline at end of file diff --git a/Dockerfile_conplex b/Dockerfile_conplex new file mode 100755 index 0000000..141c2cc --- /dev/null +++ b/Dockerfile_conplex @@ -0,0 +1,127 @@ +ARG CUDA=11.7 +FROM nvidia/cuda:${CUDA}.1-cudnn8-devel-ubuntu22.04 + +USER root +SHELL ["/bin/bash", "-c"] + +WORKDIR /home +RUN mkdir -p /home/omic +WORKDIR /home/omic + +ARG DEBIAN_FRONTEND=noninteractive +RUN apt-get update -y && apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + curl \ + git \ + wget \ + ca-certificates \ + hmmer \ + kalign \ + tzdata \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Add the NVIDIA GPG key directly +RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb +RUN dpkg -i cuda-keyring_1.0-1_all.deb && rm cuda-keyring_1.0-1_all.deb +RUN apt-get -y update && \ + apt-get install -y --no-install-recommends cuda-command-line-tools-11-7 + +RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh \ + && bash miniconda.sh -b -p /opt/conda \ + && rm miniconda.sh \ + && ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh \ + && echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc \ + && echo "conda activate base" >> ~/.bashrc \ + && find /opt/conda/ -follow -type f -name '*.a' -delete \ + && find /opt/conda/ -follow -type f -name '*.js.map' -delete \ + && /opt/conda/bin/conda clean -afy + +ENV PATH /opt/conda/bin:$PATH +RUN conda update -y -n base -c defaults conda + +# main conda env (conplex) +RUN conda create -n conplex-dti python=3.9 +ENV PATH "$PATH:/opt/conda/envs/conplex-dti/bin" +RUN echo "source activate conplex-dti" >> ~/.bashrc +RUN conda clean --all -f -y + +# main conda env (secse) +#RUN conda create --name secse -c conda-forge parallel tqdm biopandas openbabel chemprop xlrd=2 pandarallel python=3.9 perl=5.32 +#RUN conda install -y -n secse -c conda-forge pandas=1.3.5 +#RUN conda install -y -n secse -c conda-forge rdkit=2022.03.5 +#RUN echo "conda activate secse" >> ~/.bashrc +#ENV PATH="$PATH:/opt/conda/envs/secse/bin" +#ARG PATH="$PATH:/opt/conda/envs/secse/bin" + +RUN git clone https://github.com/samsledje/ConPLex.git +WORKDIR /home/omic/ConPLex + +# Install conplex +RUN apt-get -y update && apt-get install -y ca-certificates && update-ca-certificates +RUN /opt/conda/envs/conplex-dti/bin/python3 -m pip install conplex-dti +RUN conplex-dti --help + +# Package into python script for running in nextflow +COPY conplex.py /home/omic/ConPLex/conplex.py +RUN chmod +x /home/omic/ConPLex/conplex.py + +# Install pretrained models +RUN mkdir -p /home/omic/ConPLex/models +RUN wget --no-check-certificate -O /home/omic/ConPLex/models/ConPLex_v1_BindingDB.pt https://cb.csail.mit.edu/cb/conplex/data/models/BindingDB_ExperimentalValidModel.pt + +# Test +RUN conplex-dti predict --data-file /home/omic/ConPLex/tests/toy_predict.tsv --model-path /home/omic/ConPLex/models/ConPLex_v1_BindingDB.pt --outfile ./results.tsv + +#copy protein reference trascipt fasta file +COPY ensemble_reference.fasta . +COPY MANE_referent_transcipt_reference.fasta . +COPY MANE_all_transcipts.csv . +COPY get_round_2.py . +RUN chmod +x /home/omic/ConPLex/get_round_2.py +#new model weights +COPY Run_best_model_epoch46.pt /home/omic/ConPLex/models/ + + +# Fix predict.py not working on single protein-ligand complex +#COPY predict.py /home/omic/ConPLex/conplex_dti/cli/predict.py +#COPY predict.py /opt/conda/envs/conplex-dti/lib/python3.9/site-packages/conplex_dti/cli/predict.py +#RUN chmod +x /home/omic/ConPLex/conplex_dti/cli/predict.py +#RUN chmod +x /opt/conda/envs/conplex-dti/lib/python3.9/site-packages/conplex_dti/cli/predict.py + +# Clone secse +#RUN git clone https://github.com/KeenThera/SECSE.git +#RUN mv /home/omic/ConPLex/SECSE/secse /home/omic/ConPLex/secse && rm -r /home/omic/ConPLex/SECSE && rm -r /home/omic/ConPLex/secse/scoring +#COPY secse/scoring /home/omic/ConPLex/secse/scoring +#COPY secse/grow_processes.py /home/omic/ConPLex/secse/scoring/grow_processes.py +#RUN chmod +x /home/omic/ConPLex/secse/grow_processes.py +#RUN chmod +x /home/omic/ConPLex/secse/scoring/ranking.py +#RUN chmod +x /home/omic/ConPLex/secse/growing/mutation/mutation.py + +# Add missing boost +#RUN conda install -n secse -c conda-forge boost + +# Install CREM for chemical growth +#RUN git clone https://github.com/DrrDom/crem.git +#RUN /opt/conda/envs/conplex-dti/bin/python3 -m pip install crem pandas numpy + +#WORKDIR /home/omic/ConPLex +#RUN chmod -R +x /home/omic/ConPLex + +#ENV PATH="$PATH:/opt/conda/envs/secse/bin:/home/omic/ConPLex/secse" +#ENV SECSE="/home/omic/ConPLex/secse" +#ENV PYTHONPATH="PYTHONPATH=/home/omic/ConPLex/secse:/home/omic/ConPLex:/home/omic/ConPLex/crem" +#ARG PYTHONPATH="PYTHONPATH=/home/omic/ConPLex/secse:/home/omic/ConPLex:/home/omic/ConPLex/crem" + +# Package into python script for running in nextflow +#COPY conplex.py /home/omic/ConPLex/conplex.py +#RUN chmod +x /home/omic/ConPLex/conplex.py + +#Mutation file +#RUN /opt/conda/envs/conplex-dti/bin/python3 -m pip install crem +#RUN wget https://www.dropbox.com/s/4r48ohopechsd59/replacements02_sa2.db.gz?dl=0 +#RUN mv replacements02_sa2.db.gz?dl=0 replacements02_sa2.db.gz +#RUN gzip -d replacements02_sa2.db.gz +#COPY fragment_mutations.py /home/omic/ConPLex/fragment_mutations.py +#RUN chmod +x /home/omic/ConPLex/fragment_mutations.py diff --git a/Dockerfile_network b/Dockerfile_network new file mode 100644 index 0000000..3682741 --- /dev/null +++ b/Dockerfile_network @@ -0,0 +1,21 @@ +FROM mambaorg/micromamba:2.1.1 + +USER root + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +RUN micromamba install -n base -y -c conda-forge -c bioconda --channel-priority flexible \ + python=3.12 \ + numpy \ + pandas \ + scipy \ + r-base=4.3 \ + bioconductor-stringdb \ + r-tidyverse \ + r-argparser \ + r-sqldf \ + r-rsqlite \ + r-argparse \ + procps-ng + +COPY ./app_network /app \ No newline at end of file diff --git a/Dockerfile_tissue b/Dockerfile_tissue new file mode 100755 index 0000000..1c01b67 --- /dev/null +++ b/Dockerfile_tissue @@ -0,0 +1,20 @@ +# Use the specified Micromamba base image with CUDA 11.7 +FROM mambaorg/micromamba:2.1.1 + + +USER root +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + + +RUN micromamba install -y python=3.9 procps-ng pandas numpy && \ + pip install pandas numpy && \ + micromamba clean --all --yes + + +# Package into python script for running in nextflow +COPY drug_tissue_distribution.py /home/omic/drug_tissue_distribution.py + +# Copy reference files +COPY HPA_normal_ihc_data.tsv /home/omic/ +COPY MANE_all_transcipts.csv /home/omic/ +COPY digital_patient_extract_metrics.py /home/omic/ \ No newline at end of file diff --git a/Dockerfile_tissue.old b/Dockerfile_tissue.old new file mode 100755 index 0000000..d79bdd0 --- /dev/null +++ b/Dockerfile_tissue.old @@ -0,0 +1,61 @@ +ARG CUDA=11.7 +FROM nvidia/cuda:${CUDA}.1-cudnn8-devel-ubuntu22.04 + +USER root +SHELL ["/bin/bash", "-c"] + +WORKDIR /home +RUN mkdir -p /home/omic +WORKDIR /home/omic + +ARG DEBIAN_FRONTEND=noninteractive +RUN apt-get update -y && apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + curl \ + git \ + wget \ + ca-certificates \ + hmmer \ + kalign \ + tzdata \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Add the NVIDIA GPG key directly +RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb +RUN dpkg -i cuda-keyring_1.0-1_all.deb && rm cuda-keyring_1.0-1_all.deb +RUN apt-get -y update && \ + apt-get install -y --no-install-recommends cuda-command-line-tools-11-7 + +RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh \ + && bash miniconda.sh -b -p /opt/conda \ + && rm miniconda.sh \ + && ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh \ + && echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc \ + && echo "conda activate base" >> ~/.bashrc \ + && find /opt/conda/ -follow -type f -name '*.a' -delete \ + && find /opt/conda/ -follow -type f -name '*.js.map' -delete \ + && /opt/conda/bin/conda clean -afy + +ENV PATH /opt/conda/bin:$PATH +RUN conda update -y -n base -c defaults conda + +# main conda env (tissue) +RUN conda create -n tissue python=3.9 +ENV PATH "$PATH:/opt/conda/envs/tissue/bin" +RUN echo "source activate tissue" >> ~/.bashrc +RUN conda clean --all -f -y + +# Install packages +RUN apt-get -y update && apt-get install -y ca-certificates && update-ca-certificates +RUN /opt/conda/envs/tissue/bin/python3 -m pip install pandas numpy + +# Package into python script for running in nextflow +COPY drug_tissue_distribution.py /home/omic/drug_tissue_distribution.py +RUN chmod +x /home/omic/drug_tissue_distribution.py + +# copy reference file +COPY HPA_normal_ihc_data.tsv . +COPY MANE_all_transcipts.csv . +COPY digital_patient_extract_metrics.py . diff --git a/Dockerfile_tissue.old2 b/Dockerfile_tissue.old2 new file mode 100755 index 0000000..965fca0 --- /dev/null +++ b/Dockerfile_tissue.old2 @@ -0,0 +1,56 @@ +# Use the specified Micromamba base image with CUDA 11.7 +FROM mambaorg/micromamba:2.1.1-cuda11.7.1-ubuntu20.04 + + +USER root +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +# WORKDIR /home +# RUN mkdir -p /home/omic +WORKDIR /home/omic + +# Install system packages +ARG DEBIAN_FRONTEND=noninteractive +RUN micromamba install -y python=3.9 pandas numpy && \ + pip install pandas numpy && \ + micromamba clean --all --yes + +# Add the NVIDIA GPG key directly +RUN apt-get -y update \ + && apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + curl \ + git \ + wget \ + ca-certificates \ + hmmer \ + kalign \ + tzdata \ + && wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb \ + && dpkg -i cuda-keyring_1.0-1_all.deb && rm cuda-keyring_1.0-1_all.deb \ + && apt-get install -y --no-install-recommends cuda-command-line-tools-11-7 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + + +# Switch to the mamba user for micromamba operations +# USER $MAMBA_USER +# WORKDIR /home/omic + +# Install Python and packages into the base environment + +# Activate the base environment for subsequent RUN commands +# ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +# # Install Python packages with pip (now runs in the activated environment) +# RUN python -m pip install pandas numpy + +# Package into python script for running in nextflow +COPY drug_tissue_distribution.py /home/omic/drug_tissue_distribution.py +RUN chmod +x /home/omic/drug_tissue_distribution.py + +# Copy reference files +COPY HPA_normal_ihc_data.tsv . +COPY MANE_all_transcipts.csv . +COPY digital_patient_extract_metrics.py . \ No newline at end of file diff --git a/Note.txt b/Note.txt new file mode 100755 index 0000000..15cdebd --- /dev/null +++ b/Note.txt @@ -0,0 +1,5 @@ +Add options for metabolites not existing and process failed +Remove unnecessary data while process is running, take up too much memory + + +ncbiproteins_seq_exist.csv is replaced with ncbiproteins_seq_exist_reduce.csv so it will be able to fit to gitlab diff --git a/app_network/network.r b/app_network/network.r new file mode 100644 index 0000000..6f9003b --- /dev/null +++ b/app_network/network.r @@ -0,0 +1,248 @@ +#!/usr/bin/env Rscript +# +# Network enrichment and interaction analysis using STRINGdb package. +# R equivalent of the NETWORK_ENRICHMENT Nextflow process. +# + +suppressPackageStartupMessages({ + library(STRINGdb) + library(data.table) + library(argparse) +}) + +#' Main function +main <- function() { + # Parse command line arguments + parser <- ArgumentParser( + description = "Network enrichment analysis using STRINGdb package" + ) + + parser$add_argument( + "interactions_file", + type = "character", + help = "Input TSV file with significant interactions (conplex output)" + ) + + parser$add_argument( + "--threshold", + type = "double", + default = 0.65, + help = "ConPlex score threshold for protein network" + ) + + parser$add_argument( + "--max-proteins", + type = "integer", + default = 450L, + help = "Maximum number of proteins to analyze (STRING API limitation)" + ) + + parser$add_argument( + "--output-dir", + type = "character", + default = ".", + help = "Output directory for results" + ) + + parser$add_argument( + "--species", + type = "integer", + default = 9606L, + help = "NCBI taxon ID (default: 9606 for Homo sapiens)" + ) + + parser$add_argument( + "--score-threshold", + type = "integer", + default = 400L, + help = "STRING combined score threshold (0-1000, default: 400)" + ) + + args <- parser$parse_args() + + # Initialize STRINGdb + cat("Initializing STRINGdb...\n") + string_db <- STRINGdb$new( + version = "12.0", + species = args$species, + score_threshold = args$score_threshold, + network_type = "full", + input_directory = "/app" + ) + + # Load interaction data + cat(sprintf("Loading interaction data from %s...\n", args$interactions_file)) + interaction_data <- fread(args$interactions_file, sep = "\t") + interaction_data <- interaction_data[order(-conplex_score)] + + # Remove duplicates and limit (replicates Nextflow logic) + interaction_data <- unique(interaction_data, by = "transcipt") + + if (nrow(interaction_data) > args$max_proteins) { + cat(sprintf("Limiting to top %d proteins (STRING API limitation)\n", args$max_proteins)) + interaction_data <- interaction_data[1:args$max_proteins] + } + + # Filter by threshold + filtered_data <- interaction_data[conplex_score > args$threshold] + cat(sprintf("Found %d proteins above threshold %.2f\n", + nrow(filtered_data), args$threshold)) + + if (nrow(filtered_data) == 0) { + stop("ERROR: No proteins above threshold!") + } + + # Prepare data for STRING mapping + gene_list <- data.frame( + gene = filtered_data$transcipt, + stringsAsFactors = FALSE + ) + + # Map genes to STRING IDs + cat("Mapping genes to STRING database...\n") + mapped <- string_db$map(gene_list, "gene", removeUnmappedRows = TRUE) + + if (nrow(mapped) == 0) { + stop("ERROR: No genes could be mapped to STRING database!") + } + + cat(sprintf("Successfully mapped %d/%d genes to STRING IDs\n", + nrow(mapped), nrow(gene_list))) + + # Get STRING IDs + string_ids <- mapped$STRING_id + + # Get enrichment analysis + cat("\nPerforming enrichment analysis...\n") + enrichment_results <- string_db$get_enrichment(string_ids, category = "all", methodMT = "fdr") + + if (nrow(enrichment_results) == 0) { + cat("WARNING: No enrichment results found\n") + enrichment_df <- data.table() + } else { + cat(sprintf("Found %d enriched terms\n", nrow(enrichment_results))) + + # Convert to data.table and rename columns to match Python output + enrichment_df <- as.data.table(enrichment_results) + + # The STRINGdb enrichment output has columns: + # category, term, number_of_genes, number_of_genes_in_background, + # ncbiTaxonId, inputGenes, preferredNames, p_value, fdr, description + # This should already match the Python output format + } + + # Get network interactions with detailed scores + cat("\nExtracting network interactions...\n") + interactions <- string_db$get_interactions(string_ids) + + if (nrow(interactions) == 0) { + cat("WARNING: No interactions found\n") + interactions_df <- data.table() + } else { + cat(sprintf("Found %d protein-protein interactions\n", nrow(interactions))) + + # Convert to data.table + interactions_df <- as.data.table(interactions) + + # The get_interactions() function returns: + # from, to, combined_score, and potentially other columns + # We need to get detailed scores separately + + # Get the interaction network with all score types + # Use get_png to access the full network data including detailed scores + network_image <- string_db$plot_network(string_ids) + + # Alternative: Access the graph directly for detailed scores + # The STRINGdb object stores the full network internally + graph <- string_db$get_graph() + + # Extract edge attributes which contain detailed scores + if (!is.null(graph)) { + edge_data <- igraph::as_data_frame(graph, what = "edges") + edge_dt <- as.data.table(edge_data) + + # Filter for our query proteins + edge_dt <- edge_dt[from %in% string_ids & to %in% string_ids] + + # Rename columns to match Python output format + if ("from" %in% names(edge_dt)) setnames(edge_dt, "from", "stringId_A") + if ("to" %in% names(edge_dt)) setnames(edge_dt, "to", "stringId_B") + + # Add preferred names + edge_dt[, preferredName_A := string_db$get_aliases(stringId_A)$alias[1], by = stringId_A] + edge_dt[, preferredName_B := string_db$get_aliases(stringId_B)$alias[1], by = stringId_B] + + # Normalize scores to 0-1 range if they're in 0-1000 range + score_cols <- c("combined_score", "neighborhood", "fusion", "cooccurence", + "coexpression", "experimental", "database", "textmining") + target_cols <- c("score", "nscore", "fscore", "pscore", + "ascore", "escore", "dscore", "tscore") + + for (i in seq_along(score_cols)) { + src <- score_cols[i] + tgt <- target_cols[i] + if (src %in% names(edge_dt)) { + # Check if scores are in 0-1000 range (need normalization) + max_val <- max(edge_dt[[src]], na.rm = TRUE) + if (max_val > 1) { + edge_dt[, (tgt) := get(src) / 1000.0] + } else { + edge_dt[, (tgt) := get(src)] + } + } + } + + # Add ncbiTaxonId + edge_dt[, ncbiTaxonId := args$species] + + # Select and order columns to match Python output + output_cols <- c("stringId_A", "stringId_B", "preferredName_A", "preferredName_B", + "ncbiTaxonId", "score", "nscore", "fscore", "pscore", + "ascore", "escore", "dscore", "tscore") + + # Keep only columns that exist + existing_cols <- intersect(output_cols, names(edge_dt)) + interactions_df <- edge_dt[, ..existing_cols] + + } else { + # Fallback: use the interactions data from get_interactions() + # Rename columns to match output format + if ("from" %in% names(interactions_df)) { + setnames(interactions_df, "from", "stringId_A") + } + if ("to" %in% names(interactions_df)) { + setnames(interactions_df, "to", "stringId_B") + } + if ("combined_score" %in% names(interactions_df)) { + interactions_df[, score := combined_score / 1000.0] + } + + interactions_df[, ncbiTaxonId := args$species] + } + } + + # Generate output filename + output_name <- gsub("_significant_interactions", "", + tools::file_path_sans_ext(basename(args$interactions_file))) + + # Create output directory if needed + dir.create(args$output_dir, showWarnings = FALSE, recursive = TRUE) + + # Save results + enrichment_file <- file.path(args$output_dir, + sprintf("%s_network_enrichment.tsv", output_name)) + interactions_file <- file.path(args$output_dir, + sprintf("%s_network_interactions.tsv", output_name)) + + fwrite(enrichment_df, enrichment_file, sep = "\t") + fwrite(interactions_df, interactions_file, sep = "\t") + + cat("\nResults saved:\n") + cat(sprintf(" Enrichment: %s\n", enrichment_file)) + cat(sprintf(" Interactions: %s\n", interactions_file)) +} + +# Run main function +if (!interactive()) { + main() +} \ No newline at end of file diff --git a/app_network/network2.r b/app_network/network2.r new file mode 100644 index 0000000..7359401 --- /dev/null +++ b/app_network/network2.r @@ -0,0 +1,376 @@ +#!/usr/bin/env Rscript +# +# Offline network enrichment and interaction analysis using local STRING-DB files. +# Replicates the NETWORK_ENRICHMENT Nextflow process without internet connection. +# R equivalent of the Python script using STRINGdb package. +# + +suppressPackageStartupMessages({ + library(STRINGdb) + library(data.table) + library(argparse) +}) + +#' Load STRING-DB data from local files +#' +#' @param string_db_dir Directory containing STRING-DB files +#' @return List containing mappings and data frames +load_string_data <- function(string_db_dir) { + cat("Loading STRING-DB files...\n") + + # Load alias mapping (ENST -> ENSP) + aliases <- fread( + file.path(string_db_dir, "9606.protein.aliases.enst.v12.0.tsv"), + sep = "\t", + header = FALSE, + col.names = c("string_protein_id", "alias", "source") + ) + + enst_to_ensp <- aliases[source == "Ensembl_transcript", + .(string_protein_id, alias)] + setkey(enst_to_ensp, alias) + + # Load protein info (for preferred names) + info <- fread( + file.path(string_db_dir, "9606.protein.info.v12.0.txt"), + sep = "\t", + header = FALSE, + col.names = c("string_protein_id", "preferred_name", "protein_size", "annotation") + ) + setkey(info, string_protein_id) + + # Load protein links - USE DETAILED FILE + links <- fread( + file.path(string_db_dir, "9606.protein.links.detailed.v12.0.txt"), + sep = " " + ) + + # Load enrichment terms + enrichment <- fread( + file.path(string_db_dir, "9606.protein.enrichment.terms.v12.0.txt"), + sep = "\t", + header = FALSE, + col.names = c("string_protein_id", "category", "term", "description") + ) + + cat(sprintf("Loaded %d ENST->ENSP mappings\n", nrow(enst_to_ensp))) + cat(sprintf("Loaded %d protein-protein interactions\n", nrow(links))) + cat(sprintf("Loaded %d enrichment annotations\n", nrow(enrichment))) + + list( + enst_to_ensp = enst_to_ensp, + ensp_to_name = info, + links = links, + enrichment = enrichment + ) +} + +#' Perform enrichment analysis using Fisher's exact test +#' +#' @param query_proteins Vector of ENSP protein IDs +#' @param enrichment_df Data table with enrichment annotations +#' @param ensp_to_name Data table mapping ENSP to preferred names +#' @param ensp_to_input_map Named vector mapping ENSP back to ENST +#' @return Data table with enrichment results +perform_enrichment_analysis <- function(query_proteins, enrichment_df, + ensp_to_name, ensp_to_input_map) { + query_set <- unique(query_proteins) + n_query <- length(query_set) + + cat(sprintf("Analyzing enrichment for %d proteins...\n", n_query)) + + results_list <- list() + + # Group by category + categories <- unique(enrichment_df$category) + + for (cat in categories) { + cat_group <- enrichment_df[category == cat] + + # Background: Total unique proteins annotated in this category + category_universe <- unique(cat_group$string_protein_id) + background_size <- length(category_universe) + + # Iterate over terms within this category + terms <- unique(cat_group$term) + + for (tm in terms) { + term_group <- cat_group[term == tm] + term_proteins <- unique(term_group$string_protein_id) + + # Intersection: proteins in both query and term + intersection <- intersect(query_set, term_proteins) + n_intersection <- length(intersection) + + if (n_intersection == 0) next + + # Background term count + n_term_background <- length(term_proteins) + + # Fisher's exact test + # Contingency table: + # In term Not in term + # In query a b + # Not in query c d + + a <- n_intersection + b <- n_query - a + c <- n_term_background - a + d <- background_size - n_term_background - b + + # Ensure no negative values + if (c < 0 || d < 0) next + + # One-sided test for enrichment + contingency_matrix <- matrix(c(a, b, c, d), nrow = 2, byrow = TRUE) + fisher_result <- fisher.test(contingency_matrix, alternative = "greater") + pvalue <- fisher_result$p.value + + # Get description + description <- term_group$description[1] + + # Get input genes (map ENSP back to ENST input) + intersection_sorted <- sort(intersection) + + input_genes_list <- sapply(intersection_sorted, function(ensp) { + if (ensp %in% names(ensp_to_input_map)) { + ensp_to_input_map[ensp] + } else { + ensp + } + }) + + input_genes <- paste(input_genes_list, collapse = ",") + + # Get preferred names + preferred_names_list <- sapply(intersection_sorted, function(p) { + name <- ensp_to_name[string_protein_id == p, preferred_name] + if (length(name) > 0) name[1] else strsplit(p, "\\.")[[1]][length(strsplit(p, "\\.")[[1]])] + }) + preferred_names <- paste(preferred_names_list, collapse = ",") + + results_list[[length(results_list) + 1]] <- data.table( + category = cat, + term = tm, + number_of_genes = n_intersection, + number_of_genes_in_background = n_term_background, + ncbiTaxonId = 9606, + inputGenes = input_genes, + preferredNames = preferred_names, + p_value = pvalue, + description = description + ) + } + } + + if (length(results_list) == 0) { + return(data.table()) + } + + # Combine results + results_df <- rbindlist(results_list) + + # Benjamini-Hochberg FDR correction + results_df <- results_df[order(p_value)] + n_tests <- nrow(results_df) + results_df[, fdr := p_value * n_tests / seq_len(n_tests)] + results_df[fdr > 1.0, fdr := 1.0] + + # Reorder columns to match API output + setcolorder(results_df, c( + "category", "term", "number_of_genes", "number_of_genes_in_background", + "ncbiTaxonId", "inputGenes", "preferredNames", "p_value", "fdr", "description" + )) + + return(results_df) +} + +#' Extract network interactions for query proteins +#' +#' @param query_proteins Vector of ENSP protein IDs +#' @param links_df Data table with protein-protein interactions +#' @param ensp_to_name Data table mapping ENSP to preferred names +#' @return Data table with network interactions +get_network_interactions <- function(query_proteins, links_df, ensp_to_name) { + query_set <- unique(query_proteins) + + # Filter links where both proteins are in query set + interactions <- links_df[protein1 %in% query_set & protein2 %in% query_set] + + if (nrow(interactions) == 0) { + return(data.table()) + } + + # Normalize scores (STRING files are integers 0-1000, API is float 0-1) + score_cols <- c("combined_score", "neighborhood", "fusion", "cooccurence", + "coexpression", "experimental", "database", "textmining") + target_cols <- c("score", "nscore", "fscore", "pscore", + "ascore", "escore", "dscore", "tscore") + + for (i in seq_along(score_cols)) { + src <- score_cols[i] + tgt <- target_cols[i] + if (src %in% names(interactions)) { + interactions[, (tgt) := get(src) / 1000.0] + } else { + interactions[, (tgt) := 0.0] + } + } + + # Add preferred names + interactions[, preferredName_A := sapply(protein1, function(p) { + name <- ensp_to_name[string_protein_id == p, preferred_name] + if (length(name) > 0) name[1] else strsplit(p, "\\.")[[1]][length(strsplit(p, "\\.")[[1]])] + })] + + interactions[, preferredName_B := sapply(protein2, function(p) { + name <- ensp_to_name[string_protein_id == p, preferred_name] + if (length(name) > 0) name[1] else strsplit(p, "\\.")[[1]][length(strsplit(p, "\\.")[[1]])] + })] + + # Rename columns to match STRING API output + setnames(interactions, c("protein1", "protein2"), c("stringId_A", "stringId_B")) + + interactions[, ncbiTaxonId := 9606] + + # Select and order columns to match original output + column_order <- c( + "stringId_A", "stringId_B", "preferredName_A", "preferredName_B", + "ncbiTaxonId", "score", "nscore", "fscore", "pscore", + "ascore", "escore", "dscore", "tscore" + ) + + interactions <- interactions[, ..column_order] + + return(interactions) +} + +#' Main function +main <- function() { + # Parse command line arguments + parser <- ArgumentParser( + description = "Offline network enrichment analysis using local STRING-DB files" + ) + + parser$add_argument( + "interactions_file", + type = "character", + help = "Input TSV file with significant interactions (conplex output)" + ) + + parser$add_argument( + "--string-db-dir", + type = "character", + default = "/app", + help = "Directory containing STRING-DB files" + ) + + parser$add_argument( + "--threshold", + type = "double", + default = 0.65, + help = "ConPlex score threshold for protein network" + ) + + parser$add_argument( + "--max-proteins", + type = "integer", + default = 450L, + help = "Maximum number of proteins to analyze" + ) + + parser$add_argument( + "--output-dir", + type = "character", + default = ".", + help = "Output directory for results" + ) + + args <- parser$parse_args() + + # Load STRING-DB data + string_data <- load_string_data(args$string_db_dir) + + # Load interaction data + cat(sprintf("\nLoading interaction data from %s...\n", args$interactions_file)) + interaction_data <- fread(args$interactions_file, sep = "\t") + interaction_data <- interaction_data[order(-conplex_score)] + + # Remove duplicates and limit + # Replicates Nextflow logic: drops duplicates on transcript BEFORE limit + interaction_data <- unique(interaction_data, by = "transcipt") + + if (nrow(interaction_data) > args$max_proteins) { + cat(sprintf("Limiting to top %d proteins\n", args$max_proteins)) + interaction_data <- interaction_data[1:args$max_proteins] + } + + # Filter by threshold + filtered_data <- interaction_data[conplex_score > args$threshold] + cat(sprintf("Found %d proteins above threshold %.2f\n", + nrow(filtered_data), args$threshold)) + + # Map ENST to ENSP and keep track of mapping for output + enst_list <- filtered_data$transcipt + ensp_list <- character() + ensp_to_input_map <- character() + + for (enst in enst_list) { + ensp <- string_data$enst_to_ensp[alias == enst, string_protein_id] + if (length(ensp) > 0) { + ensp <- ensp[1] + ensp_list <- c(ensp_list, ensp) + ensp_to_input_map[ensp] <- enst + } + } + + cat(sprintf("Mapped %d ENST IDs to ENSP IDs\n", length(ensp_list))) + + if (length(ensp_list) == 0) { + stop("ERROR: No valid ENSP mappings found!") + } + + # Perform enrichment analysis + cat("\nPerforming enrichment analysis...\n") + enrichment_results <- perform_enrichment_analysis( + ensp_list, + string_data$enrichment, + string_data$ensp_to_name, + ensp_to_input_map + ) + cat(sprintf("Found %d enriched terms\n", nrow(enrichment_results))) + + # Get network interactions + cat("\nExtracting network interactions...\n") + network_interactions <- get_network_interactions( + ensp_list, + string_data$links, + string_data$ensp_to_name + ) + cat(sprintf("Found %d protein-protein interactions\n", nrow(network_interactions))) + + # Generate output filename + output_name <- gsub("_significant_interactions", "", + tools::file_path_sans_ext(basename(args$interactions_file))) + + # Create output directory if needed + dir.create(args$output_dir, showWarnings = FALSE, recursive = TRUE) + + # Save results + enrichment_file <- file.path(args$output_dir, + sprintf("%s_network_enrichment.tsv", output_name)) + interactions_file <- file.path(args$output_dir, + sprintf("%s_network_interactions.tsv", output_name)) + + fwrite(enrichment_results, enrichment_file, sep = "\t") + fwrite(network_interactions, interactions_file, sep = "\t") + + cat("\nResults saved:\n") + cat(sprintf(" Enrichment: %s\n", enrichment_file)) + cat(sprintf(" Interactions: %s\n", interactions_file)) +} + +# Run main function +if (!interactive()) { + main() +} \ No newline at end of file diff --git a/app_network/network_enrich.py b/app_network/network_enrich.py new file mode 100644 index 0000000..662728b --- /dev/null +++ b/app_network/network_enrich.py @@ -0,0 +1,283 @@ +#!/usr/bin/env python3 +""" +Offline network enrichment and interaction analysis using local STRING-DB files. +Replicates the NETWORK_ENRICHMENT Nextflow process without internet connection. +""" + +import pandas as pd +import argparse +from pathlib import Path +from scipy import stats +import numpy as np + + +def load_string_data(string_db_dir): + """Load all required STRING-DB files.""" + string_db_dir = Path(string_db_dir) + + print("Loading STRING-DB files...") + + # Load alias mapping (ENST -> ENSP) + aliases = pd.read_csv( + string_db_dir / "9606.protein.aliases.enst.v12.0.tsv", + sep='\t', + comment='#', + names=['string_protein_id', 'alias', 'source'] + ) + enst_to_ensp = aliases[aliases['source'] == 'Ensembl_transcript'].set_index('alias')['string_protein_id'].to_dict() + + # Load protein info (for preferred names) + info = pd.read_csv( + string_db_dir / "9606.protein.info.v12.0.txt", + sep='\t', + comment='#', + names=['string_protein_id', 'preferred_name', 'protein_size', 'annotation'] + ) + ensp_to_name = info.set_index('string_protein_id')['preferred_name'].to_dict() + + # Load protein links + # Load protein links - USE DETAILED FILE + links = pd.read_csv( + string_db_dir / "9606.protein.links.detailed.v12.0.txt", + sep=' ' + ) + + # Load enrichment terms + enrichment = pd.read_csv( + string_db_dir / "9606.protein.enrichment.terms.v12.0.txt", + sep='\t', + comment='#', + names=['string_protein_id', 'category', 'term', 'description'] + ) + + print(f"Loaded {len(enst_to_ensp)} ENST->ENSP mappings") + print(f"Loaded {len(links)} protein-protein interactions") + print(f"Loaded {len(enrichment)} enrichment annotations") + + return enst_to_ensp, ensp_to_name, links, enrichment + + +def perform_enrichment_analysis(query_proteins, enrichment_df, ensp_to_name, background_size=20000): + """ + Perform enrichment analysis similar to STRING-DB API. + Uses Fisher's exact test for each term. + """ + results = [] + + query_set = set(query_proteins) + n_query = len(query_set) + + # Group by category and term + for (category, term), group in enrichment_df.groupby(['category', 'term']): + term_proteins = set(group['string_protein_id']) + + # Intersection: proteins in both query and term + intersection = query_set & term_proteins + n_intersection = len(intersection) + + if n_intersection == 0: + continue + + # Background: total proteins with this term + n_term_background = len(term_proteins) + + # Fisher's exact test + # Contingency table: + # In term Not in term + # In query a b + # Not in query c d + + a = n_intersection + b = n_query - a + c = n_term_background - a + d = background_size - n_term_background - b + + # One-sided test for enrichment + oddsratio, pvalue = stats.fisher_exact([[a, b], [c, d]], alternative='greater') + + # Get description (take first) + description = group['description'].iloc[0] + + # Get gene names + intersection_list = list(intersection) + input_genes = ','.join(intersection_list) + preferred_names = ','.join([ensp_to_name.get(p, p.split('.')[-1]) for p in intersection_list]) + + results.append({ + 'category': category, + 'term': term, + 'number_of_genes': n_intersection, + 'number_of_genes_in_background': n_term_background, + 'ncbiTaxonId': 9606, + 'inputGenes': input_genes, + 'preferredNames': preferred_names, + 'p_value': pvalue, + 'description': description + }) + + if not results: + return pd.DataFrame() + + # Create DataFrame and calculate FDR + results_df = pd.DataFrame(results) + results_df = results_df.sort_values('p_value') + + # Benjamini-Hochberg FDR correction + n_tests = len(results_df) + results_df['fdr'] = results_df['p_value'] * n_tests / (np.arange(1, n_tests + 1)) + results_df['fdr'] = results_df['fdr'].clip(upper=1.0) + + # Sort by p-value + results_df = results_df.sort_values('p_value').reset_index(drop=True) + + return results_df + + +def get_network_interactions(query_proteins, links_df, ensp_to_name): + """ + Extract network interactions for query proteins. + Converts combined_score to normalized scores similar to STRING API. + """ + query_set = set(query_proteins) + + # Filter links where both proteins are in query set + interactions = links_df[ + links_df['protein1'].isin(query_set) & + links_df['protein2'].isin(query_set) + ].copy() + + if len(interactions) == 0: + return pd.DataFrame() + + interactions['score'] = interactions['combined_score'] / 1000.0 + interactions['nscore'] = interactions['neighborhood'] / 1000.0 + interactions['fscore'] = interactions['fusion'] / 1000.0 + interactions['pscore'] = interactions['cooccurence'] / 1000.0 # Note: typo in STRING file + interactions['ascore'] = interactions['coexpression'] / 1000.0 + interactions['escore'] = interactions['experimental'] / 1000.0 + interactions['dscore'] = interactions['database'] / 1000.0 + interactions['tscore'] = interactions['textmining'] / 1000.0 + + # Add preferred names + interactions['preferredName_A'] = interactions['protein1'].map( + lambda x: ensp_to_name.get(x, x.split('.')[-1]) + ) + interactions['preferredName_B'] = interactions['protein2'].map( + lambda x: ensp_to_name.get(x, x.split('.')[-1]) + ) + + # Rename columns to match STRING API output + interactions = interactions.rename(columns={ + 'protein1': 'stringId_A', + 'protein2': 'stringId_B' + }) + + interactions['ncbiTaxonId'] = 9606 + + # Select and order columns to match original output + column_order = [ + 'stringId_A', 'stringId_B', 'preferredName_A', 'preferredName_B', + 'ncbiTaxonId', 'score', 'nscore', 'fscore', 'pscore', + 'ascore', 'escore', 'dscore', 'tscore' + ] + + interactions = interactions[column_order].reset_index(drop=True) + + return interactions + + +def main(): + parser = argparse.ArgumentParser( + description='Offline network enrichment analysis using local STRING-DB files' + ) + parser.add_argument( + 'interactions_file', + type=str, + help='Input TSV file with significant interactions (conplex output)' + ) + parser.add_argument( + '--string-db-dir', + type=str, + default='/data/bugra/digital_trials/app_network', + help='Directory containing STRING-DB files' + ) + parser.add_argument( + '--threshold', + type=float, + default=0.0, + help='ConPlex score threshold for protein network' + ) + parser.add_argument( + '--max-proteins', + type=int, + default=450, + help='Maximum number of proteins to analyze' + ) + parser.add_argument( + '--output-dir', + type=str, + default='.', + help='Output directory for results' + ) + + args = parser.parse_args() + + # Load STRING-DB data + enst_to_ensp, ensp_to_name, links, enrichment = load_string_data(args.string_db_dir) + + # Load interaction data + print(f"\nLoading interaction data from {args.interactions_file}...") + interaction_data = pd.read_csv(args.interactions_file, sep='\t') + interaction_data = interaction_data.sort_values('conplex_score', ascending=False) + + # Remove duplicates and limit + interaction_data = interaction_data.drop_duplicates('transcipt') + if interaction_data.shape[0] > args.max_proteins: + print(f"Limiting to top {args.max_proteins} proteins") + interaction_data = interaction_data.iloc[:args.max_proteins] + + # Filter by threshold + filtered_data = interaction_data[interaction_data['conplex_score'] > args.threshold] + print(f"Found {len(filtered_data)} proteins above threshold {args.threshold}") + + # Convert ENST to ENSP + enst_list = filtered_data['transcipt'].tolist() + ensp_list = [enst_to_ensp.get(enst) for enst in enst_list] + ensp_list = [e for e in ensp_list if e is not None] + + print(f"Mapped {len(ensp_list)} ENST IDs to ENSP IDs") + + if len(ensp_list) == 0: + print("ERROR: No valid ENSP mappings found!") + return + + # Perform enrichment analysis + print("\nPerforming enrichment analysis...") + enrichment_results = perform_enrichment_analysis(ensp_list, enrichment, ensp_to_name) + print(f"Found {len(enrichment_results)} enriched terms") + + # Get network interactions + print("\nExtracting network interactions...") + network_interactions = get_network_interactions(ensp_list, links, ensp_to_name) + print(f"Found {len(network_interactions)} protein-protein interactions") + + # Generate output filename + input_path = Path(args.interactions_file) + output_name = input_path.stem.replace('_significant_interactions', '') + output_dir = Path(args.output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + + # Save results + enrichment_file = output_dir / f"{output_name}_network_enrichment.tsv" + interactions_file = output_dir / f"{output_name}_network_interactions.tsv" + + enrichment_results.to_csv(enrichment_file, sep='\t') + network_interactions.to_csv(interactions_file, sep='\t') + + print(f"\nResults saved:") + print(f" Enrichment: {enrichment_file}") + print(f" Interactions: {interactions_file}") + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/app_network/network_enrich_offline.py b/app_network/network_enrich_offline.py new file mode 100644 index 0000000..64b4059 --- /dev/null +++ b/app_network/network_enrich_offline.py @@ -0,0 +1,332 @@ +#!/usr/bin/env python3 +""" +Offline network enrichment and interaction analysis using local STRING-DB files. +Replicates the NETWORK_ENRICHMENT Nextflow process without internet connection. +""" + +import pandas as pd +import argparse +from pathlib import Path +from scipy import stats +import numpy as np + + +def load_string_data(string_db_dir): + """Load all required STRING-DB files.""" + string_db_dir = Path(string_db_dir) + + print("Loading STRING-DB files...") + + # Load alias mapping (ENST -> ENSP) + aliases = pd.read_csv( + string_db_dir / "9606.protein.aliases.enst.v12.0.tsv", + sep='\t', + comment='#', + names=['string_protein_id', 'alias', 'source'] + ) + enst_to_ensp = aliases[aliases['source'] == 'Ensembl_transcript'].set_index('alias')['string_protein_id'].to_dict() + + # Load protein info (for preferred names) + info = pd.read_csv( + string_db_dir / "9606.protein.info.v12.0.txt", + sep='\t', + comment='#', + names=['string_protein_id', 'preferred_name', 'protein_size', 'annotation'] + ) + ensp_to_name = info.set_index('string_protein_id')['preferred_name'].to_dict() + + # Load protein links - USE DETAILED FILE + links = pd.read_csv( + string_db_dir / "9606.protein.links.detailed.v12.0.txt", + sep=' ' + ) + + # Load enrichment terms + # Note: STRING files usually don't have headers, or have specific comment lines. + # We ensure we capture string_protein_id, category, term, description + enrichment = pd.read_csv( + string_db_dir / "9606.protein.enrichment.terms.v12.0.txt", + sep='\t', + comment='#', + names=['string_protein_id', 'category', 'term', 'description'] + ) + + print(f"Loaded {len(enst_to_ensp)} ENST->ENSP mappings") + print(f"Loaded {len(links)} protein-protein interactions") + print(f"Loaded {len(enrichment)} enrichment annotations") + + return enst_to_ensp, ensp_to_name, links, enrichment + + +def perform_enrichment_analysis(query_proteins, enrichment_df, ensp_to_name, ensp_to_input_map): + """ + Perform enrichment analysis similar to STRING-DB API. + Uses Fisher's exact test for each term. + """ + results = [] + + query_set = set(query_proteins) + n_query = len(query_set) + + print(f"Analyzing enrichment for {n_query} proteins...") + + # Group by category to calculate background size per category + for category, cat_group in enrichment_df.groupby('category'): + + # Background: Total unique proteins annotated in this category + category_universe = set(cat_group['string_protein_id']) + background_size = len(category_universe) + + # Now iterate over terms within this category + for term, group in cat_group.groupby('term'): + term_proteins = set(group['string_protein_id']) + + # Intersection: proteins in both query and term + intersection = query_set & term_proteins + n_intersection = len(intersection) + + if n_intersection == 0: + continue + + # Background term count + n_term_background = len(term_proteins) + + # Fisher's exact test + # Contingency table: + # In term Not in term + # In query a b + # Not in query c d + + a = n_intersection + b = n_query - a + c = n_term_background - a + d = background_size - n_term_background - b + + # Ensure no negative values (safety check) + if c < 0 or d < 0: + continue + + # One-sided test for enrichment + oddsratio, pvalue = stats.fisher_exact([[a, b], [c, d]], alternative='greater') + + # Get description (take first) + description = group['description'].iloc[0] + + # Get input genes (map ENSP back to ENST input) + intersection_list = sorted(list(intersection)) + + # Reconstruct the 'inputGenes' list using the original ENST IDs + # If an ENSP maps to multiple ENSTs in the input, we list them all + input_genes_list = [] + for ensp in intersection_list: + if ensp in ensp_to_input_map: + # Append the ENST that mapped to this ENSP + input_genes_list.append(ensp_to_input_map[ensp]) + else: + input_genes_list.append(ensp) + + input_genes = ','.join(input_genes_list) + + preferred_names = ','.join([ensp_to_name.get(p, p.split('.')[-1]) for p in intersection_list]) + + results.append({ + 'category': category, + 'term': term, + 'number_of_genes': n_intersection, + 'number_of_genes_in_background': n_term_background, + 'ncbiTaxonId': 9606, + 'inputGenes': input_genes, + 'preferredNames': preferred_names, + 'p_value': pvalue, + 'description': description + }) + + if not results: + return pd.DataFrame() + + # Create DataFrame and calculate FDR + results_df = pd.DataFrame(results) + + # Benjamini-Hochberg FDR correction + results_df = results_df.sort_values('p_value') + n_tests = len(results_df) + results_df['fdr'] = results_df['p_value'] * n_tests / (np.arange(1, n_tests + 1)) + results_df['fdr'] = results_df['fdr'].clip(upper=1.0) + + # Sort by p-value + results_df = results_df.sort_values('p_value').reset_index(drop=True) + + # Reorder columns to match API output + # API Order: category, term, number_of_genes, number_of_genes_in_background, ncbiTaxonId, inputGenes, preferredNames, p_value, fdr, description + cols = [ + 'category', 'term', 'number_of_genes', 'number_of_genes_in_background', + 'ncbiTaxonId', 'inputGenes', 'preferredNames', 'p_value', 'fdr', 'description' + ] + results_df = results_df[cols] + + return results_df + + +def get_network_interactions(query_proteins, links_df, ensp_to_name): + """ + Extract network interactions for query proteins. + Converts combined_score to normalized scores similar to STRING API. + """ + query_set = set(query_proteins) + + # Filter links where both proteins are in query set + interactions = links_df[ + links_df['protein1'].isin(query_set) & + links_df['protein2'].isin(query_set) + ].copy() + + if len(interactions) == 0: + return pd.DataFrame() + + # Normalize scores (STRING files are integers 0-1000, API is float 0-1) + score_cols = ['combined_score', 'neighborhood', 'fusion', 'cooccurence', + 'coexpression', 'experimental', 'database', 'textmining'] + + target_cols = ['score', 'nscore', 'fscore', 'pscore', + 'ascore', 'escore', 'dscore', 'tscore'] + + for src, tgt in zip(score_cols, target_cols): + if src in interactions.columns: + interactions[tgt] = interactions[src] / 1000.0 + else: + interactions[tgt] = 0.0 + + # Add preferred names + interactions['preferredName_A'] = interactions['protein1'].map( + lambda x: ensp_to_name.get(x, x.split('.')[-1]) + ) + interactions['preferredName_B'] = interactions['protein2'].map( + lambda x: ensp_to_name.get(x, x.split('.')[-1]) + ) + + # Rename columns to match STRING API output + interactions = interactions.rename(columns={ + 'protein1': 'stringId_A', + 'protein2': 'stringId_B' + }) + + interactions['ncbiTaxonId'] = 9606 + + # Select and order columns to match original output + column_order = [ + 'stringId_A', 'stringId_B', 'preferredName_A', 'preferredName_B', + 'ncbiTaxonId', 'score', 'nscore', 'fscore', 'pscore', + 'ascore', 'escore', 'dscore', 'tscore' + ] + + interactions = interactions[column_order].reset_index(drop=True) + + return interactions + + +def main(): + parser = argparse.ArgumentParser( + description='Offline network enrichment analysis using local STRING-DB files' + ) + parser.add_argument( + 'interactions_file', + type=str, + help='Input TSV file with significant interactions (conplex output)' + ) + parser.add_argument( + '--string-db-dir', + type=str, + default='/data/bugra/digital_trials/app_network', + help='Directory containing STRING-DB files' + ) + parser.add_argument( + '--threshold', + type=float, + default=0.65, + help='ConPlex score threshold for protein network' + ) + parser.add_argument( + '--max-proteins', + type=int, + default=450, + help='Maximum number of proteins to analyze' + ) + parser.add_argument( + '--output-dir', + type=str, + default='.', + help='Output directory for results' + ) + + args = parser.parse_args() + + # Load STRING-DB data + enst_to_ensp, ensp_to_name, links, enrichment = load_string_data(args.string_db_dir) + + # Load interaction data + print(f"\nLoading interaction data from {args.interactions_file}...") + interaction_data = pd.read_csv(args.interactions_file, sep='\t') + interaction_data = interaction_data.sort_values('conplex_score', ascending=False) + + # Remove duplicates and limit + # Replicates Nextflow logic: drops duplicates on transcript BEFORE limit + interaction_data = interaction_data.drop_duplicates('transcipt') + if interaction_data.shape[0] > args.max_proteins: + print(f"Limiting to top {args.max_proteins} proteins") + interaction_data = interaction_data.iloc[:args.max_proteins] + + # Filter by threshold + filtered_data = interaction_data[interaction_data['conplex_score'] > args.threshold] + print(f"Found {len(filtered_data)} proteins above threshold {args.threshold}") + + # Map ENST to ENSP and keep track of mapping for output + enst_list = filtered_data['transcipt'].tolist() + ensp_list = [] + ensp_to_input_map = {} # Map ENSP back to ENST for output generation + + for enst in enst_list: + ensp = enst_to_ensp.get(enst) + if ensp: + ensp_list.append(ensp) + # We map ENSP back to the ENST. If multiple ENSTs map to one ENSP, + # this simple dict keeps the last one. + # However, since input is deduped on transcript, this is mostly 1-to-1 + # for the query set. + ensp_to_input_map[ensp] = enst + + print(f"Mapped {len(ensp_list)} ENST IDs to ENSP IDs") + + if len(ensp_list) == 0: + print("ERROR: No valid ENSP mappings found!") + return + + # Perform enrichment analysis + print("\nPerforming enrichment analysis...") + enrichment_results = perform_enrichment_analysis(ensp_list, enrichment, ensp_to_name, ensp_to_input_map) + print(f"Found {len(enrichment_results)} enriched terms") + + # Get network interactions + print("\nExtracting network interactions...") + network_interactions = get_network_interactions(ensp_list, links, ensp_to_name) + print(f"Found {len(network_interactions)} protein-protein interactions") + + # Generate output filename + input_path = Path(args.interactions_file) + output_name = input_path.stem.replace('_significant_interactions', '') + output_dir = Path(args.output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + + # Save results + enrichment_file = output_dir / f"{output_name}_network_enrichment.tsv" + interactions_file = output_dir / f"{output_name}_network_interactions.tsv" + + enrichment_results.to_csv(enrichment_file, sep='\t', index=False) + network_interactions.to_csv(interactions_file, sep='\t', index=False) + + print(f"\nResults saved:") + print(f" Enrichment: {enrichment_file}") + print(f" Interactions: {interactions_file}") + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/conplex.py b/conplex.py new file mode 100755 index 0000000..45dff64 --- /dev/null +++ b/conplex.py @@ -0,0 +1,145 @@ +import argparse +import pandas as pd +import os +import numpy as np +import re +import subprocess +import sys + +def parse_fasta_seq(fasta_file): + try: + with open(fasta_file, 'r') as file: + return [line.strip() for line in file if not line.startswith('>')] + except Exception as e: + raise ValueError(f"Error parsing FASTA file: {fasta_file}") from e + +def parse_fasta_name(fasta_file): + try: + with open(fasta_file, 'r') as file: + return [line.strip()[1:] for line in file if line.startswith('>')] + except Exception as e: + raise ValueError(f"Error parsing FASTA file: {fasta_file}") from e + +def create_tsv_frags(fastas, smis, screening_batch_size): + protein_sequence_list = parse_fasta_seq(fastas) + protein_name_list = parse_fasta_name(fastas) + full_df = pd.read_csv(smis, delimiter='\t', names=['smiles', 'chem_id']) + + #splits = int(np.ceil((len(protein_sequence_list))/screening_batch_size)) + #protein_sequence_list = np.array_split(protein_sequence_list, splits) + #protein_name_list = np.array_split(protein_name_list, splits) + + try: + [full_df.assign(protein_id = [protein_id]*full_df.shape[0]).assign(protein_sequence = [protein_sequence]*full_df.shape[0])[['protein_id', 'chem_id', 'protein_sequence', 'smiles']].to_csv(f"{protein_id}.tsv", sep='\t', header=False, index=False) for protein_id, protein_sequence in zip(protein_name_list,protein_sequence_list)] + tsv_files = [f"{protein_id}.tsv" for protein_id in protein_name_list] + return tsv_files + + except Exception as e: + print(f"Failed to process files: {e}") + raise + + +def screen_frags(tsv_files): + #[subprocess.run(["conplex-dti", "predict","--data-file", tsv_file,"--model-path", "/home/omic/ConPLex/models/ConPLex_v1_BindingDB.pt","--outfile", f"{os.path.splitext(os.path.basename(tsv_file))[0]}_results.tsv"]) for tsv_file in tsv_files] + [subprocess.run(["conplex-dti", "predict","--data-file", tsv_file,"--model-path", "/home/omic/ConPLex/models/Run_best_model_epoch46.pt","--outfile", f"{os.path.splitext(os.path.basename(tsv_file))[0]}_results.tsv"]) for tsv_file in tsv_files] + scores_files = [f"{os.path.splitext(os.path.basename(tsv_file))[0]}_results.tsv" for tsv_file in tsv_files] + #scores_files = [] + #for tsv_file in tsv_files: + #base_name = os.path.splitext(os.path.basename(tsv_file))[0] + #scores_file = f"{base_name}_scores.tsv" + + #subprocess.run([ + # "conplex-dti", "predict", + # "--data-file", tsv_file, + # "--model-path", "/home/omic/ConPLex/models/ConPLex_v1_BindingDB.pt", + # "--outfile", f"{base_name}_results.tsv" + #]) + + #with open(scores_file, 'w') as f: + # f.write("chem_id\tprotein_id\tscore\n") + + #with open(f"{base_name}_results.tsv", 'r') as results_file, open(f"{base_name}_temp.tsv", 'w') as temp_file: + # for line in results_file: + # fields = line.strip().split('\t') + # temp_file.write('\t'.join(fields) + '\n') + + #merged_df = pd.read_csv(f"{base_name}_temp.tsv", sep='\t', names=['chem_id', 'protein_id', 'score']) + #tsv_df = pd.read_csv(tsv_file, sep='\t', names=['protein_id', 'chem_id', 'sequence', 'smiles']) + + #merged_df = merged_df.merge(tsv_df[['chem_id', 'smiles']], on='chem_id') + #merged_df.to_csv(scores_file, sep='\t', index=False) + + #os.remove(f"{base_name}_temp.tsv") + #scores_files.append(scores_file) + return scores_files + +def collect_frags(scores_files, fasta_file, outdir, split_write_df = 'no'): + def concatenate_dataframes(file_list): + df_list = [] + header = None + for i, file in enumerate(file_list): + if os.path.getsize(file) > 0: + if i == 0: + df = pd.read_csv(file, sep='\t', index_col=None) + if df.columns[0] == 'chem_id': + header = df.columns + else: + df = pd.read_csv(file, sep='\t', index_col=None, header=None) + df.columns = ['chem_id', 'protein_id', 'score', 'smiles'] + else: + df = pd.read_csv(file, sep='\t', index_col=None, header=None) + if header is not None: + df.columns = header + df_list.append(df) + else: + print(f"Skipping empty file: {file}") + if df_list: + concatenated_df = pd.concat(df_list, ignore_index=True) + return concatenated_df + else: + return pd.DataFrame() + + scores_df = concatenate_dataframes(scores_files) + + if not scores_df.empty: + score_column_index = 2 if 'score' not in scores_df.columns else 'score' + scores_df[score_column_index] = pd.to_numeric(scores_df[score_column_index], errors='coerce') + scores_df = scores_df.dropna(subset=[score_column_index]) + sorted_scores_df = scores_df.sort_values(by=score_column_index, ascending=False) + if 'score' not in scores_df.columns: + sorted_scores_df.columns = ['chem_id', 'protein_id', 'score', 'hit', 'smiles'] + + base_name = os.path.splitext(os.path.basename(fasta_file))[0] + all_scores_file = os.path.join(outdir, f"{base_name}_all_scores.tsv") + sorted_scores_df.to_csv(all_scores_file, sep='\t', index=False, header=True) + + else: + print("No score files found or all score files are empty.") + + with open(fasta_file, 'r') as fasta: + fasta_lines = fasta.readlines() + fasta_sequence = fasta_lines[1].strip() if len(fasta_lines) > 1 else '' + + if not scores_df.empty: + df = sorted_scores_df + header = df.columns.tolist() + + if split_write_df == 'yes': + for index, row in df.iterrows(): + row_df = pd.DataFrame([row], columns=header) + csv_filename = f"{row['complex_name'].replace(' ', '-')}_hit.csv" + row_df.to_csv(os.path.join(outdir, csv_filename), index=False) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Process and screen fragments.") + parser.add_argument("--fastas", required=True, help="Path to the FASTA file.") + parser.add_argument("--smis", required=True, help="Path to the SMILES file.") + parser.add_argument("--screening_batch_size", type=int, default=100000, help="Batch size for screening.") + parser.add_argument("--outdir", default="output", help="Output directory.") + parser.add_argument("--split_write_df", default="no", help="Write all complexes in separate files") + + args = parser.parse_args() + + tsv_files = create_tsv_frags(args.fastas, args.smis, args.screening_batch_size) + scores_files = screen_frags(tsv_files) + #collect_frags(scores_files, args.fastas, args.outdir, args.split_write_df) diff --git a/digital-trial/Dockerfile_biotransformer b/digital-trial/Dockerfile_biotransformer new file mode 100644 index 0000000..f55036c --- /dev/null +++ b/digital-trial/Dockerfile_biotransformer @@ -0,0 +1,71 @@ +FROM debian:bullseye-slim + +USER root + +SHELL ["/bin/bash", "-c"] +WORKDIR /home +RUN mkdir -p /home/omic +WORKDIR /home/omic +ARG DEBIAN_FRONTEND=noninteractive + +RUN apt update -y && apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + curl \ + git \ + wget \ + ca-certificates \ + default-jre \ + unzip \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh \ + && bash miniconda.sh -b -p /opt/conda \ + && rm miniconda.sh \ + && ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh \ + && echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc \ + && echo "conda activate base" >> ~/.bashrc \ + && find /opt/conda/ -follow -type f -name '*.a' -delete \ + && find /opt/conda/ -follow -type f -name '*.js.map' -delete \ + && /opt/conda/bin/conda clean -afy + +ENV PATH /opt/conda/bin:$PATH + +# main conda env (biotransformer) +RUN conda create -n biotransformer +ENV PATH="$PATH:/opt/conda/envs/biotransformer/bin" +RUN echo "source activate biotransformer" >> ~/.bashrc +RUN conda clean --all -f -y + +# Install RDKit +RUN conda install -y -n biotransformer -c conda-forge rdkit + +WORKDIR /home/omic +# RUN wget https://bitbucket.org/wishartlab/biotransformer3.0jar/get/6432cf887ed7.zip && \ +# unzip 6432cf887ed7.zip && \ +# rm 6432cf887ed7.zip && \ +# mv wishartlab-biotransformer3.0jar-6432cf887ed7 biotransformer + +# RUN git clone https://github.com/Wishartlab-openscience/Biotransformer.git && \ +# mv Biotransformer biotransformer +RUN git clone https://bitbucket.org/wishartlab/biotransformer3.0jar biotransformer && mv biotransformer/BioTransformer3.0_20230525.jar biotransformer/biotransformer +WORKDIR /home/omic/biotransformer +# RUN wget https://bitbucket.org/wishartlab/biotransformer3.0jar/raw/6432cf887ed70c7c943c2dfeb60298ccdc788d7d/BioTransformer3.0_20230525.jar && \ +# mv BioTransformer3.0_20230525.jar biotransformer && \ +# chmod +x biotransformer +ENV PATH="$PATH:/home/omic/biotransformer" + +# Create a symlink from /home/omic/biotransformer/database to /home/omic/biotransformer/btkb +RUN ln -s /home/omic/biotransformer/database /home/omic/biotransformer/btkb + +## Test +# RUN java -jar biotransformer -multiThread "2 example.csv 36000 3 1 true" + +#Download The Human Metabolome Database smiles +RUN wget https://hmdb.ca/system/downloads/current/structures.zip +RUN unzip structures.zip + + +#install pandas and requests +RUN conda install -y -n biotransformer -c conda-forge pandas requests diff --git a/digital-trial/Dockerfile_conplex b/digital-trial/Dockerfile_conplex new file mode 100644 index 0000000..141c2cc --- /dev/null +++ b/digital-trial/Dockerfile_conplex @@ -0,0 +1,127 @@ +ARG CUDA=11.7 +FROM nvidia/cuda:${CUDA}.1-cudnn8-devel-ubuntu22.04 + +USER root +SHELL ["/bin/bash", "-c"] + +WORKDIR /home +RUN mkdir -p /home/omic +WORKDIR /home/omic + +ARG DEBIAN_FRONTEND=noninteractive +RUN apt-get update -y && apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + curl \ + git \ + wget \ + ca-certificates \ + hmmer \ + kalign \ + tzdata \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Add the NVIDIA GPG key directly +RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb +RUN dpkg -i cuda-keyring_1.0-1_all.deb && rm cuda-keyring_1.0-1_all.deb +RUN apt-get -y update && \ + apt-get install -y --no-install-recommends cuda-command-line-tools-11-7 + +RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh \ + && bash miniconda.sh -b -p /opt/conda \ + && rm miniconda.sh \ + && ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh \ + && echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc \ + && echo "conda activate base" >> ~/.bashrc \ + && find /opt/conda/ -follow -type f -name '*.a' -delete \ + && find /opt/conda/ -follow -type f -name '*.js.map' -delete \ + && /opt/conda/bin/conda clean -afy + +ENV PATH /opt/conda/bin:$PATH +RUN conda update -y -n base -c defaults conda + +# main conda env (conplex) +RUN conda create -n conplex-dti python=3.9 +ENV PATH "$PATH:/opt/conda/envs/conplex-dti/bin" +RUN echo "source activate conplex-dti" >> ~/.bashrc +RUN conda clean --all -f -y + +# main conda env (secse) +#RUN conda create --name secse -c conda-forge parallel tqdm biopandas openbabel chemprop xlrd=2 pandarallel python=3.9 perl=5.32 +#RUN conda install -y -n secse -c conda-forge pandas=1.3.5 +#RUN conda install -y -n secse -c conda-forge rdkit=2022.03.5 +#RUN echo "conda activate secse" >> ~/.bashrc +#ENV PATH="$PATH:/opt/conda/envs/secse/bin" +#ARG PATH="$PATH:/opt/conda/envs/secse/bin" + +RUN git clone https://github.com/samsledje/ConPLex.git +WORKDIR /home/omic/ConPLex + +# Install conplex +RUN apt-get -y update && apt-get install -y ca-certificates && update-ca-certificates +RUN /opt/conda/envs/conplex-dti/bin/python3 -m pip install conplex-dti +RUN conplex-dti --help + +# Package into python script for running in nextflow +COPY conplex.py /home/omic/ConPLex/conplex.py +RUN chmod +x /home/omic/ConPLex/conplex.py + +# Install pretrained models +RUN mkdir -p /home/omic/ConPLex/models +RUN wget --no-check-certificate -O /home/omic/ConPLex/models/ConPLex_v1_BindingDB.pt https://cb.csail.mit.edu/cb/conplex/data/models/BindingDB_ExperimentalValidModel.pt + +# Test +RUN conplex-dti predict --data-file /home/omic/ConPLex/tests/toy_predict.tsv --model-path /home/omic/ConPLex/models/ConPLex_v1_BindingDB.pt --outfile ./results.tsv + +#copy protein reference trascipt fasta file +COPY ensemble_reference.fasta . +COPY MANE_referent_transcipt_reference.fasta . +COPY MANE_all_transcipts.csv . +COPY get_round_2.py . +RUN chmod +x /home/omic/ConPLex/get_round_2.py +#new model weights +COPY Run_best_model_epoch46.pt /home/omic/ConPLex/models/ + + +# Fix predict.py not working on single protein-ligand complex +#COPY predict.py /home/omic/ConPLex/conplex_dti/cli/predict.py +#COPY predict.py /opt/conda/envs/conplex-dti/lib/python3.9/site-packages/conplex_dti/cli/predict.py +#RUN chmod +x /home/omic/ConPLex/conplex_dti/cli/predict.py +#RUN chmod +x /opt/conda/envs/conplex-dti/lib/python3.9/site-packages/conplex_dti/cli/predict.py + +# Clone secse +#RUN git clone https://github.com/KeenThera/SECSE.git +#RUN mv /home/omic/ConPLex/SECSE/secse /home/omic/ConPLex/secse && rm -r /home/omic/ConPLex/SECSE && rm -r /home/omic/ConPLex/secse/scoring +#COPY secse/scoring /home/omic/ConPLex/secse/scoring +#COPY secse/grow_processes.py /home/omic/ConPLex/secse/scoring/grow_processes.py +#RUN chmod +x /home/omic/ConPLex/secse/grow_processes.py +#RUN chmod +x /home/omic/ConPLex/secse/scoring/ranking.py +#RUN chmod +x /home/omic/ConPLex/secse/growing/mutation/mutation.py + +# Add missing boost +#RUN conda install -n secse -c conda-forge boost + +# Install CREM for chemical growth +#RUN git clone https://github.com/DrrDom/crem.git +#RUN /opt/conda/envs/conplex-dti/bin/python3 -m pip install crem pandas numpy + +#WORKDIR /home/omic/ConPLex +#RUN chmod -R +x /home/omic/ConPLex + +#ENV PATH="$PATH:/opt/conda/envs/secse/bin:/home/omic/ConPLex/secse" +#ENV SECSE="/home/omic/ConPLex/secse" +#ENV PYTHONPATH="PYTHONPATH=/home/omic/ConPLex/secse:/home/omic/ConPLex:/home/omic/ConPLex/crem" +#ARG PYTHONPATH="PYTHONPATH=/home/omic/ConPLex/secse:/home/omic/ConPLex:/home/omic/ConPLex/crem" + +# Package into python script for running in nextflow +#COPY conplex.py /home/omic/ConPLex/conplex.py +#RUN chmod +x /home/omic/ConPLex/conplex.py + +#Mutation file +#RUN /opt/conda/envs/conplex-dti/bin/python3 -m pip install crem +#RUN wget https://www.dropbox.com/s/4r48ohopechsd59/replacements02_sa2.db.gz?dl=0 +#RUN mv replacements02_sa2.db.gz?dl=0 replacements02_sa2.db.gz +#RUN gzip -d replacements02_sa2.db.gz +#COPY fragment_mutations.py /home/omic/ConPLex/fragment_mutations.py +#RUN chmod +x /home/omic/ConPLex/fragment_mutations.py diff --git a/digital-trial/Dockerfile_tissue b/digital-trial/Dockerfile_tissue new file mode 100755 index 0000000..91ccdba --- /dev/null +++ b/digital-trial/Dockerfile_tissue @@ -0,0 +1,60 @@ +ARG CUDA=11.7 +FROM nvidia/cuda:${CUDA}.1-cudnn8-devel-ubuntu22.04 + +USER root +SHELL ["/bin/bash", "-c"] + +WORKDIR /home +RUN mkdir -p /home/omic +WORKDIR /home/omic + +ARG DEBIAN_FRONTEND=noninteractive +RUN apt-get update -y && apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + curl \ + git \ + wget \ + ca-certificates \ + hmmer \ + kalign \ + tzdata \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Add the NVIDIA GPG key directly +RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb +RUN dpkg -i cuda-keyring_1.0-1_all.deb && rm cuda-keyring_1.0-1_all.deb +RUN apt-get -y update && \ + apt-get install -y --no-install-recommends cuda-command-line-tools-11-7 + +RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh \ + && bash miniconda.sh -b -p /opt/conda \ + && rm miniconda.sh \ + && ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh \ + && echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc \ + && echo "conda activate base" >> ~/.bashrc \ + && find /opt/conda/ -follow -type f -name '*.a' -delete \ + && find /opt/conda/ -follow -type f -name '*.js.map' -delete \ + && /opt/conda/bin/conda clean -afy + +ENV PATH /opt/conda/bin:$PATH +RUN conda update -y -n base -c defaults conda + +# main conda env (tissue) +RUN conda create -n tissue python=3.9 +ENV PATH "$PATH:/opt/conda/envs/tissue/bin" +RUN echo "source activate tissue" >> ~/.bashrc +RUN conda clean --all -f -y + +# Install packages +RUN apt-get -y update && apt-get install -y ca-certificates && update-ca-certificates +RUN /opt/conda/envs/tissue/bin/python3 -m pip install pandas numpy + +# Package into python script for running in nextflow +COPY drug_tissue_distribution.py /home/omic/drug_tissue_distribution.py +RUN chmod +x /home/omic/drug_tissue_distribution.py + +# copy reference file +COPY HPA_normal_ihc_data.tsv . +COPY MANE_all_transcipts.csv . diff --git a/digital-trial/Note.txt b/digital-trial/Note.txt new file mode 100644 index 0000000..15cdebd --- /dev/null +++ b/digital-trial/Note.txt @@ -0,0 +1,5 @@ +Add options for metabolites not existing and process failed +Remove unnecessary data while process is running, take up too much memory + + +ncbiproteins_seq_exist.csv is replaced with ncbiproteins_seq_exist_reduce.csv so it will be able to fit to gitlab diff --git a/digital-trial/Phase1-2proteins.tsv b/digital-trial/Phase1-2proteins.tsv new file mode 100644 index 0000000..6f7731c --- /dev/null +++ b/digital-trial/Phase1-2proteins.tsv @@ -0,0 +1,217 @@ +MoleculeType Uniprot Symbol +Phase1 P22760 AADAC +Phase1 P08684 CYP3A4 +Phase1 Q96SQ9 CYP2S1 +Phase1 P10635 CYP2D6 +Phase1 Q8TAV3 CYP2W1 +Phase1 Q9HB55 CYP3A43 +Phase1 Q5TCH4 CYP4A22 +Phase1 Q6NT55 CYP4F22 +Phase1 P13584 CYP4B1 +Phase1 Q02928 CYP4A11 +Phase1 P78329 CYP4F2 +Phase1 Q08477 CYP4F3 +Phase1 Q9HBI6 CYP4F11 +Phase1 Q7Z449 CYP2U1 +Phase1 Q9UNU6 CYP8B1 +Phase1 Q16647 PTGIS +Phase1 P98187 CYP4F8 +Phase1 P24557 TBXAS1 +Phase1 Q9HCS2 CYP4F12 +Phase1 P22680 CYP7A1 +Phase1 O75881 CYP7B1 +Phase1 P19793 RXRA +Phase1 Q15788 NCOA1 +Phase1 Q96RI1 NR1H4 +Phase1 Q15596 NCOA2 +Phase1 P19099 CYP11B2 +Phase1 P11511 CYP19A1 +Phase1 Q16678 CYP1B1 +Phase1 A9YTQ3 AHRR +Phase1 P27540 ARNT +Phase1 Q9HBZ2 ARNT2 +Phase1 P35869 AHR +Phase1 P08686 CYP21A2 +Phase1 P10109 FDX1 +Phase1 Q6P4F2 FDX2 +Phase1 P05108 CYP11A1 +Phase1 P22570 FDXR +Phase1 P15538 CYP11B1 +Phase1 P01189 POMC +Phase1 Q9NYL5 CYP39A1 +Phase1 Q16850 CYP51A1 +Phase1 Q6ZWL3 CYP4V2 +Phase1 Q02318 CYP27A1 +Phase1 Q9Y6A2 CYP46A1 +Phase1 P20853 CYP2A7 +Phase1 P20813 CYP2B6 +Phase1 Q16696 CYP2A13 +Phase1 P24903 CYP2F1 +Phase1 P51589 CYP2J2 +Phase1 P05181 CYP2E1 +Phase1 P11509 CYP2A6 +Phase1 P33260 CYP2C18 +Phase1 P11712 CYP2C9 +Phase1 P33261 CYP2C19 +Phase1 P10632 CYP2C8 +Phase1 P20815 CYP3A5 +Phase1 P24462 CYP3A7 +Phase1 P05177 CYP1A2 +Phase1 P04798 CYP1A1 +Phase1 P16435 POR +Phase1 Q6V0L0 CYP26C1 +Phase1 Q9NR63 CYP26B1 +Phase1 O43174 CYP26A1 +Phase1 Q6VVX0 CYP2R1 +Phase1 Q07973 CYP24A1 +Phase1 O15528 CYP27B1 +Phase1 Q9NUB1 ACSS1 +Phase1 Q9NR19 ACSS2 +Phase1 P07327 ADH1A +Phase1 P00325 ADH1B +Phase1 P08319 ADH4 +Phase1 P00326 ADH1C +Phase1 P28332 ADH6 +Phase1 P40394 ADH7 +Phase1 P05091 ALDH2 +Phase1 P00352 ALDH1A1 +Phase1 P11766 ADH5 +Phase1 P30837 ALDH1B1 +Phase1 Q86WA6 BPHL +Phase1 P23219 PTGS1 +Phase1 P19801 AOC1 +Phase1 P31513 FMO3 +Phase1 Q01740 FMO1 +Phase1 Q99518 FMO2 +Phase1 Q969Z3 MTARC2 +Phase1 P00387 CYB5R3 +Phase1 Q5VT66 MTARC1 +Phase1 O43169 CYB5B +Phase1 Q6QHF9 PAOX +Phase1 Q9NWM0-3 SMOX +Phase1 P27338 MAOB +Phase1 P21397 MAOA +Phase1 Q15185 PTGES3 +Phase1 P08238 HSP90AB1 +Phase1 O00170 AIP +Phase1 P16083 NQO2 +Phase1 P23141 CES1 +Phase1 O00748 CES2 +Phase1 P30838 ALDH3A1 +Phase1 P07099 EPHX1 +Phase1 Q6UWW8 CES3 +Phase1 Q96DG6 CMBL +Phase1 O75106 AOC2 +Phase1 O75828 CBR3 +Phase1 Q16853 AOC3 +Phase2 P18440 NAT1 +Phase2 P11245 NAT2 +Phase2 P05177 CYP1A2 +Phase2 P23526 AHCY +Phase2 Q9HBK9 AS3MT +Phase2 Q99707 MTR +Phase2 Q9UBK8 MTRR +Phase2 P21964 COMT +Phase2 P78417 GSTO1 +Phase2 P40261 NNMT +Phase2 Q9Y5N5 N6AMT1 +Phase2 Q9UI30 TRMT112 +Phase2 P51580 TPMT +Phase2 Q00266 MAT1A +Phase2 P31153 MAT2A +Phase2 Q9NZL9 MAT2B +Phase2 Q68CK6 ACSM2B +Phase2 Q08AH1 ACSM1 +Phase2 Q8WU03 GLYATL2 +Phase2 Q5SZD4 GLYATL3 +Phase2 Q969I3 GLYATL1 +Phase2 Q6IB77 GLYAT +Phase2 P0C7M7 ACSM4 +Phase2 Q08AH3 ACSM2A +Phase2 Q6NUN0 ACSM5 +Phase2 P50225 SULT1A1 +Phase2 O00204-1 SULT2B1 +Phase2 P50226 SULT1A2 +Phase2 O75897 SULT1C4 +Phase2 Q9BR01 SULT4A1 +Phase2 O00204-2 SULT2B1 +Phase2 P49888 SULT1E1 +Phase2 Q96IU4 ABHD14B +Phase2 O00338 SULT1C2 +Phase2 P0DMM9 SULT1A3 +Phase2 Q06520 SULT2A1 +Phase2 O43704 SULT1B1 +Phase2 Q6IMI4 SULT6B1 +Phase2 Q9NX62 BPNT2 +Phase2 Q8TB61 SLC35B2 +Phase2 Q9H1N7 SLC35B3 +Phase2 P50443 SLC26A2 +Phase2 Q9H2B4 SLC26A1 +Phase2 O43252 PAPSS1 +Phase2 O95340 PAPSS2 +Phase2 P0DMN0 SULT1A4 +Phase2 O95861 BPNT1 +Phase2 O60704 TPST2 +Phase2 O60507 TPST1 +Phase2 Q9NZ53 PODXL2 +Phase2 O75223 GGCT +Phase2 Q96KP4 CNDP2 +Phase2 Q6P531 GGT6 +Phase2 P36269 GGT5 +Phase2 A6NGU5 GGT3P +Phase2 Q9UJ14 GGT7 +Phase2 P19440 GGT1 +Phase2 P48637 GSS +Phase2 O14841 OPLAH +Phase2 P48506 GCLC +Phase2 P48507 GCLM +Phase2 Q8WUX2 CHAC2 +Phase2 Q9BUX1 CHAC1 +Phase2 P0CG29 GSTT2 +Phase2 Q7RTV2 GSTA5 +Phase2 O15217 GSTA4 +Phase2 O60760 HPGDS +Phase2 P09211 GSTP1 +Phase2 P0CG30 GSTT2B +Phase2 Q9H4Y5 GSTO2 +Phase2 P21266 GSTM3 +Phase2 P30711 GSTT1 +Phase2 P09488 GSTM1 +Phase2 Q16772 GSTA3 +Phase2 Q03013 GSTM4 +Phase2 O43708 GSTZ1 +Phase2 P09210 GSTA2 +Phase2 P08263 GSTA1 +Phase2 P28161 GSTM2 +Phase2 P46439 GSTM5 +Phase2 Q9Y2Q3 GSTK1 +Phase2 P10620 MGST1 +Phase2 O14880 MGST3 +Phase2 Q99735 MGST2 +Phase2 P10768 ESD +Phase2 P14550 AKR1A1 +Phase2 P0DTE4 UGT2A1 +Phase2 P0DTE5 UGT2A1 +Phase2 Q9BY64 UGT2B28 +Phase2 P35504 UGT1A5 +Phase2 P36537 UGT2B10 +Phase2 O75310 UGT2B11 +Phase2 Q9HAW7 UGT1A7 +Phase2 O75795 UGT2B17 +Phase2 P16662 UGT2B7 +Phase2 Q9HAW9 UGT1A8 +Phase2 Q6NUS8 UGT3A1 +Phase2 P35503 UGT1A3 +Phase2 O60656 UGT1A9 +Phase2 P54855 UGT2B15 +Phase2 P06133 UGT2B4 +Phase2 P22310 UGT1A4 +Phase2 Q6UWM9 UGT2A3 +Phase2 Q3SY77 UGT3A2 +Phase2 P22309 UGT1A1 +Phase2 P19224 UGT1A6 +Phase2 Q9NUJ1 ABHD10 +Phase2 Q9NTN3 SLC35D1 +Phase2 Q16851 UGP2 +Phase2 O60701 UGDH +Phase2 Q9HAW8 UGT1A10 diff --git a/digital-trial/README.md b/digital-trial/README.md new file mode 100644 index 0000000..6769df4 --- /dev/null +++ b/digital-trial/README.md @@ -0,0 +1,42 @@ +# Digital Trial Pipeline +## v1 steps +| Step | Status | Model | Input | Output | Notes | +| ---- | ------ | ----- | ----- | ------ | ----- | +|1. Metabolite Prediction | done | biotransformer | SMILES | DRUG_out.txt | intermediate step | +|2. Drug & metabolite - screening against patient proteome | done | ConPlex | patient.fasta from digital patient step 3 (vcf2prot); "DRUG_out.txt" | "patientID_DRUG_significant_interactions.tsv" | intermediate step - pairs are sorted by scores and filtered for next step +|3. Biological processes/Pathway enrichment analysis | done | stringDB API | "patientID_DRUG_significant_interactions.tsv" | DRUG_patientID_network_enrichment.tsv; DRUG_patientID_network_interactions.tsv | biological processes/pathways for proteins that bind to the drug or metabolites - to use ML model to summarise output +|4. Drug localization | | | | | + + +### Pipeline steps descriptions and tasks + +1. Metabolite Prediction + - predicted metabolites of input drug + - filtered out intermediate metabolites and excluded from subsequent steps + +2. Drug/Metabolite screen against patient proteome + - columns 2 & 3 being a pair (SMILES-ENST#) and column 4 with corresponding score for the pair in each row + - UI tasks + - [ ] allow user to input target [Ensembl ID] of test drug and we show score of interaction as main interactions; add following description: + +##### +| Score | Interaction probability | +| > 0.9 | Excellent | +| 0.8 - 0.9 | Acceptable | +| < 0.8 | Highly unlikely | + - [ ] add a slider for adjusting the cutoff score (set default cutoff on slider to 0.75) + - [ ] show the significant interactions as table for top 20 drugs/metabolites against proteins ordered by scores below the main interaction + +3. Biological processes/Pathway enrichment + - Is the drug strongly and specifically interacting with the target and/or do we have a lot of drug or metabolite off-target effects + - [ ] create ML model to create summary description using "XXX_network_enrichment.tsv" + +4. Drug localization + - which organs/tissues are the interacting proteins usually localised, Human Protein Atlas tissue-enhanced protein lists for tissue proportion estimate. Heat map of proteins of interest expressed in each tissue. + - [ ] get list of protein expressed in which tissue from HPA and upload to gitlab + +___________________________________ + +## v2 planned steps +5. Drug clearance + - mutations in Phase1/2 proteins diff --git a/digital-trial/conplex.py b/digital-trial/conplex.py new file mode 100755 index 0000000..45dff64 --- /dev/null +++ b/digital-trial/conplex.py @@ -0,0 +1,145 @@ +import argparse +import pandas as pd +import os +import numpy as np +import re +import subprocess +import sys + +def parse_fasta_seq(fasta_file): + try: + with open(fasta_file, 'r') as file: + return [line.strip() for line in file if not line.startswith('>')] + except Exception as e: + raise ValueError(f"Error parsing FASTA file: {fasta_file}") from e + +def parse_fasta_name(fasta_file): + try: + with open(fasta_file, 'r') as file: + return [line.strip()[1:] for line in file if line.startswith('>')] + except Exception as e: + raise ValueError(f"Error parsing FASTA file: {fasta_file}") from e + +def create_tsv_frags(fastas, smis, screening_batch_size): + protein_sequence_list = parse_fasta_seq(fastas) + protein_name_list = parse_fasta_name(fastas) + full_df = pd.read_csv(smis, delimiter='\t', names=['smiles', 'chem_id']) + + #splits = int(np.ceil((len(protein_sequence_list))/screening_batch_size)) + #protein_sequence_list = np.array_split(protein_sequence_list, splits) + #protein_name_list = np.array_split(protein_name_list, splits) + + try: + [full_df.assign(protein_id = [protein_id]*full_df.shape[0]).assign(protein_sequence = [protein_sequence]*full_df.shape[0])[['protein_id', 'chem_id', 'protein_sequence', 'smiles']].to_csv(f"{protein_id}.tsv", sep='\t', header=False, index=False) for protein_id, protein_sequence in zip(protein_name_list,protein_sequence_list)] + tsv_files = [f"{protein_id}.tsv" for protein_id in protein_name_list] + return tsv_files + + except Exception as e: + print(f"Failed to process files: {e}") + raise + + +def screen_frags(tsv_files): + #[subprocess.run(["conplex-dti", "predict","--data-file", tsv_file,"--model-path", "/home/omic/ConPLex/models/ConPLex_v1_BindingDB.pt","--outfile", f"{os.path.splitext(os.path.basename(tsv_file))[0]}_results.tsv"]) for tsv_file in tsv_files] + [subprocess.run(["conplex-dti", "predict","--data-file", tsv_file,"--model-path", "/home/omic/ConPLex/models/Run_best_model_epoch46.pt","--outfile", f"{os.path.splitext(os.path.basename(tsv_file))[0]}_results.tsv"]) for tsv_file in tsv_files] + scores_files = [f"{os.path.splitext(os.path.basename(tsv_file))[0]}_results.tsv" for tsv_file in tsv_files] + #scores_files = [] + #for tsv_file in tsv_files: + #base_name = os.path.splitext(os.path.basename(tsv_file))[0] + #scores_file = f"{base_name}_scores.tsv" + + #subprocess.run([ + # "conplex-dti", "predict", + # "--data-file", tsv_file, + # "--model-path", "/home/omic/ConPLex/models/ConPLex_v1_BindingDB.pt", + # "--outfile", f"{base_name}_results.tsv" + #]) + + #with open(scores_file, 'w') as f: + # f.write("chem_id\tprotein_id\tscore\n") + + #with open(f"{base_name}_results.tsv", 'r') as results_file, open(f"{base_name}_temp.tsv", 'w') as temp_file: + # for line in results_file: + # fields = line.strip().split('\t') + # temp_file.write('\t'.join(fields) + '\n') + + #merged_df = pd.read_csv(f"{base_name}_temp.tsv", sep='\t', names=['chem_id', 'protein_id', 'score']) + #tsv_df = pd.read_csv(tsv_file, sep='\t', names=['protein_id', 'chem_id', 'sequence', 'smiles']) + + #merged_df = merged_df.merge(tsv_df[['chem_id', 'smiles']], on='chem_id') + #merged_df.to_csv(scores_file, sep='\t', index=False) + + #os.remove(f"{base_name}_temp.tsv") + #scores_files.append(scores_file) + return scores_files + +def collect_frags(scores_files, fasta_file, outdir, split_write_df = 'no'): + def concatenate_dataframes(file_list): + df_list = [] + header = None + for i, file in enumerate(file_list): + if os.path.getsize(file) > 0: + if i == 0: + df = pd.read_csv(file, sep='\t', index_col=None) + if df.columns[0] == 'chem_id': + header = df.columns + else: + df = pd.read_csv(file, sep='\t', index_col=None, header=None) + df.columns = ['chem_id', 'protein_id', 'score', 'smiles'] + else: + df = pd.read_csv(file, sep='\t', index_col=None, header=None) + if header is not None: + df.columns = header + df_list.append(df) + else: + print(f"Skipping empty file: {file}") + if df_list: + concatenated_df = pd.concat(df_list, ignore_index=True) + return concatenated_df + else: + return pd.DataFrame() + + scores_df = concatenate_dataframes(scores_files) + + if not scores_df.empty: + score_column_index = 2 if 'score' not in scores_df.columns else 'score' + scores_df[score_column_index] = pd.to_numeric(scores_df[score_column_index], errors='coerce') + scores_df = scores_df.dropna(subset=[score_column_index]) + sorted_scores_df = scores_df.sort_values(by=score_column_index, ascending=False) + if 'score' not in scores_df.columns: + sorted_scores_df.columns = ['chem_id', 'protein_id', 'score', 'hit', 'smiles'] + + base_name = os.path.splitext(os.path.basename(fasta_file))[0] + all_scores_file = os.path.join(outdir, f"{base_name}_all_scores.tsv") + sorted_scores_df.to_csv(all_scores_file, sep='\t', index=False, header=True) + + else: + print("No score files found or all score files are empty.") + + with open(fasta_file, 'r') as fasta: + fasta_lines = fasta.readlines() + fasta_sequence = fasta_lines[1].strip() if len(fasta_lines) > 1 else '' + + if not scores_df.empty: + df = sorted_scores_df + header = df.columns.tolist() + + if split_write_df == 'yes': + for index, row in df.iterrows(): + row_df = pd.DataFrame([row], columns=header) + csv_filename = f"{row['complex_name'].replace(' ', '-')}_hit.csv" + row_df.to_csv(os.path.join(outdir, csv_filename), index=False) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Process and screen fragments.") + parser.add_argument("--fastas", required=True, help="Path to the FASTA file.") + parser.add_argument("--smis", required=True, help="Path to the SMILES file.") + parser.add_argument("--screening_batch_size", type=int, default=100000, help="Batch size for screening.") + parser.add_argument("--outdir", default="output", help="Output directory.") + parser.add_argument("--split_write_df", default="no", help="Write all complexes in separate files") + + args = parser.parse_args() + + tsv_files = create_tsv_frags(args.fastas, args.smis, args.screening_batch_size) + scores_files = screen_frags(tsv_files) + #collect_frags(scores_files, args.fastas, args.outdir, args.split_write_df) diff --git a/digital-trial/drug_tissue_distribution.py b/digital-trial/drug_tissue_distribution.py new file mode 100644 index 0000000..a57a260 --- /dev/null +++ b/digital-trial/drug_tissue_distribution.py @@ -0,0 +1,39 @@ +import argparse +import pandas as pd +import numpy as np + +def get_tissue_distribution(file_name): + #load protein expression per tissue + HPA = pd.read_csv('/home/omic/HPA_normal_ihc_data.tsv', sep = '\t') + #load enst symbol mapping data + MANE_all_transcipts = pd.read_csv('/home/omic/MANE_all_transcipts.csv') + + #load interaction data + significant_interactions = pd.read_csv(file_name, sep = '\t') + + #filter out tissues with low confidence + HPA = HPA[(HPA['Level'] == 'Medium') | (HPA['Level'] == 'High')] + + #get protrin symbols from siginificant interactions + prot_enst = [i.split('_')[0] for i in pd.unique(significant_interactions['transcipt'])] + prot_symbol = [MANE_all_transcipts[MANE_all_transcipts['transcipt'] == i]['symbol'].iloc[0] for i in prot_enst] + prot_symbol = pd.unique(prot_symbol) + + #get protein expression per tissue + tissue_per_prot_symbol = [list(pd.unique(HPA[HPA['Gene name'] == i]['Tissue'])) for i in prot_symbol] + #transform list do array + tissue_per_prot_symbol_array = np.array([[i in j for i in pd.unique(HPA['Tissue'])] for j in tissue_per_prot_symbol]) + tissue_per_prot_symbol_pd = pd.DataFrame(tissue_per_prot_symbol_array) + tissue_per_prot_symbol_pd.columns = pd.unique(HPA['Tissue']) + tissue_per_prot_symbol_pd = tissue_per_prot_symbol_pd.set_index(prot_symbol) + + #save + save_name = file_name.split('significant_interactions.tsv')[0] + 'tissue_distribution.tsv' + tissue_per_prot_symbol_pd.to_csv(save_name, sep = '\t') + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Get tissue distribution from *significant_interactions.tsv.") + parser.add_argument("--file_name", required=True, help="file_name") + args = parser.parse_args() + + get_tissue_distribution(args.file_name) diff --git a/digital-trial/get_round_2.py b/digital-trial/get_round_2.py new file mode 100755 index 0000000..14eea26 --- /dev/null +++ b/digital-trial/get_round_2.py @@ -0,0 +1,78 @@ +import argparse +import pandas as pd +import numpy as np +import subprocess +from itertools import chain + +seq_exist = pd.read_csv('/home/omic/ConPLex/MANE_all_transcipts.csv') + +def get_round_2(threshold, workdir, round): + #get output names + #get patient fasta name + fasta_name = subprocess.check_output([f'find {workdir} -name \*_variants_transcript_id_mutations.fasta' ], shell = True) + fasta_name = str(fasta_name).split('/')[-1].split('_variants_transcript_id_mutations.fasta')[0] + #get test drug + drug_name = subprocess.check_output([f'find {workdir} -name \*.csv' ], shell = True) + drug_name = [x for x in str(drug_name).split('/') if "round_1.csv" not in x][-1].split('.csv')[0] + name_out = drug_name + '_' + fasta_name + #get all work dir conplex files + #res_list = subprocess.check_output([f'ls {workdir}/*_results.tsv'], shell = True) + res_list = subprocess.check_output([f'find {workdir} -name \*_results.tsv' ], shell = True) + round_1_score_list = str(res_list).split('\'')[1].split('\\n')[:-1] + #read 1. round + transcipts_1 = [pd.read_csv(i, sep = '\t', header=None).sort_values([2], ascending=False) for i in round_1_score_list] + #get poition of drag interaction vs all metabolites + drug_pos = [[n for n, j in enumerate(list(i[0])) if j[:4] == 'drug'] for i in transcipts_1] + #drug score + drug_0_score = pd.concat([i[i[0] =='drug_0'] for i in transcipts_1]).rename({0:'Drug', 1:'Transcript', 2:'Score'}, axis = 1) + #filter all below threshold + transcipts_1 = [i[i[2] > threshold] for i in transcipts_1] + #save transcipt_conplex above threshold to one file + if round == 2: + inter_import = pd.concat(transcipts_1, ignore_index=True).rename({0:'drug/metabolite',1:'transcipt',2:'conplex_score'},axis = 1) + #add drug + test_smiles = pd.read_csv(f'{workdir}/smiles.smi', sep = '\t', header=None) + smi_ = [test_smiles[test_smiles[1] == i].iloc[0][0] for i in list(inter_import['drug/metabolite'])] + inter_import['smile'] = smi_ + inter_import[['drug/metabolite','smile','transcipt','conplex_score']].to_csv(f'{workdir}/{name_out}_significant_interactions.tsv',sep = '\t',index = False) + drug_0_score.to_csv(f'{workdir}/{name_out}_drug_scores.tsv',sep = '\t',index = False) + transcipts_1 = pd.DataFrame([(j.split('/')[-1].split('_results')[0], i.shape[0], i[2].mean(), k[0]) for i,j, k in zip(transcipts_1, round_1_score_list, drug_pos) if i.shape[0] != 0]) + #chack if any interaction is is above threshold for first roud + if round == 1: + if transcipts_1.shape == (0,0): + transcipts_1.to_csv(f'{workdir}/round_1.csv', index = False) + with open(f'{workdir}/round_1.fasta', 'w') as f: + f.write("all_data_is_filtered_out\n") + return 'STOP NO TRANSCIPTS ABOVE THRESHOLD' + + transcipts_1 = transcipts_1.rename({0:'transcipt_name',1:'number_of_iteracting_compounds', 2:'mean_binding_above_threshold', 3:'drug_position'}, axis='columns') + transcipts_1['if_drug_above_threshold'] = transcipts_1.iloc[:,1] > transcipts_1.iloc[:,3] + #if protein is mutated it has _2 in name, removes it + transcipt_names = [i.split('_')[0] for i in list(transcipts_1['transcipt_name'])] + transcipts_1['protein_name'] = [[seq_exist[seq_exist['transcipt'] == i].iloc[0]['symbol']][0] for i in transcipt_names] + #save data on first round + transcipts_1.to_csv(f'{workdir}/round_{round}.csv', index = False) + #get fasta for second round + if round == 1: + #get all transcipts of proteins above threshold + name_2_filttered = list(transcipts_1['protein_name']) + transcipts_2 = [list(seq_exist[seq_exist['symbol'] == i]['transcipt']) for i in name_2_filttered] + transcipts_2 = list(chain(*transcipts_2)) + transcipts_2 = list(np.unique((transcipts_2))) + #filter out transcripts already ran through complex + transcipts_2 = list(np.array(transcipts_2)[[i not in list(transcipts_1['transcipt_name']) for i in transcipts_2]]) + fasta_new = [['>'+i, seq_exist[seq_exist['transcipt'] == i]['seq'].iloc[0]] for i in transcipts_2] + fasta_new = list(chain(*fasta_new)) + #write fasta to run + with open(f'{workdir}/round_2.fasta', 'w') as f: + for line in fasta_new: + f.write(f"{line}\n") + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Process and screen fragments.") + parser.add_argument("--threshold", required=True, type=float, help="Threshold for 1. round.of conplex scores") + parser.add_argument("--workdir", required=True, help="workdir") + parser.add_argument("--round", required=True, type=int, help="Round 1 or 2") + args = parser.parse_args() + + get_round_2(args.threshold, args.workdir, args.round) diff --git a/digital-trial/main_biotransformer.nf b/digital-trial/main_biotransformer.nf new file mode 100644 index 0000000..f7a332d --- /dev/null +++ b/digital-trial/main_biotransformer.nf @@ -0,0 +1,220 @@ +nextflow.enable.dsl=2 + + +process SUPER_TRANSFORMER { + container "${params.container_biotransformer}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/receptors", mode: 'copy' + debug true + + input: + path smiles_csv + + output: + path "${smiles_csv.simpleName}_out.csv" + + script: + """ + #!/bin/bash + workdir=`pwd` + cd /home/omic/biotransformer + ## Predicting Biotransformation Using the Human Super Transformer: + # This command predicts the biotransformation of molecules from an SDF input (example.csv) using the human super transformer (superbio) and annotates the metabolites with names and database IDs (from PubChem). + java -jar /home/omic/biotransformer/biotransformer -k pred -b superbio -isdf \$workdir/${smiles_csv.simpleName}.csv -ocsv \${workdir}/${smiles_csv.simpleName}_out.csv -osdf \${workdir}/${smiles_csv.simpleName}.sdf -a + """ +} + +process HUMAN_TRANSFORMER { + container "${params.container_biotransformer}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/sdf", mode: 'copy' + debug true + + input: + path smiles_csv + + output: + path "${smiles_csv.simpleName}_out.csv" + + script: + """ + #!/bin/bash + set -e + workdir=\$(pwd) + cd /home/omic/biotransformer + + # Function to get available memory percentage + get_available_mem_percent() { + free | awk '/Mem:/ {print int(\$7/\$2 * 100)}' + } + + # Function to log memory usage + log_memory() { + local pid=\$1 + echo "MEMLOG: Timestamp,BioTransformer Memory (MB),Available System Memory (%)" >&2 + while kill -0 \$pid 2>/dev/null; do + local biotrans_mem=\$(ps -o rss= -p \$pid | awk '{print \$1/1024}') + local avail_mem=\$(get_available_mem_percent) + echo "MEMLOG: \$(date '+%Y-%m-%d %H:%M:%S'),\$biotrans_mem,\$avail_mem" >&2 + if [ \$avail_mem -lt 5 ]; then + echo "MEMLOG: Available memory below 5%. Terminating process." >&2 + kill -15 \$pid + wait \$pid + echo 'PROCESS TERMINATED DUE TO LOW MEMORY' > "\${workdir}/${smiles_csv.simpleName}_out.csv" + exit 1 + fi + sleep 1800 # Sleep for 30 minutes + done + } + + # Calculate max Java heap size (90% of available memory) + max_heap=\$(free -g | awk '/Mem:/ {print int(\$7 * 0.9)}') + + # Start the biotransformer process + java -Xmx"\${max_heap}g" -jar /home/omic/biotransformer/biotransformer -a -k pred -b superbio -isdf "\$workdir/${smiles_csv.simpleName}.csv" -ocsv "\${workdir}/${smiles_csv.simpleName}_out.csv" -osdf "\${workdir}/${smiles_csv.simpleName}.sdf" -s 100 & + biotrans_pid=\$! + + # Start memory logging in the background + log_memory \$biotrans_pid & + log_pid=\$! + + # Wait for the biotransformer process to finish + wait \$biotrans_pid + status=\$? + + # Stop the logging process + kill \$log_pid 2>/dev/null || true + + if [ ! -s "\${workdir}/${smiles_csv.simpleName}_out.csv" ]; then + if [ \$status -ne 0 ] && [ ! -f "\${workdir}/${smiles_csv.simpleName}_out.csv" ]; then + echo 'PROCESS FAILED' > "\${workdir}/${smiles_csv.simpleName}_out.csv" + else + echo 'NO METABOLITES' > "\${workdir}/${smiles_csv.simpleName}_out.csv" + fi + fi + """ +} + +process METABOLITES_BY_MASS { + container "${params.container_biotransformer}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/graphs", mode: 'copy' + debug true + + input: + path smiles_csv + + output: + path "${smiles_csv.simpleName}_out.csv" + + script: + """ + #!/bin/bash + workdir=`pwd` + cd /home/omic/biotransformer + ## Identifying Metabolites with Specific Masses: + # This command identifies all human metabolites of compounds in example.csv with masses 292.0946 Da and 304.0946 Da (max depth = 2), with a mass tolerance of 0.01 Da. It provides annotations when available. + java -jar /home/omic/biotransformer/biotransformer -k cid -b allHuman -isdf \$workdir/${smiles_csv.simpleName}.csv -ocsv \${workdir}/${smiles_csv.simpleName}_out.csv -osdf \${workdir}/${smiles_csv.simpleName}.sdf -s 2 -m "292.0946;304.0946" -t 0.01 -a + """ +} + +process ORDERED_SEQUENCE { + container "${params.container_biotransformer}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/screening", mode: 'copy' + debug true + + input: + path smiles_csv + + output: + path "${smiles_csv.simpleName}_out.csv" + + script: + """ + #!/bin/bash + workdir=`pwd` + cd /home/omic/biotransformer + ## Simulating an Ordered Sequence of Metabolism: + # This command simulates an ordered sequence of metabolism for compounds in example.csv, starting with two steps of CYP450 oxidation, followed by one step of conjugation. The output is saved in an SDF file (output.sdf). + java -jar /home/omic/biotransformer/biotransformer -isdf \$workdir/${smiles_csv.simpleName}.csv -ocsv \${workdir}/${smiles_csv.simpleName}_out.csv -osdf \${workdir}/${smiles_csv.simpleName}.sdf -k pred -q "cyp450:2; phaseII:1" + """ +} + +process GET_FINAL_METABOLITES { + container "${params.container_biotransformer}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/screening", mode: 'copy' + debug true + + input: + path smiles_csv + + output: + path "${smiles_csv.simpleName}.txt" + + script: + """ + #!/opt/conda/envs/biotransformer/bin/python + from rdkit import Chem + import numpy as np + import pandas as pd + import requests + + #load biotransformet ouput + biotransformer = pd.read_csv('$smiles_csv') + + #check if metabolites exist + if biotransformer.shape[0] == 0: + with open('${smiles_csv.simpleName}.txt', 'w') as f: + f.write(f"NO_METABOLITES\\n") + + else: + metabolite_id = biotransformer['Metabolite ID'] + #get only metabolites that are not precursors for next metabolisam step + last_step_metabolites = biotransformer[[i not in list(biotransformer['Precursor ID']) for i in metabolite_id]] + last_step_metabolites = last_step_metabolites.drop_duplicates() + + #get only "active" ones + InChIKey = last_step_metabolites['InChIKey'] + InChIKey = pd.unique(InChIKey) + + #look if metabolite is in chembl + chembl = [] + for i in InChIKey: + curl_commend = f"https://www.ebi.ac.uk/chembl/api/data/molecule/{i}" + c = requests.get(curl_commend) + if c.status_code == 200: + #compund exists in chembl + chembl.append(True) + else: + #compund does not exists in chembl + chembl.append(False) + + + ChEMBL_bool = pd.DataFrame([InChIKey, chembl]).T.rename({0:'InChIKey',1:'in_ChEMBL'}, axis = 1) + last_step_metabolites = last_step_metabolites.merge(ChEMBL_bool, how='inner', on='InChIKey') + #if in PUBCHEM + last_step_metabolites['in_PUBCHEM'] = ~last_step_metabolites['PUBCHEM_CID'].isna() + ##logic + #if metabolite is not in PUBCHEM pass it to next step. We don't know if it's "active" + #has to be in ChEMBL and PUBCHEM to have "activity" + mask = (last_step_metabolites['in_PUBCHEM'] == False) | (np.sum(last_step_metabolites[['in_ChEMBL','in_PUBCHEM']], 1) == 2) + + #filtered metabolites + last_step_metabolites = last_step_metabolites[mask] + + + #convert biotransformer smi to canonical smi and eliminate nonsense structures + metabolite_smi = list(np.unique(last_step_metabolites['SMILES'])) + metabolite_smi = [Chem.CanonSmiles(i) for i in metabolite_smi if Chem.MolFromSmiles(i) != None] + + #final metabolites + metabolite_smi_filteres = np.array(metabolite_smi) + + #save smi + with open('${smiles_csv.simpleName}.txt', 'w') as f: + for n, line in enumerate(metabolite_smi_filteres): + f.write(f"{line}\\tmetabol_{n}\\n") + """ +} diff --git a/digital-trial/main_conplex.nf b/digital-trial/main_conplex.nf new file mode 100644 index 0000000..eb7d0ff --- /dev/null +++ b/digital-trial/main_conplex.nf @@ -0,0 +1,123 @@ +nextflow.enable.dsl=2 + + +process CONPLEX { + container "${params.container_conplex}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/receptors", mode: 'copy' + debug true + maxForks 5 + // scratch true //deletes workdir after successful completion + + input: + path smi_drug + path smi_metabolite + path mut_fasta + + output: + path "*drug_scores.tsv", emit: drug + path "*significant_interactions.tsv", emit: interactions + + script: + """ + workdir=`pwd` + + #concat mutated and reference fasta files. If it has name with _2 its mutated. + #after test is don retrun this + cat $mut_fasta /home/omic/ConPLex/MANE_referent_transcipt_reference.fasta > \$workdir/all_protein.fasta + + ### Test + #head -n 100 /home/omic/ConPLex/MANE_referent_transcipt_reference.fasta > \$workdir/test.fasta + #cat $mut_fasta \$workdir/test.fasta > \$workdir/all_protein.fasta + ### + + . activate conplex-dti + + #transform smi for conplex + python3 -c " +import sys +from rdkit import Chem +import numpy as np +import pandas as pd + +def converter(drug_csv, outname): + #open file to write drug/matabolite smi + out_file = open(outname + '.txt', 'w') + + #load drug csv; only has drug in separate lines + drug_smi_list = np.array(pd.read_csv(drug_csv)['SMILES']).tolist() + #original drugs are anotated with drug_{} + for n, smi in enumerate(drug_smi_list): + out_file.write('{}\\tdrug_{}\\n'.format(smi, n)) + + out_file.close() + +converter('$smi_drug', 'drag') + " + #concatinate drag and metabolites + cat drag.txt $smi_metabolite > \$workdir/smiles.smi + #conplex predicition 1. round + python3 /home/omic/ConPLex/conplex.py --fastas \$workdir/all_protein.fasta --smis \$workdir/smiles.smi --screening_batch_size ${params.screening_batch_size} --outdir \$workdir --split_write_df 'no' + #### this part is use to test all alternative transcripts (this part can be skipped for now, cuz we will use it for tissue specific analysis later) + ##get fasta for 2. round transcripts for proteins above threshold + #python3 /home/omic/ConPLex/get_round_2.py --threshold ${params.threshold} --workdir \$workdir --round 1 + ##conplex all transcipt for protrin above threshold + #python3 /home/omic/ConPLex/conplex.py --fastas \$workdir/round_2.fasta --smis \$workdir/smiles.smi --screening_batch_size ${params.screening_batch_size} --outdir \$workdir --split_write_df 'no' + #### + #get data for second run + python3 /home/omic/ConPLex/get_round_2.py --threshold ${params.threshold} --workdir \$workdir --round 2 + """ +} + +process NETWORK_ENRICHMENT { + container "${params.container_conplex}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/receptors", mode: 'copy' + debug true + maxForks 5 + + input: + path interactions + + output: + path "*_network_enrichment.tsv", emit: network_enrichment + path "*_network_interactions.tsv", emit: network_interactions + + script: + """ +#!/opt/conda/envs/conplex-dti/bin/python +import pandas as pd +import requests + +interaction_data = pd.read_csv('$interactions', sep = '\\t') +interaction_data = interaction_data.sort_values('conplex_score', ascending=False) + +#get list of enst above threshold +protein_network_list = '%0d'.join(list(pd.unique(interaction_data[interaction_data['conplex_score'] > ${params.protein_network_threshold}]['transcipt']))) + +#get urls +url_network = f'https://string-db.org/api/tsv/network?identifiers={protein_network_list}&species=9606' +url_enrichment = f'https://string-db.org/api/tsv/enrichment?identifiers={protein_network_list}&species=9606' + +#get enrichment dataframe +r = requests.get(url_enrichment) +lines = r.text.split('\\n') # pull the text from the response object and split based on new lines +data = [l.split('\\t') for l in lines] # split each line into its components based on tabs +enrichment_df = pd.DataFrame(data[1:-1], columns = data[0]) # convert to dataframe using the first row as the column names; drop empty, final row +#get protein interaction dataframe +r = requests.get(url_network) +lines = r.text.split('\\n') # pull the text from the response object and split based on new lines +data = [l.split('\\t') for l in lines] # split each line into its components based on tabs +# convert to dataframe using the first row as the column names; drop empty, final row +interactions_df = pd.DataFrame(data[1:-1], columns = data[0]) +# dataframe with the preferred names of the two proteins and the score of the interaction +#interactions_df = interactions_df[['preferredName_A', 'preferredName_B', 'score']] + +#output name +output_name = '$interactions'.split('/')[-1].split('_significant_interactions.tsv')[0] + +#save +enrichment_df.to_csv(f'{output_name }_network_enrichment.tsv',sep='\\t') +interactions_df.to_csv(f'{output_name }_network_interactions.tsv',sep='\\t') + """ +} diff --git a/digital-trial/main_tissue.nf b/digital-trial/main_tissue.nf new file mode 100755 index 0000000..156e75e --- /dev/null +++ b/digital-trial/main_tissue.nf @@ -0,0 +1,22 @@ +nextflow.enable.dsl=2 + + +process TISSUE_DISTRIBUTION { + container "${params.container_tissue}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/tissue_distribution", mode: 'copy' + debug true + + input: + path interaction + + output: + path "*tissue_distribution.tsv", emit: tissue_dist + + script: + """ + . activate tissue + + python3 /home/omic/drug_tissue_distribution.py --file_name ${interaction} + """ +} diff --git a/digital-trial/nextflow.config b/digital-trial/nextflow.config new file mode 100644 index 0000000..3141b76 --- /dev/null +++ b/digital-trial/nextflow.config @@ -0,0 +1,15 @@ +manifest { + name = 'Digital Trial' + author = 'omic' + recurseSubmodules = true + homePage = 'https://gitlab.com/omic/next/registry/tools/digital-trial.git' + description = 'Digital drug protein interactions' + mainScript = 'main.nf' + nextflowVersion = '!>=21.04.3' + defaultBranch = 'master' +} + +docker { + enabled = true + temp = 'auto' +} diff --git a/digital-trial/params.json b/digital-trial/params.json new file mode 100644 index 0000000..49b74cc --- /dev/null +++ b/digital-trial/params.json @@ -0,0 +1,192 @@ +{ + "params": { + "// GENERAL PARAMETERS": {}, + "outdir": { + "type": "folder", + "description": "Output directory for results", + "default": "/mnt/OmicNAS/private/old/gabe/digital_trials", + "required": true, + "pipeline_io": "output", + "var_name": "params.outdir", + "examples": [ + "/mnt/OmicNAS/private/old/gabe/digital_trials", + "/path/to/custom/output" + ], + "pattern": ".*", + "validation": {}, + "notes": "Directory where all pipeline results will be stored" + }, + "project_name": { + "type": "string", + "description": "Project identifier", + "default": "test", + "required": true, + "pipeline_io": "parameter", + "var_name": "params.project_name", + "examples": [ + "test", + "production", + "drug_metabolism_study" + ], + "pattern": ".*", + "validation": {}, + "notes": "Identifier for the digital trials project" + }, + "containerOptions": { + "type": "string", + "description": "Container runtime options", + "default": "--gpus all --rm -v /mnt:/mnt", + "required": false, + "pipeline_io": "parameter", + "var_name": "params.containerOptions", + "examples": [ + "--gpus all --rm -v /mnt:/mnt", + "--rm -v /data:/data" + ], + "pattern": ".*", + "validation": {}, + "notes": "Docker container runtime options for GPU usage and volume mounts" + }, + "// BIOTRANSFORMER PARAMETERS": {}, + "container_biotransformer": { + "type": "string", + "description": "BioTransformer container image", + "default": "biotransformer:latest", + "required": true, + "pipeline_io": "parameter", + "var_name": "params.container_biotransformer", + "examples": [ + "biotransformer:latest", + "biotransformer:v1.0" + ], + "pattern": ".*", + "validation": {}, + "notes": "Docker container image for BioTransformer module" + }, + "ligands": { + "type": "folder", + "description": "Path to input ligands directory", + "default": "/Workspace/next/registry/pipelines/digital_trials/input", + "required": true, + "pipeline_io": "input", + "var_name": "params.ligands", + "examples": [ + "/Workspace/next/registry/pipelines/digital_trials/input", + "/path/to/ligands" + ], + "pattern": ".*", + "validation": {}, + "notes": "Directory containing CSV files with ligand data for metabolic transformation" + }, + "mode": { + "type": "string", + "description": "BioTransformer operation mode", + "default": "HUMAN", + "required": true, + "pipeline_io": "parameter", + "var_name": "params.mode", + "examples": [ + "HUMAN", + "SUPER", + "MASS", + "ORDERED" + ], + "pattern": "^(HUMAN|SUPER|MASS|ORDERED)$", + "enum": [ + "HUMAN", + "SUPER", + "MASS", + "ORDERED" + ], + "validation": {}, + "notes": "IMPORTANT: Use HUMAN mode as it's the only fully implemented option that returns expected metabolism to the last step" + }, + "// CONPLEX PARAMETERS": {}, + "container_conplex": { + "type": "string", + "description": "CONPLEX container image", + "default": "conplex_dig_pat:latest", + "required": true, + "pipeline_io": "parameter", + "var_name": "params.container_conplex", + "examples": [ + "conplex_dig_pat:latest", + "conplex_dig_pat:v1.0" + ], + "pattern": ".*", + "validation": {}, + "notes": "Docker container image for CONPLEX module" + }, + "mutated_protein_fasta": { + "type": "folder", + "description": "Path to mutated protein FASTA files directory", + "default": "/Workspace/next/registry/pipelines/digital_trials/input", + "required": true, + "pipeline_io": "input", + "var_name": "params.mutated_protein_fasta", + "examples": [ + "/Workspace/next/registry/pipelines/digital_trials/input", + "/path/to/protein/fasta/files" + ], + "pattern": ".*", + "validation": {}, + "notes": "Directory containing FASTA files with mutated protein sequences" + }, + "threshold": { + "type": "number", + "description": "Binding affinity threshold for interactions", + "default": 0.7, + "required": false, + "pipeline_io": "parameter", + "var_name": "params.threshold", + "examples": [ + 0.5, + 0.7, + 0.9 + ], + "pattern": "^\\d+(\\.\\d+)?$", + "validation": { + "min": 0.0, + "max": 1.0 + }, + "notes": "Threshold value for determining significant binding interactions" + }, + "screening_batch_size": { + "type": "integer", + "description": "Batch size for virtual screening", + "default": 100000, + "required": false, + "pipeline_io": "parameter", + "var_name": "params.screening_batch_size", + "examples": [ + 10000, + 100000, + 1000000 + ], + "pattern": "^\\d+$", + "validation": { + "min": 1 + }, + "notes": "Batch size for virtual screening (100k is ideal to optimize performance)" + }, + "protein_network_threshold": { + "type": "number", + "description": "Threshold for protein network analysis", + "default": 0.95, + "required": false, + "pipeline_io": "parameter", + "var_name": "params.protein_network_threshold", + "examples": [ + 0.9, + 0.95, + 0.99 + ], + "pattern": "^\\d+(\\.\\d+)?$", + "validation": { + "min": 0.0, + "max": 1.0 + }, + "notes": "Threshold value for protein-protein interaction network construction" + } + } +} diff --git a/digital-trial/test.nf b/digital-trial/test.nf new file mode 100644 index 0000000..456f794 --- /dev/null +++ b/digital-trial/test.nf @@ -0,0 +1,61 @@ +nextflow.enable.dsl=2 + +//BIOTRANSFORMER +params.container_biotransformer = 'biotransformer:latest' +params.containerOptions = '--gpus all --rm -v /mnt:/mnt' +params.outdir = '/mnt/OmicNAS/private/old/gabe/digital_trials' +params.project_name = 'test' +params.ligands = '/Workspace/next/registry/pipelines/digital_trials/input' + +//IMPOTRANT!!! use HUMAN. Only one that returns what is expected. metabolism to the last step. It's only one properly set up +params.mode = 'HUMAN' // Options: SUPER, HUMAN, MASS, ORDERED # only HUMAN is fully implemented + +//CONPLEX +params.container_conplex = 'conplex_dig_pat:latest' +params.mutated_protein_fasta = '/Workspace/next/registry/pipelines/digital_trials/input' +params.threshold = 0.8 //0.5 //0.7 +params.screening_batch_size =100000 //100k is ideal to optimize performance with virtual screening +params.protein_network_threshold = 0.95 + +//TISSUE DISTRIBUTION +params.container_tissue = 'tissue:latest' + +//BIOTRANSFORMER +include { SUPER_TRANSFORMER } from './main_biotransformer.nf' +include { HUMAN_TRANSFORMER } from './main_biotransformer.nf' +include { METABOLITES_BY_MASS } from './main_biotransformer.nf' +include { ORDERED_SEQUENCE } from './main_biotransformer.nf' +include { GET_FINAL_METABOLITES } from './main_biotransformer.nf' +//CONPLEX +include { CONPLEX } from './main_conplex.nf' +include { NETWORK_ENRICHMENT } from './main_conplex.nf' +//TISSUE_DISTRIBUTION +include { TISSUE_DISTRIBUTION } from './main_tissue.nf' + +workflow { + //BIOTRANSFORMER + lig_ch = Channel.fromPath("${params.ligands}/*.csv") + switch (params.mode) { + case 'SUPER': + SUPER_TRANSFORMER(lig_ch) + break + case 'HUMAN': + HUMAN_TRANSFORMER(lig_ch) + break + case 'MASS': + METABOLITES_BY_MASS(lig_ch) + break + case 'ORDERED': + ORDERED_SEQUENCE(lig_ch) + break + default: + println("Invalid mode specified: ${params.mode}") + } + GET_FINAL_METABOLITES(HUMAN_TRANSFORMER.out) + //CONPLEX + pat_fasta = Channel.fromPath("${params.mutated_protein_fasta}/*.fasta") + CONPLEX(lig_ch, GET_FINAL_METABOLITES.out, pat_fasta) + NETWORK_ENRICHMENT(CONPLEX.out.interactions) + //TISSUE DISTRIBUTION + TISSUE_DISTRIBUTION(CONPLEX.out.interactions) +} diff --git a/digital-trial/test.nf.save b/digital-trial/test.nf.save new file mode 100644 index 0000000..a7a05ff --- /dev/null +++ b/digital-trial/test.nf.save @@ -0,0 +1,49 @@ +nextflow.enable.dsl=2 + +//BIOTRANSFORMER +params.container_biotransformer = 'biotransformer:latest' +params.containerOptions = '--gpus all --rm -v /mnt:/mnt' +params.outdir = '/mnt/OmicNAS/private/old/gabe/digital_trials' +params.project_name = 'test' +params.ligands = '/Workspace/next/registry/pipelines/digital_trials/input' + +//IMPOTRANT!!! use HUMAN. Only one that returns what is expected. metabolism to the last step. It's only one properly set up +params.mode = 'HUMAN' // Options: SUPER, HUMAN, MASS, ORDERED # only HUMAN is fully implemented + +//CONPLEX +params.container_conplex= 'conplex_dig_pat' +params.mutated_protein_fasta = '/Workspace/next/registry/pipelines/digital_trials/input/*.fasta' +params.threshold = 0.2 //0.75 +params.screening_batch_size =100000 //100k is ideal to optimize performance with virtual screening + +//BIOTRANSFORMER +include { SUPER_TRANSFORMER } from './main_biotransformer.nf' +include { HUMAN_TRANSFORMER } from './main_biotransformer.nf' +include { METABOLITES_BY_MASS } from './main_biotransformer.nf' +include { ORDERED_SEQUENCE } from './main_biotransformer.nf' +include { GET_FINAL_METABOLITES } from './main_biotransformer.nf' +//CONPLEX +include { CONPLEX } from './main_conplex.nf' + +workflow { + //BIOTRANSFORMER + lig_ch = Channel.fromPath("${params.ligands}/*.csv") + switch (params.mode) { + case 'SUPER': + SUPER_TRANSFORMER(lig_ch) + break + case 'HUMAN': + HUMAN_TRANSFORMER(lig_ch) + break + case 'MASS': + METABOLITES_BY_MASS(lig_ch) + break + case 'ORDERED': + ORDERED_SEQUENCE(lig_ch) + break + default: + println("Invalid mode specified: ${params.mode}") + } + GET_FINAL_METABOLITES(HUMAN_TRANSFORMER.out) + //CONPLEX +} diff --git a/digital_patient_extract_metrics.py b/digital_patient_extract_metrics.py new file mode 100644 index 0000000..5c7328c --- /dev/null +++ b/digital_patient_extract_metrics.py @@ -0,0 +1,239 @@ +import pandas as pd +import numpy as np +import argparse + +#get data framw with ENST ids and tissue specific expression +human_protein_atlas = '/home/omic/HPA_normal_ihc_data.tsv' +mane = '/home/omic/MANE_all_transcipts.csv' + +#extrect enst with hight expression per tissue and match to enst ids +HPA_normal_ihc_data = pd.read_csv(human_protein_atlas, sep = '\t') +MANE_all_transcipts = pd.read_csv(mane) + +#change name to merge +HPA_normal_ihc_data = HPA_normal_ihc_data.rename({'Gene':'Ensembl_Gene'}, axis=1) + +#merge dfs +HPA_normal_ihc_data = MANE_all_transcipts.merge(HPA_normal_ihc_data, left_on='Ensembl_Gene', right_on='Ensembl_Gene') + +#drop not needed colums +HPA_normal_ihc_data = HPA_normal_ihc_data.drop(['Unnamed: 0', 'seq', 'Ensembl_Gene'], axis=1) + +#get only hight expressed proteins +HPA_normal_hight = HPA_normal_ihc_data[HPA_normal_ihc_data['Level'] == 'High'] + +def get_n_metabolites(file): + """ + Get number of metabolites for a drug + input metabolite file from GET_FINAL_METABOLITES + """ + with open(file, 'r') as f: + first_line = f.readline().strip() + if first_line == 'NO_METABOLITES' or first_line == '': + return 0 + metabol = pd.read_csv(file, sep = '\t', header=None) + return metabol.shape[0] + +def get_conplex_metric(file_drug, file_all_interactions, target): + """ + Get merrics of interest in dataframe and a list of ENTSs with durg/metabolite interactions + with high expression based on Human Protein Atlas + input files from CONPLEX (first for drug interaction only, second for all interaction above threshold) + and traget ids from pipeline input csv file + """ + #drug target interaction + drug_interactions = pd.read_csv(file_drug, sep = '\t') + + #drug target protein ents + ensts = target + scors = [] + for enst in ensts: + scor = drug_interactions[drug_interactions['Transcript'] == enst]['Score'] + scors.append(scor) + + # mean_drug_scor = avg(scors) + mean_drug_scor = 0 + max_drug_scor = 0 + if len(scors) > 0: + mean_drug_scor = pd.concat(scors).mean() # 0 if empty + max_drug_scor = pd.concat(scors).max() # 0 if empty + + #drug/metabolite target interaction — only 'transcipt' and 'conplex_score' are + # referenced below (the 'smile' and 'drug/metabolite' columns are the bulk of the + # 5+ GB file). Skipping them cuts memory ~10x and prevents OOM in 5 GB pods. + drug_interactions = pd.read_csv(file_all_interactions, sep = '\t', usecols=['transcipt', 'conplex_score']) + n_significant_int = len(drug_interactions) + + # Handle empty DataFrame case + if n_significant_int == 0: + df = pd.DataFrame([max_drug_scor, mean_drug_scor, np.nan, np.nan, 0, 0, 0, 0, np.nan]).T.rename( + {0:'max_drug_scor',1:'mean_drug_scor',2:'max_target_scor',3:'mean_target_scor', + 4:'n_significant_int',5:'n_unique_proteins_above_target_interaction', + 6:'n_interactions_above_target_interaction',7:'n_enst_with_hight_expression', + 8:'mean_scor_with_hight_expression'}, axis = 1) + return df, [], drug_interactions + + #drug target protein ents + ensts = target + scors = [] + for enst in ensts: + scor = drug_interactions[drug_interactions['transcipt'] == enst]['conplex_score'] + scors.append(scor) + + mean_target_scor = 0 + max_target_scor = 0 + if len(scors) > 0: + mean_target_scor = pd.concat(scors).mean() # 0 if empty + max_target_scor = pd.concat(scors).max() # 0 if empty + + if np.isnan(max_target_scor): + pass + else: + drug_interactions = drug_interactions[drug_interactions['conplex_score'] >= max_target_scor].sort_values('conplex_score',ascending=False) + + n_unique_proteins_above_target_interaction = pd.unique(drug_interactions['transcipt']).shape[0] + n_interactions_above_target_interaction = drug_interactions.shape[0] + + uniq_enst = pd.unique(drug_interactions['transcipt']) + + #get only ensts with hight expression + uniq_enst_hight = list(set(pd.unique(HPA_normal_hight['transcipt'])).intersection(uniq_enst)) + enst_with_hight_expression = len(uniq_enst_hight) + + #sort based on a conplex score + drug_interactions = drug_interactions[[i in uniq_enst_hight for i in drug_interactions['transcipt']]] + + if len(drug_interactions) > 0: + mean_scor_with_hight_expression = drug_interactions['conplex_score'].mean() + hight_expression_enst_per_drug = pd.unique(drug_interactions['transcipt']) + else: + mean_scor_with_hight_expression = np.nan + hight_expression_enst_per_drug = [] + + df = pd.DataFrame([max_drug_scor, mean_drug_scor, max_target_scor, mean_target_scor, n_significant_int,n_unique_proteins_above_target_interaction,n_interactions_above_target_interaction,enst_with_hight_expression, mean_scor_with_hight_expression]).T.rename({0:'max_drug_scor',1:'mean_drug_scor',2:'max_target_scor',3:'mean_target_scor',4:'n_significant_int',5:'n_unique_proteins_above_target_interaction',6:'n_interactions_above_target_interaction',7:'n_enst_with_hight_expression',8:'mean_scor_with_hight_expression'}, axis = 1) + + return df, hight_expression_enst_per_drug, drug_interactions + +#look at tissue interactions specificly +def get_number_of_interacting_prot_per_tissue(names, hight_expression_enst_per_drug, drug_interactions, n_of_interactions = None): + ''' + Tissue specific interactions, only for high expressed proteins + input: + names; drug id, list + hight_expression_enst_per_drug; ensts with interaction of interest, make sure if follows names order and enst orderd by importance based on highest conplex score, lisf of list + drug_interactions; significant interactions filtered + n_of_interactions; n proteins to analyse ,default None use all proteins, use when there is no drug target interaction, interger + output: + number and min_max of tissue highly exprest proteins in interaction with a drug/metabolites, pandas df + ''' + n_interactions = [] + min_max_df = [] + + list_of_tissue_ids = [['Heart muscle'],\ + ['Rectum', 'Gallbladder', 'Esophagus', 'Stomach', 'Small intestine', 'Duodenum', 'Colon', 'Salivary gland'],\ + ['Breast', 'Lactating breast', 'Cervix', 'Fallopian tube', 'Ovary', 'Placenta', 'Endometrium', 'Vagina'],\ + ['Testis', 'Prostate', 'Epididymis', 'Seminal vesicle'],\ + ['Liver'],\ + ['Kidney', 'Urinary bladder'],\ + ['Cerebral cortex', 'Cerebellum', 'Caudate', 'Hippocampus', 'Hypothalamus', 'Dorsal raphe', 'Choroid plexus', 'Pituitary gland', 'Substantia nigra'],\ + ['Adrenal gland', 'Pancreas', 'Parathyroid gland', 'Thyroid gland'],\ + ['Appendix', 'Lymph node', 'Spleen', 'Thymus', 'Tonsil'],\ + ['Bone marrow'],\ + ['Bronchus', 'Lung', 'Nasopharynx', 'Oral mucosa'],\ + ['Eye', 'Retina'],\ + ['Skeletal muscle', 'Cartilage'],\ + ['Adipose tissue', 'Hair', 'Skin', 'Smooth muscle', 'Soft tissue', 'Sole of foot']] + + list_of_tissue_names = ['heart', 'gasrto_intestin', 'female_tissues', 'male_tissues', 'liver', 'kidney', 'brain', 'endocrine', 'immune',\ + 'hematopoietic', 'respiratory', 'sensory', 'musculoskeletal', 'others'] + + for t_id, t_name in zip(list_of_tissue_ids, list_of_tissue_names): + HPA_normal_hight_tis = HPA_normal_hight[[i in t_id for i in HPA_normal_hight['Tissue']]] + + tis = [HPA_normal_hight_tis[[i in j[:n_of_interactions] for i in HPA_normal_hight_tis['transcipt']]] for j in hight_expression_enst_per_drug] + tis = [i.drop_duplicates('transcipt') for i in tis] + + # Calculate highly expressed proteins once to use in both branches + num_highly_expressed = len(HPA_normal_hight_tis.drop_duplicates('transcipt')) + + # Handle empty drug_interactions case + if len(drug_interactions) == 0 or len(tis[0]) == 0: + min_max_df.append(pd.DataFrame([names, [np.nan], [np.nan], [np.nan], [num_highly_expressed], [0.0], [np.nan]])\ + .T.rename({0:'Drug_ID', + 1:f'max_{t_name}_interaction', + 2:f'min_{t_name}_interaction', + 3:f'mean_{t_name}_interaction', + 4:f'n_high_protein_in_{t_name}', + 5:f'share_affected_{t_name}', + 6:f'weighted_score_{t_name}'}, axis = 1)) + else: + #get max and min conplex sores for tissue specific ents !!! only for one drug ate a time not for a list (n_interactions is for a list) + inter = drug_interactions[drug_interactions['transcipt'].isin(tis[0]['transcipt'])].sort_values('conplex_score', ascending=False) + + # Calculate new metrics based on `inter` + num_affected = inter.shape[0] + share_affected = num_affected / num_highly_expressed if num_highly_expressed > 0 else 0.0 + mean_score = inter['conplex_score'].mean() + weighted_score = share_affected * mean_score + + min_max_df.append(pd.DataFrame([names, [inter['conplex_score'].max()], [inter['conplex_score'].min()], [mean_score], [num_highly_expressed], [share_affected], [weighted_score]])\ + .T.rename({0:'Drug_ID', + 1:f'max_{t_name}_interaction', + 2:f'min_{t_name}_interaction', + 3:f'mean_{t_name}_interaction', + 4:f'n_high_protein_in_{t_name}', + 5:f'share_affected_{t_name}', + 6:f'weighted_score_{t_name}'}, axis = 1)) + + #get number of interactions for tissue specific ents + n_interactions.append(pd.DataFrame([names, [len(i) for i in tis]]).T.rename({0:'Drug_ID',1:f'n_enst_{t_name}_above_target_interaction'}, axis = 1)) + + #merge interaction data + df_n_interactions = n_interactions[0] + for d in n_interactions[1:]: + df_n_interactions = df_n_interactions.merge(d, on='Drug_ID') + + #merge min max data + df_min_max_df = min_max_df[0] + for d in min_max_df[1:]: + df_min_max_df = df_min_max_df.merge(d, on='Drug_ID') + + n_interactions = df_n_interactions.merge(df_min_max_df, left_on='Drug_ID', right_on='Drug_ID') + + return n_interactions + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Calculate biological metrics.") + parser.add_argument("--metabolites", required=True, help="Path to the metabolites file.") + parser.add_argument("--conplex_all_interactions", required=True, help="Path to the conplex_significant_interaction file.") + parser.add_argument("--conplex_drug", required=True, help="Path to the conplex_significant_interaction_drug_only file.") + parser.add_argument("--target", required=True, help="PATH to file csv with drug targets in ENST formet separated by space.") + + args = parser.parse_args() + + drug_name = args.metabolites.split('/')[-1].split('_out.txt')[0] + n_metabolites = get_n_metabolites(args.metabolites) + + #get target + target = pd.read_csv(args.target, header=None)[2:] + if len(target) == 2: + target = list(target.iloc[-1]) + target = target[0].split(' ') + else: + target = [] + + df_1, target_ents, drug_interactions = get_conplex_metric(args.conplex_drug, args.conplex_all_interactions, target) + + #if no target interaction use only 200 unique proteins with highest interactions per tissue + if df_1['max_target_scor'].isna()[0]: + target_interaction = 0 + df_2 = get_number_of_interacting_prot_per_tissue([drug_name], [target_ents], drug_interactions, n_of_interactions = 200) + else: + target_interaction = 1 + df_2 = get_number_of_interacting_prot_per_tissue([drug_name], [target_ents], drug_interactions) + + df = pd.concat([df_2, df_1], axis=1) + df['target_interaction_found'] = target_interaction + df['n_metabolites'] = n_metabolites + + df.to_csv(f'{drug_name}_biological_properties.tsv', sep = '\t', index=False) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c7e238a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,21 @@ +version: '3.8' + +services: + tissue: + build: + context: . + dockerfile: Dockerfile_tissue + image: harbor.cluster.omic.ai/omic/digitaltrials/tissue:1.1.1 + chembl: + build: + context: . + dockerfile: Dockerfile_chembl + image: harbor.cluster.omic.ai/omic/digitaltrials/chembl:1.0.0 + network: + build: + context: . + dockerfile: Dockerfile_network + image: harbor.cluster.omic.ai/omic/digitaltrials/network:1.0.0 + volumes: + - /data/bugra/digital_trials/work/48/1e78bc2c0d60c8f0e72800d6226604:/workdir + - /data/:/data \ No newline at end of file diff --git a/drug_tissue_distribution.py b/drug_tissue_distribution.py new file mode 100644 index 0000000..bf190b1 --- /dev/null +++ b/drug_tissue_distribution.py @@ -0,0 +1,67 @@ +from pathlib import Path +import argparse +import pandas as pd +import numpy as np + +def get_tissue_distribution(file_name): + # Convert to Path object + file_path = Path(file_name) + + # Load interaction data — only the 'transcipt' column is referenced downstream + # (the bulk of the file is the 'smile' column we never use). Skipping it cuts + # memory ~30x on metabolite-heavy drugs (11 GB file -> ~400 MB resident). + significant_interactions = pd.read_csv(file_path, sep='\t', usecols=['transcipt']) + + # Check if data exists + if len(significant_interactions) == 0: + print(f"No significant interactions found in {file_name}. Creating empty output.") + tissue_per_prot_symbol_pd = pd.DataFrame() + save_name = str(file_path.parent / (file_path.stem.replace('_significant_interactions', '_tissue_distribution') + '.tsv')) + tissue_per_prot_symbol_pd.to_csv(save_name, sep='\t') + print(f"Saved empty tissue distribution to: {save_name}") + return + + # Load protein expression per tissue + HPA = pd.read_csv('/home/omic/HPA_normal_ihc_data.tsv', sep='\t') + # Load enst symbol mapping data + MANE_all_transcipts = pd.read_csv('/home/omic/MANE_all_transcipts.csv') + + # Filter out tissues with low confidence + HPA = HPA[(HPA['Level'] == 'Medium') | (HPA['Level'] == 'High')] + + + # Get protein symbols from significant interactions + prot_enst = [i.split('_')[0] for i in significant_interactions['transcipt'].unique()] + + # Safely map to symbols, skipping missing ones + prot_symbol = [] + for i in prot_enst: + matches = MANE_all_transcipts[MANE_all_transcipts['transcipt'] == i] + if not matches.empty: + prot_symbol.append(matches['symbol'].iloc[0]) + else: + print(f"Warning: Transcript {i} not found in MANE mapping. Skipping.") + + prot_symbol = pd.unique(prot_symbol) + + # Get unique tissues + unique_tissues = HPA['Tissue'].unique() + + # Get protein expression per tissue + tissue_per_prot_symbol = [list(HPA[HPA['Gene name'] == i]['Tissue'].unique()) for i in prot_symbol] + # Transform list to array + tissue_per_prot_symbol_array = np.array([[tissue in gene_tissues for tissue in unique_tissues] for gene_tissues in tissue_per_prot_symbol]) + + tissue_per_prot_symbol_pd = pd.DataFrame(tissue_per_prot_symbol_array, columns=unique_tissues, index=prot_symbol) + + # Save + save_name = str(file_path.parent / (file_path.stem.replace('_significant_interactions', '_tissue_distribution') + '.tsv')) + tissue_per_prot_symbol_pd.to_csv(save_name, sep='\t') + print(f"Saved tissue distribution to: {save_name}") + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Get tissue distribution from *significant_interactions.tsv.") + parser.add_argument("--file_name", required=True, help="file_name") + args = parser.parse_args() + + get_tissue_distribution(args.file_name) \ No newline at end of file diff --git a/get_round_2.py b/get_round_2.py new file mode 100755 index 0000000..14eea26 --- /dev/null +++ b/get_round_2.py @@ -0,0 +1,78 @@ +import argparse +import pandas as pd +import numpy as np +import subprocess +from itertools import chain + +seq_exist = pd.read_csv('/home/omic/ConPLex/MANE_all_transcipts.csv') + +def get_round_2(threshold, workdir, round): + #get output names + #get patient fasta name + fasta_name = subprocess.check_output([f'find {workdir} -name \*_variants_transcript_id_mutations.fasta' ], shell = True) + fasta_name = str(fasta_name).split('/')[-1].split('_variants_transcript_id_mutations.fasta')[0] + #get test drug + drug_name = subprocess.check_output([f'find {workdir} -name \*.csv' ], shell = True) + drug_name = [x for x in str(drug_name).split('/') if "round_1.csv" not in x][-1].split('.csv')[0] + name_out = drug_name + '_' + fasta_name + #get all work dir conplex files + #res_list = subprocess.check_output([f'ls {workdir}/*_results.tsv'], shell = True) + res_list = subprocess.check_output([f'find {workdir} -name \*_results.tsv' ], shell = True) + round_1_score_list = str(res_list).split('\'')[1].split('\\n')[:-1] + #read 1. round + transcipts_1 = [pd.read_csv(i, sep = '\t', header=None).sort_values([2], ascending=False) for i in round_1_score_list] + #get poition of drag interaction vs all metabolites + drug_pos = [[n for n, j in enumerate(list(i[0])) if j[:4] == 'drug'] for i in transcipts_1] + #drug score + drug_0_score = pd.concat([i[i[0] =='drug_0'] for i in transcipts_1]).rename({0:'Drug', 1:'Transcript', 2:'Score'}, axis = 1) + #filter all below threshold + transcipts_1 = [i[i[2] > threshold] for i in transcipts_1] + #save transcipt_conplex above threshold to one file + if round == 2: + inter_import = pd.concat(transcipts_1, ignore_index=True).rename({0:'drug/metabolite',1:'transcipt',2:'conplex_score'},axis = 1) + #add drug + test_smiles = pd.read_csv(f'{workdir}/smiles.smi', sep = '\t', header=None) + smi_ = [test_smiles[test_smiles[1] == i].iloc[0][0] for i in list(inter_import['drug/metabolite'])] + inter_import['smile'] = smi_ + inter_import[['drug/metabolite','smile','transcipt','conplex_score']].to_csv(f'{workdir}/{name_out}_significant_interactions.tsv',sep = '\t',index = False) + drug_0_score.to_csv(f'{workdir}/{name_out}_drug_scores.tsv',sep = '\t',index = False) + transcipts_1 = pd.DataFrame([(j.split('/')[-1].split('_results')[0], i.shape[0], i[2].mean(), k[0]) for i,j, k in zip(transcipts_1, round_1_score_list, drug_pos) if i.shape[0] != 0]) + #chack if any interaction is is above threshold for first roud + if round == 1: + if transcipts_1.shape == (0,0): + transcipts_1.to_csv(f'{workdir}/round_1.csv', index = False) + with open(f'{workdir}/round_1.fasta', 'w') as f: + f.write("all_data_is_filtered_out\n") + return 'STOP NO TRANSCIPTS ABOVE THRESHOLD' + + transcipts_1 = transcipts_1.rename({0:'transcipt_name',1:'number_of_iteracting_compounds', 2:'mean_binding_above_threshold', 3:'drug_position'}, axis='columns') + transcipts_1['if_drug_above_threshold'] = transcipts_1.iloc[:,1] > transcipts_1.iloc[:,3] + #if protein is mutated it has _2 in name, removes it + transcipt_names = [i.split('_')[0] for i in list(transcipts_1['transcipt_name'])] + transcipts_1['protein_name'] = [[seq_exist[seq_exist['transcipt'] == i].iloc[0]['symbol']][0] for i in transcipt_names] + #save data on first round + transcipts_1.to_csv(f'{workdir}/round_{round}.csv', index = False) + #get fasta for second round + if round == 1: + #get all transcipts of proteins above threshold + name_2_filttered = list(transcipts_1['protein_name']) + transcipts_2 = [list(seq_exist[seq_exist['symbol'] == i]['transcipt']) for i in name_2_filttered] + transcipts_2 = list(chain(*transcipts_2)) + transcipts_2 = list(np.unique((transcipts_2))) + #filter out transcripts already ran through complex + transcipts_2 = list(np.array(transcipts_2)[[i not in list(transcipts_1['transcipt_name']) for i in transcipts_2]]) + fasta_new = [['>'+i, seq_exist[seq_exist['transcipt'] == i]['seq'].iloc[0]] for i in transcipts_2] + fasta_new = list(chain(*fasta_new)) + #write fasta to run + with open(f'{workdir}/round_2.fasta', 'w') as f: + for line in fasta_new: + f.write(f"{line}\n") + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Process and screen fragments.") + parser.add_argument("--threshold", required=True, type=float, help="Threshold for 1. round.of conplex scores") + parser.add_argument("--workdir", required=True, help="workdir") + parser.add_argument("--round", required=True, type=int, help="Round 1 or 2") + args = parser.parse_args() + + get_round_2(args.threshold, args.workdir, args.round) diff --git a/k8s/README.md b/k8s/README.md new file mode 100644 index 0000000..bf8df32 --- /dev/null +++ b/k8s/README.md @@ -0,0 +1,15 @@ +# access the current workspace +kubectl exec -it -n bioinformatics $(kubectl get pod -l app=digital-trials-nextflow -n bioinformatics | grep Run | awk '{ print $1 }') -- bash +nextflow run main.nf -profile k8s + +# DEPRECATE: cleanup error pods in bioinformatics +kubectl get pod -n bioinformatics | grep -E "Pending|Error" | awk '{print $1}' | xargs -P 10 -I {} kubectl delete pod -n bioinformatics {} + +# sync data (/data/bugra/similarity-search/utility/vec_db/nf_fingerptint) from node to workspace +kubectl delete -f k8s/job-copy-node-to-pvc.yaml; kubectl apply -f k8s/job-copy-node-to-pvc.yaml + +# run the actual nextflow jobs +kubectl apply -f k8s/job-nextflow-digital-trials.yaml + +# [WARNING] destroy the curent nextflow job +kubectl delete -f k8s/job-nextflow-digital-trials.yaml \ No newline at end of file diff --git a/k8s/deployment-worksplace.yaml b/k8s/deployment-worksplace.yaml new file mode 100644 index 0000000..cb91799 --- /dev/null +++ b/k8s/deployment-worksplace.yaml @@ -0,0 +1,73 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: digital-trials-nextflow + namespace: bioinformatics +spec: + progressDeadlineSeconds: 600 + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app: digital-trials-nextflow + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + creationTimestamp: null + labels: + app: digital-trials-nextflow + spec: + containers: + - command: + - sleep + - infinity + image: nextflow/nextflow:25.04.6 + imagePullPolicy: IfNotPresent + name: nextflow + workingDir: /mnt/dreamdock-data/digital_trials + resources: + limits: + cpu: "2" + memory: 4Gi + requests: + cpu: "1" + memory: 2Gi + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /mnt/ZINC-22 + name: zinc-22-volume + - mountPath: /mnt/dreamdock-data + name: dreamdock-volume + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + serviceAccount: nextflow-sa + serviceAccountName: nextflow-sa + terminationGracePeriodSeconds: 30 + volumes: + - name: zinc-22-volume + hostPath: + path: /mnt/ZINC-22 + type: Directory + - name: dreamdock-volume + persistentVolumeClaim: + claimName: dreamdock-data +# --- +# apiVersion: v1 +# kind: PersistentVolumeClaim +# metadata: +# name: digital-trials-data +# namespace: bioinformatics +# spec: +# accessModes: +# - ReadWriteMany +# resources: +# requests: +# storage: 6000Gi +# storageClassName: truenas-nfs \ No newline at end of file diff --git a/k8s/job-copy-node-to-pvc.yaml b/k8s/job-copy-node-to-pvc.yaml new file mode 100644 index 0000000..77e7241 --- /dev/null +++ b/k8s/job-copy-node-to-pvc.yaml @@ -0,0 +1,54 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: job-data-copy-digital-trials-node-to-pvc + namespace: bioinformatics +spec: + backoffLimit: 6 + completionMode: NonIndexed + completions: 1 + manualSelector: false + parallelism: 1 + suspend: false + template: + spec: + containers: + - args: + - | + apk add --no-cache rsync + mkdir -p /target + rsync -av --exclude .git/ --exclude .git-old/ --exclude work/ /source/ /target/digital_trials/ + command: + - /bin/sh + - -c + image: alpine + imagePullPolicy: Always + name: data-copy + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /source + name: k8s-node + - mountPath: /target + name: pvc-volume + dnsPolicy: ClusterFirst + nodeSelector: + kubernetes.io/hostname: k8s-node23 + restartPolicy: Never + schedulerName: default-scheduler + securityContext: {} + terminationGracePeriodSeconds: 30 + tolerations: + - effect: NoExecute + key: omic-app + operator: Equal + value: similarity-search + volumes: + - name: pvc-volume + persistentVolumeClaim: + claimName: dreamdock-data + - hostPath: + path: /data/bugra/digital_trials ## CHANGE ME + type: "" + name: k8s-node \ No newline at end of file diff --git a/k8s/job-nextflow-digital-trials.yaml b/k8s/job-nextflow-digital-trials.yaml new file mode 100644 index 0000000..30b2d48 --- /dev/null +++ b/k8s/job-nextflow-digital-trials.yaml @@ -0,0 +1,52 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: job-nextflow-digital-trials + namespace: bioinformatics +spec: + backoffLimit: 1 + completionMode: NonIndexed + completions: 1 + manualSelector: false + parallelism: 1 + podReplacementPolicy: TerminatingOrFailed + suspend: false + template: + spec: + containers: + - command: + - /bin/bash + - -c + - cd /mnt/dreamdock-data/digital_trials && nextflow run main.nf -profile k8s ## CHANGE ME + image: nextflow/nextflow:25.04.6 + imagePullPolicy: IfNotPresent + name: nextflow + resources: + limits: + cpu: "4" + memory: 8Gi + requests: + cpu: "2" + memory: 4Gi + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: ## CHANGE ME + - mountPath: /mnt/ZINC-22 + name: zinc-22-volume + - mountPath: /mnt/dreamdock-data + name: dreamdock-volume + dnsPolicy: ClusterFirst + restartPolicy: Never + schedulerName: default-scheduler + securityContext: {} + serviceAccount: nextflow-sa + serviceAccountName: nextflow-sa + terminationGracePeriodSeconds: 30 + volumes: ## CHANGE ME + - name: zinc-22-volume + hostPath: + path: /mnt/ZINC-22 + type: Directory + - name: dreamdock-volume + persistentVolumeClaim: + claimName: dreamdock-data diff --git a/main.nf b/main.nf new file mode 100644 index 0000000..c11dd9c --- /dev/null +++ b/main.nf @@ -0,0 +1,169 @@ +nextflow.enable.dsl=2 + +// params.container_biotransformer = 'harbor.cluster.omic.ai/omic/digitaltrials/biotransformer:latest' +// params.container_conplex = 'harbor.cluster.omic.ai/omic/digitaltrials/conplex_dig_pat:latest' +// params.container_tissue = 'harbor.cluster.omic.ai/omic/digitaltrials/tissue:latest' +// params.container_preprocess = 'harbor.cluster.omic.ai/omic/metabolite-screen:project' +// params.container_mass_screen = 'harbor.cluster.omic.ai/omic/metabolite-screen:adaptive' +// params.container_chembl = 'harbor.cluster.omic.ai/omic/digitaltrials/chembl:1.0.0' + +params.container_biotransformer = 'harbor.cluster.omic.ai/omic/digitaltrials/biotransformer@sha256:fb8bdc0b65376bc154b6051ae07079dd9a0e25c3f4c02de73c502002a94d69d5' +params.container_conplex = 'harbor.cluster.omic.ai/omic/digitaltrials/conplex_dig_pat@sha256:7a3523dba6fa01e3adc9cb79af5e1dcbd2a19d9f92e37cd10df462766078ede3' +params.container_tissue = 'harbor.cluster.omic.ai/omic/digitaltrials/tissue:1.1.2' +params.container_preprocess = 'harbor.cluster.omic.ai/omic/metabolite-screen@sha256:872c395e21abd4afea4185b269a8218da4737bd7adbb2cbe2bdf9a1b9c70db17' +params.container_mass_screen = 'harbor.cluster.omic.ai/omic/metabolite-screen:adaptive-1.2.0' +params.container_chembl = 'harbor.cluster.omic.ai/omic/digitaltrials/chembl:1.0.0' + +params.containerOptions = '--rm' // '--gpus all --rm -v /mnt:/mnt' + + +//BIOTRANSFORMER +params.project_name = 'test' +//params.ligands = '/Workspace/next/registry/pipelines/digital_trials/input' + +//IMPOTRANT!!! use HUMAN. Only one that returns what is expected. metabolism to the last step. It's only one properly set up +params.mode = 'HUMAN' // Options: SUPER, HUMAN, MASS, ORDERED # only HUMAN is fully implemented +params.bt_initial_memory = 5 // GB - starting memory for biotransformer +params.bt_growth_memory = 15 // GB - additional memory per retry +params.bt_max_retries = 10 +params.bt_fail_action = 'ignore' // 'terminate' or 'ignore' +params.bt_max_forks = 0 // 0 = unlimited, set to N to limit concurrency + +//CONPLEX +params.keep_enst = 'false' //'true' //'false' //to keep individual protein data created by conplex step +params.conplex_initial_memory = 5 // GB - starting memory for conplex +params.conplex_growth_memory = 15 // GB - additional memory per retry +params.conplex_max_retries = 1 +params.conplex_fail_action = 'ignore' // 'terminate' or 'ignore' +// params.mutated_protein_csv = '/Workspace/next/registry/pipelines/digital_trials/MANE_all_transcipts.csv' +params.threshold = 0.65 //0.65 //0.8 //0.5 //0.7 +// params.screening_batch_size =100000 //100k is ideal to optimize performance with virtual screening +params.protein_network_threshold = 0.65 //0.65 //threshold for stirng input +// NETWORK_ENRICHMENT (string-db) — Python-level urllib3 Retry handles 429/5xx blips first +// so most rate-limit failures are absorbed without spawning a Nextflow retry workdir. +params.string_max_forks = 5 // 0 = unlimited; cap below string-db's ~10 req/s throttle +params.string_max_retries = 1 // Nextflow-level fallback retries (kept low — Python retries are the primary defense) +params.string_fail_action = 'ignore' // 'terminate' or 'ignore' after max retries exhausted +params.string_initial_memory = 1 // GB - starting memory; the script reads only transcipt+conplex_score columns +params.string_growth_memory = 2 // GB - additional memory per retry attempt + +// TISSUE_DISTRIBUTION + BIO_METRICS (tissue container) — both scripts now use +// usecols= on significant_interactions.tsv so a 5+ GB input only loads the +// 'transcipt' (and 'conplex_score' for BIO_METRICS) column. +params.tissue_initial_memory = 5 // GB +params.tissue_growth_memory = 5 // GB per retry attempt +params.tissue_max_retries = 2 +params.tissue_fail_action = 'ignore' + +params.bio_initial_memory = 5 // GB +params.bio_growth_memory = 5 // GB per retry attempt +params.bio_max_retries = 2 +params.bio_fail_action = 'ignore' + +//TISSUE DISTRIBUTION / BIO PROP + +// ========================================= ALL RELEVANT FILEPATHS IN THIS SECTION =================================================== +// Defaults below are the PVC mount paths used for local/k8s execution. WES overrides +// ligands/outdir via experiment_params (it translates s3:// URIs to PVC mount paths). + +params.outdir = '/omic/eureka/digital-trial/output' + +// Ligand CSVs staged in the eureka workspace (s3://omic/eureka/digital-trial/input/ligands/) +params.ligands = '/omic/eureka/digital-trial/input/ligands' + +// Intentionally empty: no *.fasta here means PREPROCESS_PROTEIN is never scheduled and +// the pipeline screens against the prebuilt protein_zarr below. Do NOT point this at a +// directory containing .fasta files — params.container_preprocess is pinned to a digest +// that no longer exists in Harbor, so the process would fail on image pull. +params.mutated_protein_fasta = '/mnt/dreamdock-data/digital_trials/input/blank' + +// Prebuilt reference data on the dreamdock-data PVC (verified present on k8s-node23) +params.protein_zarr = '/mnt/dreamdock-data/digital_trials/zarr/protein_seq.zarr' // 7.5 MB +params.chembl_db = '/mnt/dreamdock-data/digital_trials/chembl/chembl_36.db' // 9.2 GB + +// ===================================================================================================================================== + +//BIOTRANSFORMER +include { SUPER_TRANSFORMER } from './main_biotransformer.nf' +include { HUMAN_TRANSFORMER } from './main_biotransformer.nf' +include { METABOLITES_BY_MASS } from './main_biotransformer.nf' +include { ORDERED_SEQUENCE } from './main_biotransformer.nf' +// include { GET_FINAL_METABOLITES } from './main_biotransformer.nf' +include { GET_FINAL_METABOLITES_STATIC } from './main_biotransformer.nf' +//CONPLEX +include { CONPLEX as CONPLEX_ALL } from './main_conplex.nf' +include { PREPROCESS_PROTEIN } from './main_conplex.nf' + +include { MERGE_DRUG } from './main_conplex.nf' +include { MERGE_INTERACTIONS } from './main_conplex.nf' + +include { NETWORK_ENRICHMENT } from './main_conplex.nf' +//TISSUE_DISTRIBUTION / BIO_PROP +include { TISSUE_DISTRIBUTION } from './main_tissue.nf' +include { BIO_METRICS } from './main_tissue.nf' + +workflow { + //BIOTRANSFORMER + lig_ch = Channel.fromPath("${params.ligands}/*.csv") + switch (params.mode) { + case 'SUPER': + SUPER_TRANSFORMER(lig_ch) + break + case 'HUMAN': + HUMAN_TRANSFORMER(lig_ch) + break + case 'MASS': + METABOLITES_BY_MASS(lig_ch) + break + case 'ORDERED': + ORDERED_SEQUENCE(lig_ch) + break + default: + println("Invalid mode specified: ${params.mode}") + } + chembl_ch = Channel.fromPath(params.chembl_db).collect() + // GET_FINAL_METABOLITES(HUMAN_TRANSFORMER.out) // TODO: LOCALIZE + GET_FINAL_METABOLITES_STATIC(HUMAN_TRANSFORMER.out, chembl_ch) + //CONPLEX + + protein_fasta = Channel + .fromPath("${params.mutated_protein_fasta}/*.fasta") + .collect() + // protein_csv = file(params.mutated_protein_csv) + protein_zarr = PREPROCESS_PROTEIN(protein_fasta).collect().map { it[0] } + pre_protein_zarr = Channel.fromPath(params.protein_zarr) + + // Merge both zarr channels into a single list + merged_zarr = protein_zarr.concat(pre_protein_zarr).collect() + + lig_with_id = lig_ch.map { csv -> + [csv.simpleName, csv] + } + + metabolite_with_id = GET_FINAL_METABOLITES_STATIC.out.map { txt -> + def name = txt.simpleName.replaceAll(/_out$/, '') + [name, txt] + } + + // Join on the identifier and remove it + matched_ch = lig_with_id + .join(metabolite_with_id) + // .map { id, ligand, metabolite -> [ligand, metabolite] } + + // DEBUG_MATCH(matched_ch, merged_zarr) + + CONPLEX_ALL(matched_ch, merged_zarr) + + conplex_drug_ch = CONPLEX_ALL.out.map { id, drug, interactions -> drug } + conplex_interactions_ch = CONPLEX_ALL.out.map { id, drug, interactions -> interactions } + + NETWORK_ENRICHMENT(conplex_interactions_ch) // TODO: Localize this (use human only) + //TISSUE DISTRIBUTION + TISSUE_DISTRIBUTION(conplex_interactions_ch) + + biometric_ch = matched_ch.join(CONPLEX_ALL.out) + + // BIO_METRICS(GET_FINAL_METABOLITES.out,conplex_interactions_ch,conplex_drug_ch,lig_ch) + BIO_METRICS(biometric_ch) +} + diff --git a/main_biotransformer.nf b/main_biotransformer.nf new file mode 100755 index 0000000..23ec209 --- /dev/null +++ b/main_biotransformer.nf @@ -0,0 +1,392 @@ +nextflow.enable.dsl=2 + + +process SUPER_TRANSFORMER { + container "${params.container_biotransformer}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/receptors", mode: 'copy' + debug true + + input: + path smiles_csv + + output: + path "${smiles_csv.simpleName}_out.csv" + + script: + """ + #!/bin/bash + workdir=`pwd` + cd /home/omic/biotransformer + ## Predicting Biotransformation Using the Human Super Transformer: + # This command predicts the biotransformation of molecules from an SDF input (example.csv) using the human super transformer (superbio) and annotates the metabolites with names and database IDs (from PubChem). + java -jar /home/omic/biotransformer/biotransformer -k pred -b superbio -isdf \$workdir/${smiles_csv.simpleName}.csv -ocsv \${workdir}/${smiles_csv.simpleName}_out.csv -osdf \${workdir}/${smiles_csv.simpleName}.sdf -a + """ +} + +process HUMAN_TRANSFORMER { + memory { params.bt_initial_memory.toFloat().GB + (task.attempt - 1) * params.bt_growth_memory.toFloat().GB } + errorStrategy { task.attempt <= params.bt_max_retries.toInteger() ? 'retry' : params.bt_fail_action } + maxRetries params.bt_max_retries.toInteger() + maxForks params.bt_max_forks.toInteger() ?: null + + container "${params.container_biotransformer}" + // containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/1_biotransformer", mode: 'copy' + // // Temporarily disabled debug prints + // debug true + // maxForks 5 + + input: + path smiles_csv + + output: + path "${smiles_csv.simpleName}_out.csv" + + script: + """ + #!/bin/bash + set -e + workdir=\$(pwd) + cd /home/omic/biotransformer + + # Function to get available memory percentage + get_available_mem_percent() { + free | awk '/Mem:/ {print int(\$7/\$2 * 100)}' + } + + # Function to log memory usage + log_memory() { + local pid=\$1 + echo "MEMLOG: Timestamp,BioTransformer Memory (MB),Available System Memory (%)" >&2 + while kill -0 \$pid 2>/dev/null; do + local biotrans_mem=\$(ps -o rss= -p \$pid | awk '{print \$1/1024}') + local avail_mem=\$(get_available_mem_percent) + echo "MEMLOG: \$(date '+%Y-%m-%d %H:%M:%S'),\$biotrans_mem,\$avail_mem" >&2 + if [ \$avail_mem -lt 5 ]; then + echo "MEMLOG: Available memory below 5%. Terminating process." >&2 + kill -15 \$pid + wait \$pid + echo 'PROCESS TERMINATED DUE TO LOW MEMORY' > "\${workdir}/${smiles_csv.simpleName}_out.csv" + exit 1 + fi + sleep 1800 # Sleep for 30 minutes + done + } + + # Calculate max Java heap size (90% of available memory) + # max_heap=\$(free -g | awk '/Mem:/ {print int(\$7 * 0.9)}') + + #remove unnecessary data to run biotransformer + head -n 2 "\$workdir/${smiles_csv.simpleName}.csv" > "\$workdir/${smiles_csv.simpleName}_run.csv" + + get_container_mem_bytes() { + if [ -f /sys/fs/cgroup/memory/memory.limit_in_bytes ]; then + cat /sys/fs/cgroup/memory/memory.limit_in_bytes + elif [ -f /sys/fs/cgroup/memory.max ]; then + # cgroup v2; "max" means no limit + val=\$(cat /sys/fs/cgroup/memory.max) + if [ "\$val" = "max" ]; then + # fall back to host MemTotal + awk '/MemTotal:/ {print \$2 * 1024}' /proc/meminfo + else + echo "\$val" + fi + else + # fallback to host MemTotal + awk '/MemTotal:/ {print \$2 * 1024}' /proc/meminfo + fi + } + + container_mem_bytes=\$(get_container_mem_bytes) + # 95% of container memory, in MB (integer) + heap_mb=\$(awk -v m="\$container_mem_bytes" 'BEGIN { printf "%d", (m*0.95)/(1024*1024) }') + + echo "Using Java heap: \${heap_mb}m (95% of container limit)" >&2 + + java -Xmx"\${heap_mb}m" -jar /home/omic/biotransformer/biotransformer \ + -a -k pred -b superbio \ + -isdf "\$workdir/${smiles_csv.simpleName}_run.csv" \ + -ocsv "\${workdir}/${smiles_csv.simpleName}_out.csv" \ + -osdf "\${workdir}/${smiles_csv.simpleName}.sdf" \ + -s 100 + biotrans_pid=\$! + + # Start memory logging in the background + log_memory \$biotrans_pid & + log_pid=\$! + + # Wait for the biotransformer process to finish + wait \$biotrans_pid + status=\$? + + # Stop the logging process + kill \$log_pid 2>/dev/null || true + + if [ ! -s "\${workdir}/${smiles_csv.simpleName}_out.csv" ]; then + if [ \$status -ne 0 ] && [ ! -f "\${workdir}/${smiles_csv.simpleName}_out.csv" ]; then + echo 'PROCESS FAILED' > "\${workdir}/${smiles_csv.simpleName}_out.csv" + else + echo 'NO METABOLITES' > "\${workdir}/${smiles_csv.simpleName}_out.csv" + fi + fi + """ +} + +process METABOLITES_BY_MASS { + container "${params.container_biotransformer}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/graphs", mode: 'copy' + debug true + + input: + path smiles_csv + + output: + path "${smiles_csv.simpleName}_out.csv" + + script: + """ + #!/bin/bash + workdir=`pwd` + cd /home/omic/biotransformer + ## Identifying Metabolites with Specific Masses: + # This command identifies all human metabolites of compounds in example.csv with masses 292.0946 Da and 304.0946 Da (max depth = 2), with a mass tolerance of 0.01 Da. It provides annotations when available. + java -jar /home/omic/biotransformer/biotransformer -k cid -b allHuman -isdf \$workdir/${smiles_csv.simpleName}.csv -ocsv \${workdir}/${smiles_csv.simpleName}_out.csv -osdf \${workdir}/${smiles_csv.simpleName}.sdf -s 2 -m "292.0946;304.0946" -t 0.01 -a + """ +} + +process ORDERED_SEQUENCE { + container "${params.container_biotransformer}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/screening", mode: 'copy' + debug true + errorStrategy 'ignore' + + input: + path smiles_csv + + output: + path "${smiles_csv.simpleName}_out.csv" + + script: + """ + #!/bin/bash + workdir=`pwd` + cd /home/omic/biotransformer + ## Simulating an Ordered Sequence of Metabolism: + # This command simulates an ordered sequence of metabolism for compounds in example.csv, starting with two steps of CYP450 oxidation, followed by one step of conjugation. The output is saved in an SDF file (output.sdf). + java -jar /home/omic/biotransformer/biotransformer -isdf \$workdir/${smiles_csv.simpleName}.csv -ocsv \${workdir}/${smiles_csv.simpleName}_out.csv -osdf \${workdir}/${smiles_csv.simpleName}.sdf -k pred -q "cyp450:2; phaseII:1" + """ +} + +process GET_FINAL_METABOLITES { + container "${params.container_biotransformer}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/screening", mode: 'copy' + // // Temporarily disabled debug prints + // debug true + // maxForks 1 + // errorStrategy 'ignore' + + errorStrategy { task.attempt <= 10 ? 'retry' : 'ignore' } + maxRetries 10 + + input: + path smiles_csv + + output: + path "${smiles_csv.simpleName}.txt" + + script: + """ + #!/opt/conda/envs/biotransformer/bin/python + from rdkit import Chem + import numpy as np + import pandas as pd + import requests + + #load biotransformet ouput + biotransformer = pd.read_csv('$smiles_csv') + + #check if metabolites exist + if biotransformer.shape[0] == 0: + with open('${smiles_csv.simpleName}.txt', 'w') as f: + f.write(f"NO_METABOLITES\\n") + + else: + metabolite_id = biotransformer['Metabolite ID'] + #get only metabolites that are not precursors for next metabolisam step + last_step_metabolites = biotransformer[[i not in list(biotransformer['Precursor ID']) for i in metabolite_id]] + last_step_metabolites = last_step_metabolites.drop_duplicates() + + #get only "active" ones + InChIKey = last_step_metabolites['InChIKey'] + InChIKey = pd.unique(InChIKey) + + #look if metabolite is in chembl + chembl = [] + for i in InChIKey: + curl_commend = f"https://www.ebi.ac.uk/chembl/api/data/molecule/{i}" + c = requests.get(curl_commend) + if c.status_code == 200: + #compund exists in chembl + chembl.append(True) + else: + #compund does not exists in chembl + chembl.append(False) + + + ChEMBL_bool = pd.DataFrame([InChIKey, chembl]).T.rename({0:'InChIKey',1:'in_ChEMBL'}, axis = 1) + last_step_metabolites = last_step_metabolites.merge(ChEMBL_bool, how='inner', on='InChIKey') + #if in PUBCHEM + last_step_metabolites['in_PUBCHEM'] = ~last_step_metabolites['PUBCHEM_CID'].isna() + ##logic + #if metabolite is not in PUBCHEM pass it to next step. We don't know if it's "active" + #has to be in ChEMBL and PUBCHEM to have "activity" + mask = (last_step_metabolites['in_PUBCHEM'] == False) | (np.sum(last_step_metabolites[['in_ChEMBL','in_PUBCHEM']], 1) == 2) + + #filtered metabolites + last_step_metabolites = last_step_metabolites[mask] + + #check for empty smile positions + last_step_metabolites = last_step_metabolites.reset_index() + if last_step_metabolites['SMILES'].isnull().any(): + for i in range(len(last_step_metabolites)): + if pd.isna(last_step_metabolites.at[i, 'SMILES']): + last_step_metabolites.at[i, 'SMILES'] = Chem.MolToSmiles(Chem.MolFromInchi(last_step_metabolites.at[i, 'InChI'])) + + #convert biotransformer smi to canonical smi and eliminate nonsense structures + metabolite_smi = list(np.unique(last_step_metabolites['SMILES'])) + metabolite_smi = [Chem.CanonSmiles(i) for i in metabolite_smi if Chem.MolFromSmiles(i) != None] + + #final metabolites + metabolite_smi_filteres = np.array(metabolite_smi) + + #save smi + with open('${smiles_csv.simpleName}.txt', 'w') as f: + if len(metabolite_smi_filteres) == 0: + f.write(f"NO_METABOLITES\\n") + else: + for n, line in enumerate(metabolite_smi_filteres): + f.write(f"{line}\\tmetabol_{n}\\n") + """ +} + +process GET_FINAL_METABOLITES_STATIC { + memory 1.GB + + container "${params.container_chembl}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/1b_final_metabolites", mode: 'copy' + + errorStrategy { task.attempt <= 10 ? 'retry' : 'ignore' } + maxRetries 10 + + input: + path smiles_csv + path chembl_db // Add ChEMBL SQLite database as input + + output: + path "${smiles_csv.simpleName}.txt" + + script: + """ + #!/opt/conda/bin/python + from rdkit import Chem + import numpy as np + import pandas as pd + import sqlite3 + + # Connect to ChEMBL database + conn = sqlite3.connect('file:$chembl_db?mode=ro&immutable=1', uri=True) + # conn = sqlite3.connect('$chembl_db') + + cursor = conn.cursor() + + # Load biotransformer output + biotransformer = pd.read_csv('$smiles_csv') + + # Check if metabolites exist + if biotransformer.shape[0] == 0: + with open('${smiles_csv.simpleName}.txt', 'w') as f: + f.write(f"NO_METABOLITES\\n") + + else: + # metabolite_id = biotransformer['Metabolite ID'] + # # Get only metabolites that are not precursors for next metabolism step + # last_step_metabolites = biotransformer[[i not in list(biotransformer['Precursor ID']) for i in metabolite_id]] + # last_step_metabolites = last_step_metabolites.drop_duplicates() + + # Get metabolite IDs that are NOT precursors for other metabolites + metabolite_id = biotransformer['Metabolite ID'] + precursor_ids = set(biotransformer['Precursor ID'].dropna()) # Remove NaN values + final_metabolite_mask = ~metabolite_id.isin(precursor_ids) + + # Filter to get only final metabolites + last_step_metabolites = biotransformer[final_metabolite_mask].copy() + last_step_metabolites = last_step_metabolites.drop_duplicates() + + # Get only "active" ones + InChIKey = last_step_metabolites['InChIKey'] + InChIKey = pd.unique(InChIKey) + + # Look if metabolite is in ChEMBL using local database + chembl = [] + for inchikey in InChIKey: + # Query ChEMBL SQLite database for the InChIKey + # The standard InChIKey is stored in COMPOUND_STRUCTURES table + cursor.execute(\""" + SELECT COUNT(*) + FROM COMPOUND_STRUCTURES + WHERE STANDARD_INCHI_KEY = ? + LIMIT 1 + \""", (inchikey,)) + + result = cursor.fetchone() + chembl.append(result[0] > 0) + + # ChEMBL_bool = pd.DataFrame([InChIKey, chembl]).T.rename({0:'InChIKey',1:'in_ChEMBL'}, axis=1) + ChEMBL_bool = pd.DataFrame({ + 'InChIKey': InChIKey, + 'in_ChEMBL': chembl + }) + last_step_metabolites = last_step_metabolites.merge(ChEMBL_bool, how='inner', on='InChIKey') + + # If in PUBCHEM + last_step_metabolites['in_PUBCHEM'] = ~last_step_metabolites['PUBCHEM_CID'].isna() + + # Logic + # If metabolite is not in PUBCHEM pass it to next step. We don't know if it's "active" + # Has to be in ChEMBL and PUBCHEM to have "activity" + mask = (last_step_metabolites['in_PUBCHEM'] == False) | (np.sum(last_step_metabolites[['in_ChEMBL','in_PUBCHEM']], 1) == 2) + + # Filtered metabolites + last_step_metabolites = last_step_metabolites[mask] + + # Check for empty smile positions + last_step_metabolites = last_step_metabolites.reset_index() + if last_step_metabolites['SMILES'].isnull().any(): + for i in range(len(last_step_metabolites)): + if pd.isna(last_step_metabolites.at[i, 'SMILES']): + last_step_metabolites.at[i, 'SMILES'] = Chem.MolToSmiles(Chem.MolFromInchi(last_step_metabolites.at[i, 'InChI'])) + + # Convert biotransformer smi to canonical smi and eliminate nonsense structures + metabolite_smi = list(np.unique(last_step_metabolites['SMILES'])) + metabolite_smi = [Chem.CanonSmiles(i) for i in metabolite_smi if Chem.MolFromSmiles(i) != None] + + # Final metabolites + metabolite_smi_filteres = np.array(metabolite_smi) + + # Save smi + with open('${smiles_csv.simpleName}.txt', 'w') as f: + if len(metabolite_smi_filteres) == 0: + f.write(f"NO_METABOLITES\\n") + else: + for n, line in enumerate(metabolite_smi_filteres): + f.write(f"{line}\\tmetabol_{n}\\n") + + # Close database connection + conn.close() + """ +} \ No newline at end of file diff --git a/main_conplex.nf b/main_conplex.nf new file mode 100644 index 0000000..6f2b47e --- /dev/null +++ b/main_conplex.nf @@ -0,0 +1,239 @@ +#!/usr/bin/env nextflow + + +process CONPLEX { + //debug true + + publishDir "${params.outdir}/${params.project_name}/2_conplex", mode: 'copy' + + memory { params.conplex_initial_memory.toInteger().GB + (task.attempt - 1) * params.conplex_growth_memory.toInteger().GB } + errorStrategy { task.attempt <= params.conplex_max_retries.toInteger() ? 'retry' : params.conplex_fail_action } + maxRetries params.conplex_max_retries.toInteger() + + container "${params.container_mass_screen}" + // containerOptions "--rm --gpus all" + // maxForks 1 + // errorStrategy 'ignore' + + afterScript "if [[ ${params.keep_enst} == 'false' ]]; then find . -name '*_results.zarr' -type d -exec rm -rf {} + 2>/dev/null || true; fi" + + input: + tuple( + val( id ), + path( input_drug, arity: '1') , // CSV file with SMILES column + path( input_metabol, arity: '1') // TSV file with SMILES and metabolite IDs + ) + path input_zarr, arity: '1..*' // ZARR DB holding all the protein vectors and their names + + output: + tuple( + val ( id ), + path( "*drug_scores.tsv"), + path( "*significant_interactions.tsv") + ) + + script: + """ + set -e + + # Set up trap to clean up on any exit (success, failure, or signal) + if [[ ${params.keep_enst} == 'false' ]]; then + trap 'find \$PWD -name "*_results.zarr" -type d -exec rm -rf {} + 2>/dev/null || true' EXIT + fi + + #remove unnecessary data to run conplex + head -n 2 ${input_drug} > run.csv + + # Convert drug CSV and metabolite TSV to smiles.smi format + python /app/convert.py run.csv ${input_metabol} -o smiles.smi + + # Run screening for each zarr database + for zarr_dir in ${input_zarr}; do + python /app/screen.py -i smiles.smi -z "\${zarr_dir}" + done + + # Process results and generate final outputs + python /app/get_round_2.py --threshold ${params.threshold} --workdir \$PWD --round 2 --drug-csv ${input_drug} + """ +} + +process MERGE_DRUG { + //debug true + + memory '10 GB' + + container "${params.container_mass_screen}" + // maxForks 1 + // errorStrategy 'ignore' + + input: + path 'inputs/drug_*.tsv', arity: '1..*' + + output: + path "patient_0_drug_scores.tsv" + + script: +""" +#!/opt/conda/bin/python +import pandas as pd +from pathlib import Path + +inputs_dir = Path("inputs") +tsv_files = sorted(inputs_dir.glob("drug_*.tsv")) + +dfs = [pd.read_csv(f, sep="\\t") for f in tsv_files] +df_out = pd.concat(dfs, ignore_index=True) + +df_out.to_csv("patient_0_drug_scores.tsv", sep="\\t", index=False) +""" +} + +process MERGE_INTERACTIONS { + //debug true + + memory '10 GB' + + container "${params.container_mass_screen}" + // maxForks 1 + // errorStrategy 'ignore' + + input: + path 'inputs/interaction_*.tsv' + + output: + path "patient_0_significant_interactions.tsv" + + script: +""" +#!/opt/conda/bin/python +import pandas as pd +from pathlib import Path + +inputs_dir = Path("inputs") +tsv_files = sorted(inputs_dir.glob("interaction_*.tsv")) + +dfs = [pd.read_csv(f, sep="\\t") for f in tsv_files] +df_out = pd.concat(dfs, ignore_index=True) + +df_out.to_csv("patient_0_significant_interactions.tsv", sep="\\t", index=False) +""" +} + + +process NETWORK_ENRICHMENT { + memory { params.string_initial_memory.toInteger().GB + (task.attempt - 1) * params.string_growth_memory.toInteger().GB } + + container "${params.container_conplex}" + // containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/3_string", mode: 'copy' + // // Temporarily disabled debug prints + // debug true + maxForks params.string_max_forks.toInteger() ?: null + errorStrategy { task.attempt <= params.string_max_retries.toInteger() ? 'retry' : params.string_fail_action } + maxRetries params.string_max_retries.toInteger() + + input: + path interactions + + output: + path "*_network_enrichment.tsv", emit: network_enrichment + path "*_network_interactions.tsv", emit: network_interactions + + script: + """ +#!/opt/conda/envs/conplex-dti/bin/python +import sys +import pandas as pd +import requests +from requests.adapters import HTTPAdapter +from urllib3.util.retry import Retry + +# Read ONLY the columns we use. The 'smile' column in significant_interactions.tsv +# is the bulk of the file (long SMILES strings × millions of rows for metabolite-heavy +# drugs → ~2 GB on disk), and we never reference it here. Dropping it on read cuts +# the in-memory DataFrame from ~2 GB to ~350 MB on worst-case drugs and prevents OOM. +interaction_data = pd.read_csv('$interactions', sep='\\t', usecols=['transcipt', 'conplex_score']) +interaction_data = interaction_data.sort_values('conplex_score', ascending=False) + +# string-db accepts at most 450 identifiers per call. +interaction_data = interaction_data.drop_duplicates('transcipt') +if interaction_data.shape[0] > 450: + interaction_data = interaction_data.iloc[:450] + +proteins = list(pd.unique( + interaction_data[interaction_data['conplex_score'] > ${params.protein_network_threshold}]['transcipt'] +)) +output_name = '$interactions'.split('/')[-1].split('_significant_interactions.tsv')[0] + +# Empty-identifier early exit: nothing to enrich; write empty outputs so the +# task succeeds without hitting string-db (which would otherwise return an +# error for an empty identifier list and trip a Nextflow retry). +if not proteins: + print(f"NETWORK_ENRICHMENT: no proteins above threshold for {output_name}", flush=True) + pd.DataFrame().to_csv(f'{output_name}_network_enrichment.tsv', sep='\\t') + pd.DataFrame().to_csv(f'{output_name}_network_interactions.tsv', sep='\\t') + sys.exit(0) + +# urllib3 Retry handles 429 / 5xx / connection blips transparently at the +# adapter layer — no exception reaches user code, and Nextflow does not see a +# task failure. backoff_factor=2 produces delays 2,4,8,16,32 s (capped at +# Retry.BACKOFF_MAX), respecting any Retry-After header string-db sends. +# This absorbs the common rate-limit case WITHOUT spawning a fresh workdir, +# which would just get throttled the same way. +session = requests.Session() +session.mount('https://', HTTPAdapter(max_retries=Retry( + total=5, + backoff_factor=2, + status_forcelist=[429, 500, 502, 503, 504], +))) + + +def fetch(url, kind): + r = session.get(url, timeout=60) + r.raise_for_status() + if not r.text.strip(): + raise RuntimeError(f"{kind}: 200 but empty body from string-db") + lines = r.text.split('\\n') + data = [l.split('\\t') for l in lines] + if not data or not data[0]: + raise RuntimeError(f"{kind}: malformed response (no header row)") + return pd.DataFrame(data[1:-1], columns=data[0]) + + +protein_network_list = '%0d'.join(proteins) +url_network = f'https://string-db.org/api/tsv/network?identifiers={protein_network_list}&species=9606' +url_enrichment = f'https://string-db.org/api/tsv/enrichment?identifiers={protein_network_list}&species=9606' + +enrichment_df = fetch(url_enrichment, 'enrichment') +interactions_df = fetch(url_network, 'network') + +enrichment_df.to_csv(f'{output_name}_network_enrichment.tsv', sep='\\t') +interactions_df.to_csv(f'{output_name}_network_interactions.tsv', sep='\\t') +""" +} + + +process PREPROCESS_PROTEIN { + + memory '10 GB' + accelerator 1 + + container "${params.container_preprocess}" + label 'gpu_process' + // containerOptions "--rm --gpus all" + + // errorStrategy 'ignore' + + input: + path("input_*.fasta", arity: '1..*') + + output: + path "mutated.zarr" + + script: + """ + set -e + cat input_*.fasta > merged.fasta + python /app/project.py merged.fasta mutated.zarr + """ +} \ No newline at end of file diff --git a/main_conplex.nf.old b/main_conplex.nf.old new file mode 100755 index 0000000..f60c2e2 --- /dev/null +++ b/main_conplex.nf.old @@ -0,0 +1,125 @@ +nextflow.enable.dsl=2 + + +process CONPLEX { + container "${params.container_conplex}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/receptors", mode: 'copy' + // // Temporarily disabled debug prints + // debug true + maxForks 5 + // scratch true //deletes workdir after successful completion + + input: + path smi_drug + path smi_metabolite + path mut_fasta + + output: + path "*drug_scores.tsv", emit: drug + path "*significant_interactions.tsv", emit: interactions + + script: + """ + workdir=`pwd` + + #concat mutated and reference fasta files. If it has name with _2 its mutated. + #after test is don retrun this + cat $mut_fasta /home/omic/ConPLex/MANE_referent_transcipt_reference.fasta > \$workdir/all_protein.fasta + + ### Test + #head -n 100 /home/omic/ConPLex/MANE_referent_transcipt_reference.fasta > \$workdir/test.fasta + #cat $mut_fasta \$workdir/test.fasta > \$workdir/all_protein.fasta + ### + + . activate conplex-dti + + #transform smi for conplex + python3 -c " +import sys +from rdkit import Chem +import numpy as np +import pandas as pd + +def converter(drug_csv, outname): + #open file to write drug/matabolite smi + out_file = open(outname + '.txt', 'w') + + #load drug csv; only has drug in separate lines + drug_smi_list = np.array(pd.read_csv(drug_csv)['SMILES']).tolist() + #original drugs are anotated with drug_{} + for n, smi in enumerate(drug_smi_list): + out_file.write('{}\\tdrug_{}\\n'.format(smi, n)) + + out_file.close() + +converter('$smi_drug', 'drag') + " + #concatinate drag and metabolites + cat drag.txt $smi_metabolite > \$workdir/smiles.smi + #conplex predicition 1. round + python3 /home/omic/ConPLex/conplex.py --fastas \$workdir/all_protein.fasta --smis \$workdir/smiles.smi --screening_batch_size ${params.screening_batch_size} --outdir \$workdir --split_write_df 'no' + #### this part is use to test all alternative transcripts (this part can be skipped for now, cuz we will use it for tissue specific analysis later) + ##get fasta for 2. round transcripts for proteins above threshold + #python3 /home/omic/ConPLex/get_round_2.py --threshold ${params.threshold} --workdir \$workdir --round 1 + ##conplex all transcipt for protrin above threshold + #python3 /home/omic/ConPLex/conplex.py --fastas \$workdir/round_2.fasta --smis \$workdir/smiles.smi --screening_batch_size ${params.screening_batch_size} --outdir \$workdir --split_write_df 'no' + #### + #get data for second run + python3 /home/omic/ConPLex/get_round_2.py --threshold ${params.threshold} --workdir \$workdir --round 2 + """ +} + +process NETWORK_ENRICHMENT { + container "${params.container_conplex}" + containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/receptors", mode: 'copy' + // // Temporarily disabled debug prints + // debug true + maxForks 5 + + input: + path interactions + + output: + path "*_network_enrichment.tsv", emit: network_enrichment + path "*_network_interactions.tsv", emit: network_interactions + + script: + """ +#!/opt/conda/envs/conplex-dti/bin/python +import pandas as pd +import requests + +interaction_data = pd.read_csv('$interactions', sep = '\\t') +interaction_data = interaction_data.sort_values('conplex_score', ascending=False) + +#get list of enst above threshold +protein_network_list = '%0d'.join(list(pd.unique(interaction_data[interaction_data['conplex_score'] > ${params.protein_network_threshold}]['transcipt']))) + +#get urls +url_network = f'https://string-db.org/api/tsv/network?identifiers={protein_network_list}&species=9606' +url_enrichment = f'https://string-db.org/api/tsv/enrichment?identifiers={protein_network_list}&species=9606' + +#get enrichment dataframe +r = requests.get(url_enrichment) +lines = r.text.split('\\n') # pull the text from the response object and split based on new lines +data = [l.split('\\t') for l in lines] # split each line into its components based on tabs +enrichment_df = pd.DataFrame(data[1:-1], columns = data[0]) # convert to dataframe using the first row as the column names; drop empty, final row +#get protein interaction dataframe +r = requests.get(url_network) +lines = r.text.split('\\n') # pull the text from the response object and split based on new lines +data = [l.split('\\t') for l in lines] # split each line into its components based on tabs +# convert to dataframe using the first row as the column names; drop empty, final row +interactions_df = pd.DataFrame(data[1:-1], columns = data[0]) +# dataframe with the preferred names of the two proteins and the score of the interaction +#interactions_df = interactions_df[['preferredName_A', 'preferredName_B', 'score']] + +#output name +output_name = '$interactions'.split('/')[-1].split('_significant_interactions.tsv')[0] + +#save +enrichment_df.to_csv(f'{output_name }_network_enrichment.tsv',sep='\\t') +interactions_df.to_csv(f'{output_name }_network_interactions.tsv',sep='\\t') + """ +} diff --git a/main_tissue.nf b/main_tissue.nf new file mode 100755 index 0000000..e220c37 --- /dev/null +++ b/main_tissue.nf @@ -0,0 +1,57 @@ +nextflow.enable.dsl=2 + + +process TISSUE_DISTRIBUTION { + memory { params.tissue_initial_memory.toInteger().GB + (task.attempt - 1) * params.tissue_growth_memory.toInteger().GB } + + container "${params.container_tissue}" + // containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/4_tissue_distribution", mode: 'copy' + // // Temporarily disabled debug prints + // debug true + + errorStrategy { task.attempt <= params.tissue_max_retries.toInteger() ? 'retry' : params.tissue_fail_action } + maxRetries params.tissue_max_retries.toInteger() + + input: + path interaction + + output: + path "*tissue_distribution.tsv", emit: tissue_dist + + script: + """ + # . activate tissue + python /home/omic/drug_tissue_distribution.py --file_name ${interaction} + """ +} + +process BIO_METRICS { + memory { params.bio_initial_memory.toInteger().GB + (task.attempt - 1) * params.bio_growth_memory.toInteger().GB } + + container "${params.container_tissue}" + // containerOptions "${params.containerOptions}" + publishDir "${params.outdir}/${params.project_name}/4_tissue_distribution", mode: 'copy' + // debug true + + errorStrategy { task.attempt <= params.bio_max_retries.toInteger() ? 'retry' : params.bio_fail_action } + maxRetries params.bio_max_retries.toInteger() + + input: + tuple ( + val(id), + path( target), + path( metabolites), + path( conplex_drug), + path( conplex_all_interactions), + ) + + output: + path "*_biological_properties.tsv", emit: bio_prop + + script: + """ + # . activate tissue + python /home/omic/digital_patient_extract_metrics.py --metabolites ${metabolites} --conplex_all_interactions ${conplex_all_interactions} --conplex_drug ${conplex_drug} --target ${target} + """ +} diff --git a/nextflow.config b/nextflow.config new file mode 100755 index 0000000..96a1e41 --- /dev/null +++ b/nextflow.config @@ -0,0 +1,90 @@ +manifest { + name = 'Digital Trial' + author = 'omic' + recurseSubmodules = true + homePage = 'https://gitlab.com/omic/next/registry/tools/digital-trial.git' + description = 'Digital drug protein interactions' + mainScript = 'main.nf' + nextflowVersion = '!>=21.04.3' + defaultBranch = 'master' +} + +docker { + enabled = true + temp = 'auto' + remove = true +} + +process { + withLabel: 'gpu_process' { + containerOptions = '--gpus all --rm' + + pod = [ + [nodeSelector: [gpu: 'yes', 'gpu-type': 'geforce-rtx-3090']] + ] + } + + withLabel: 'cpu_process' { + containerOptions = '--rm' + } +} + +profiles { + // Minimal k8s profile: WES injects its own profile.config via -C, which supplies the + // executor, namespace, service account, workDir and PVC mounts. Anything set here that + // WES also sets is either overridden or conflicts, so keep this deliberately sparse. + // + // NOTE: the dreamdock-data PVC must be mounted by the WES-side profile for + // params.protein_zarr and params.chembl_db (/mnt/dreamdock-data/...) to resolve. + k8s { + process.executor = 'k8s' + } + + // Full standalone k8s profile for running this pipeline directly (not via WES), + // e.g. `nextflow run main.nf -profile k8s_standalone` from a pod on the cluster. + k8s_standalone { + process.executor = 'k8s' + process.namespace = 'bioinformatics' + process.debug = true + + workDir = "/mnt/dreamdock-data/digital_trials/workdir" + + executor { + queueSize = 0 // Increase to desired concurrency +// submitRateLimit = '1 sec' // Recommended to prevent K8s API timeouts + } + + k8s { + serviceAccount = 'nextflow-sa' + namespace = 'bioinformatics' + storageClaimName = 'dreamdock-data' + storageMountPath = '/mnt/dreamdock-data' + + pullPolicy = 'IfNotPresent' + cleanup = true // delete pods after Ctrl+C or finished? + + imagePullSecrets = 'omic-registry-secret' + + // RUN AS DIFFERENT USERS + // securityContext = [fsGroup: 1000] + // securityContext = [ + // runAsUser: 1000, + // fsGroup: 1000, + // runAsNonRoot: true + // ] + } + + // Pod-level customization + process.pod = [ + [env: 'NXF_DEBUG', value: '0'], + [label: 'omic-app', value: 'dreamdock'], + [imagePullSecret: 'gitlab-registry-secret'], + // [nodeSelector: [gpu: 'yes', 'gpu-type': 'rtx-3090']], + [hostPath: '/mnt/ZINC-22/', mountPath: '/mnt/ZINC-22/'] + // [volumeClaim: 'conplex-index-builder-data', mountPath: '/mnt/conplex-index/'] + // [privileged: true], + ] + + } +} + diff --git a/nextflow.config.old b/nextflow.config.old new file mode 100755 index 0000000..4cf8d10 --- /dev/null +++ b/nextflow.config.old @@ -0,0 +1,69 @@ +manifest { + name = 'Dream Dock' + author = 'omic' + recurseSubmodules = true + homePage = 'https://gitlab.com/omic/next/registry/pipelines/dreamdock' + description = 'Small drug creation based on a protein target' + mainScript = 'main.nf' + nextflowVersion = '!>=21.04.3' + defaultBranch = 'master' +} + +docker { + enabled = true + temp = 'auto' +} + +profiles { + k8s { + process.executor = 'k8s' + process.namespace = 'bioinformatics' + process.debug = true + + workDir = "/mnt/dreamdock-data/work" + + k8s { + serviceAccount = 'nextflow-sa' + namespace = 'bioinformatics' + storageClaimName = 'dreamdock-data' + storageMountPath = '/mnt/dreamdock-data' + + pullPolicy = 'IfNotPresent' + cleanup = true // delete pods after Ctrl+C or finished? + + + // RUN AS DIFFERENT USERS + // securityContext = [fsGroup: 1000] + // securityContext = [ + // runAsUser: 1000, + // fsGroup: 1000, + // runAsNonRoot: true + // ] + } + + // Use container image + // process.container = 'harbor.cluster.omic.ai/omic/faiss-indexer:latest' + + // Pod-level customization + process.pod = [ + [env: 'NXF_DEBUG', value: '0'], + [label: 'omic-app', value: 'dreamdock'], + [imagePullSecret: 'gitlab-registry-secret'], + [hostPath: '/mnt/ZINC-22/', mountPath: '/mnt/ZINC-22/'], + [nodeSelector: [gpu: 'yes', 'gpu-type': 'rtx-3090']], + [volumeClaim: 'conplex-index-builder-data', mountPath: '/mnt/conplex-index/'] + //[nodeSelector: [gpu: 'yes', 'kubernetes.io/hostname': 'k8s-node25']], + // [privileged: true], + ] + + } + + docker { + // Docker/Singularity configuration + docker { + enabled = true + runOptions = '--rm' + } + } +} + diff --git a/nf_metabol_screen_adaptive/.nextflow.log b/nf_metabol_screen_adaptive/.nextflow.log new file mode 100644 index 0000000..5aec055 --- /dev/null +++ b/nf_metabol_screen_adaptive/.nextflow.log @@ -0,0 +1,94 @@ +Jul-21 03:07:10.282 [main] DEBUG nextflow.cli.Launcher - $> nextflow run test.nf +Jul-21 03:07:10.349 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 25.04.2 +Jul-21 03:07:10.366 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/root/.nextflow/plugins; core-plugins: nf-amazon@2.15.0,nf-azure@1.16.0,nf-cloudcache@0.4.3,nf-codecommit@0.2.3,nf-console@1.2.1,nf-google@1.21.0,nf-k8s@1.0.0,nf-tower@1.11.2,nf-wave@1.12.1 +Jul-21 03:07:10.387 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Jul-21 03:07:10.388 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Jul-21 03:07:10.390 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Jul-21 03:07:10.399 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Jul-21 03:07:10.415 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /dbs/metabolite-screen-alt/nf_metabol_screen_adaptive/nextflow.config +Jul-21 03:07:10.417 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /dbs/metabolite-screen-alt/nf_metabol_screen_adaptive/nextflow.config +Jul-21 03:07:10.442 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /root/.nextflow/secrets/store.json +Jul-21 03:07:10.445 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@759d81f3] - activable => nextflow.secret.LocalSecretsProvider@759d81f3 +Jul-21 03:07:10.450 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `standard` +Jul-21 03:07:10.819 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 by global default +Jul-21 03:07:10.830 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [confident_euler] DSL2 - revision: b00b655f5b +Jul-21 03:07:10.831 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Jul-21 03:07:10.831 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[] +Jul-21 03:07:10.871 [main] DEBUG nextflow.Session - Session UUID: 5e2c3d52-6405-43b3-a203-f96c06488e9b +Jul-21 03:07:10.871 [main] DEBUG nextflow.Session - Run name: confident_euler +Jul-21 03:07:10.871 [main] DEBUG nextflow.Session - Executor pool size: 20 +Jul-21 03:07:10.878 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Jul-21 03:07:10.883 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=60; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Jul-21 03:07:10.901 [main] DEBUG nextflow.cli.CmdRun - + Version: 25.04.2 build 5947 + Created: 13-05-2025 21:58 UTC (14:58 PDT) + System: Linux 6.8.0-52-generic + Runtime: Groovy 4.0.26 on OpenJDK 64-Bit Server VM 17.0.15+6-Ubuntu-0ubuntu122.04 + Encoding: UTF-8 (UTF-8) + Process: 3902257@alien [127.0.1.1] + CPUs: 20 - Mem: 62.6 GB (836.3 MB) - Swap: 2 GB (96.4 MB) +Jul-21 03:07:10.924 [main] DEBUG nextflow.Session - Work-dir: /dbs/metabolite-screen-alt/nf_metabol_screen_adaptive/work [ext2/ext3] +Jul-21 03:07:10.925 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /dbs/metabolite-screen-alt/nf_metabol_screen_adaptive/bin +Jul-21 03:07:10.935 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Jul-21 03:07:10.946 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Jul-21 03:07:10.967 [main] DEBUG nextflow.Session - Observer factory (v2): LinObserverFactory +Jul-21 03:07:10.993 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Jul-21 03:07:11.002 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 21; maxThreads: 1000 +Jul-21 03:07:11.051 [main] DEBUG nextflow.Session - Session start +Jul-21 03:07:11.055 [main] DEBUG nextflow.trace.TraceFileObserver - Workflow started -- trace file: /dbs/metabolite-screen-alt/nf_metabol_screen_adaptive/execution_trace.txt +Jul-21 03:07:11.178 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Jul-21 03:07:11.314 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Jul-21 03:07:11.315 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Jul-21 03:07:11.320 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Jul-21 03:07:11.324 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=20; memory=62.6 GB; capacity=20; pollInterval=100ms; dumpInterval=5m +Jul-21 03:07:11.327 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Jul-21 03:07:11.348 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'METABOLITE_SCREEN': maxForks=0; fair=false; array=0 +Jul-21 03:07:11.396 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: METABOLITE_SCREEN +Jul-21 03:07:11.397 [main] DEBUG nextflow.Session - Igniting dataflow network (1) +Jul-21 03:07:11.398 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > METABOLITE_SCREEN +Jul-21 03:07:11.399 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_9d98cafae0c3b8e5: /dbs/metabolite-screen-alt/nf_metabol_screen_adaptive/test.nf + Script_c8d2b32ed0aeeac9: /dbs/metabolite-screen-alt/nf_metabol_screen_adaptive/main.nf +Jul-21 03:07:11.399 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Jul-21 03:07:11.399 [main] DEBUG nextflow.Session - Session await +Jul-21 03:07:11.552 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Jul-21 03:07:11.554 [Task submitter] INFO nextflow.Session - [f9/21c381] Submitted process > METABOLITE_SCREEN +Jul-21 03:07:11.590 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: METABOLITE_SCREEN; status: COMPLETED; exit: 127; error: -; workDir: /dbs/metabolite-screen-alt/nf_metabol_screen_adaptive/work/f9/21c381bcd7594501602fb392f344c9] +Jul-21 03:07:11.591 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=60; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Jul-21 03:07:11.600 [TaskFinalizer-1] DEBUG nextflow.processor.TaskProcessor - Handling unexpected condition for + task: name=METABOLITE_SCREEN; work-dir=/dbs/metabolite-screen-alt/nf_metabol_screen_adaptive/work/f9/21c381bcd7594501602fb392f344c9 + error [nextflow.exception.ProcessFailedException]: Process `METABOLITE_SCREEN` terminated with an error exit status (127) +Jul-21 03:07:11.615 [TaskFinalizer-1] ERROR nextflow.processor.TaskProcessor - Error executing process > 'METABOLITE_SCREEN' + +Caused by: + Process `METABOLITE_SCREEN` terminated with an error exit status (127) + + +Command executed: + + set -e + python /app/screen.py -i metabolites-rev.tsv -z protein_seq.zarr + +Command exit status: + 127 + +Command output: + (empty) + +Command error: + .command.sh: line 3: python: command not found + +Work dir: + /dbs/metabolite-screen-alt/nf_metabol_screen_adaptive/work/f9/21c381bcd7594501602fb392f344c9 + +Tip: view the complete command output by changing to the process work dir and entering the command `cat .command.out` +Jul-21 03:07:11.621 [main] DEBUG nextflow.Session - Session await > all processes finished +Jul-21 03:07:11.628 [TaskFinalizer-1] DEBUG nextflow.Session - Session aborted -- Cause: Process `METABOLITE_SCREEN` terminated with an error exit status (127) +Jul-21 03:07:11.643 [main] DEBUG nextflow.Session - Session await > all barriers passed +Jul-21 03:07:11.643 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Jul-21 03:07:11.648 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=0; failedCount=1; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=0; abortedCount=0; succeedDuration=0ms; failedDuration=18ms; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=1; peakCpus=1; peakMemory=10 GB; ] +Jul-21 03:07:11.648 [main] DEBUG nextflow.trace.TraceFileObserver - Workflow completed -- saving trace file +Jul-21 03:07:11.649 [main] DEBUG nextflow.trace.ReportObserver - Workflow completed -- rendering execution report +Jul-21 03:07:12.149 [main] DEBUG nextflow.trace.TimelineObserver - Workflow completed -- rendering execution timeline +Jul-21 03:07:12.189 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Jul-21 03:07:12.197 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/nf_metabol_screen_adaptive/.nextflow.log.1 b/nf_metabol_screen_adaptive/.nextflow.log.1 new file mode 100644 index 0000000..15babcf --- /dev/null +++ b/nf_metabol_screen_adaptive/.nextflow.log.1 @@ -0,0 +1,67 @@ +Jul-15 07:43:54.338 [main] DEBUG nextflow.cli.Launcher - $> nextflow run -profile docker test.nf +Jul-15 07:43:54.407 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 24.10.3 +Jul-15 07:43:54.418 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/root/.nextflow/plugins; core-plugins: nf-amazon@2.9.2,nf-azure@1.10.2,nf-cloudcache@0.4.2,nf-codecommit@0.2.2,nf-console@1.1.4,nf-google@1.15.3,nf-tower@1.9.3,nf-wave@1.7.4 +Jul-15 07:43:54.443 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Jul-15 07:43:54.443 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Jul-15 07:43:54.445 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Jul-15 07:43:54.452 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Jul-15 07:43:54.463 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugrasWorkspace3/metabolite-screen-alt/nf_metabol_screen_adaptive/nextflow.config +Jul-15 07:43:54.464 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugrasWorkspace3/metabolite-screen-alt/nf_metabol_screen_adaptive/nextflow.config +Jul-15 07:43:54.479 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /root/.nextflow/secrets/store.json +Jul-15 07:43:54.481 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@17ca8b92] - activable => nextflow.secret.LocalSecretsProvider@17ca8b92 +Jul-15 07:43:54.484 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `docker` +Jul-15 07:43:54.738 [main] DEBUG nextflow.config.ConfigBuilder - Available config profiles: [k8s, docker] +Jul-15 07:43:54.752 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 by global default +Jul-15 07:43:54.763 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [boring_faggin] DSL2 - revision: b00b655f5b +Jul-15 07:43:54.764 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Jul-15 07:43:54.764 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[] +Jul-15 07:43:54.796 [main] DEBUG nextflow.Session - Session UUID: 063177a9-1ffb-407e-a41d-e6a1184c5dd1 +Jul-15 07:43:54.796 [main] DEBUG nextflow.Session - Run name: boring_faggin +Jul-15 07:43:54.797 [main] DEBUG nextflow.Session - Executor pool size: 32 +Jul-15 07:43:54.803 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Jul-15 07:43:54.807 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=96; workQueue=LinkedBlockingQueue[10000]; allowCoreThreadTimeout=false +Jul-15 07:43:54.825 [main] DEBUG nextflow.cli.CmdRun - + Version: 24.10.3 build 5933 + Created: 16-12-2024 15:34 UTC (07:34 PDT) + System: Linux 6.8.0-58-generic + Runtime: Groovy 4.0.23 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 3458331@bigbertha [127.0.1.1] + CPUs: 32 - Mem: 61.9 GB (4.3 GB) - Swap: 8 GB (128 KB) +Jul-15 07:43:54.842 [main] DEBUG nextflow.Session - Work-dir: /data/bugrasWorkspace3/metabolite-screen-alt/nf_metabol_screen_adaptive/work [ext2/ext3] +Jul-15 07:43:54.842 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugrasWorkspace3/metabolite-screen-alt/nf_metabol_screen_adaptive/bin +Jul-15 07:43:54.848 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Jul-15 07:43:54.853 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Jul-15 07:43:54.872 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Jul-15 07:43:54.877 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 33; maxThreads: 1000 +Jul-15 07:43:55.002 [main] DEBUG nextflow.Session - Session start +Jul-15 07:43:55.003 [main] DEBUG nextflow.trace.TraceFileObserver - Workflow started -- trace file: /data/bugrasWorkspace3/metabolite-screen-alt/nf_metabol_screen_adaptive/execution_trace.txt +Jul-15 07:43:55.083 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Jul-15 07:43:55.196 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Jul-15 07:43:55.196 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Jul-15 07:43:55.199 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Jul-15 07:43:55.204 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=32; memory=61.9 GB; capacity=32; pollInterval=100ms; dumpInterval=5m +Jul-15 07:43:55.205 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Jul-15 07:43:55.246 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: METABOLITE_SCREEN +Jul-15 07:43:55.247 [main] DEBUG nextflow.Session - Igniting dataflow network (1) +Jul-15 07:43:55.247 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > METABOLITE_SCREEN +Jul-15 07:43:55.247 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_9d98cafae0c3b8e5: /data/bugrasWorkspace3/metabolite-screen-alt/nf_metabol_screen_adaptive/test.nf + Script_c8d2b32ed0aeeac9: /data/bugrasWorkspace3/metabolite-screen-alt/nf_metabol_screen_adaptive/./main.nf +Jul-15 07:43:55.247 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Jul-15 07:43:55.247 [main] DEBUG nextflow.Session - Session await +Jul-15 07:43:55.334 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Jul-15 07:43:55.336 [Task submitter] INFO nextflow.Session - [5b/95e3bb] Submitted process > METABOLITE_SCREEN +Jul-15 07:44:05.790 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: METABOLITE_SCREEN; status: COMPLETED; exit: 0; error: -; workDir: /data/bugrasWorkspace3/metabolite-screen-alt/nf_metabol_screen_adaptive/work/5b/95e3bb5e9a086140ca514eab04dd78] +Jul-15 07:44:05.791 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=96; workQueue=LinkedBlockingQueue[10000]; allowCoreThreadTimeout=false +Jul-15 07:44:06.031 [main] DEBUG nextflow.Session - Session await > all processes finished +Jul-15 07:44:06.090 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Jul-15 07:44:06.090 [main] DEBUG nextflow.Session - Session await > all barriers passed +Jul-15 07:44:06.091 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'TaskFinalizer' shutdown completed (hard=false) +Jul-15 07:44:06.094 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=1; failedCount=0; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=0; abortedCount=0; succeedDuration=2.8s; failedDuration=0ms; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=1; peakCpus=1; peakMemory=10 GB; ] +Jul-15 07:44:06.094 [main] DEBUG nextflow.trace.TraceFileObserver - Workflow completed -- saving trace file +Jul-15 07:44:06.095 [main] DEBUG nextflow.trace.ReportObserver - Workflow completed -- rendering execution report +Jul-15 07:44:06.349 [main] DEBUG nextflow.trace.TimelineObserver - Workflow completed -- rendering execution timeline +Jul-15 07:44:06.431 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Jul-15 07:44:06.436 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'FileTransfer' shutdown completed (hard=false) +Jul-15 07:44:06.436 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/nf_metabol_screen_adaptive/.nextflow.log.2 b/nf_metabol_screen_adaptive/.nextflow.log.2 new file mode 100644 index 0000000..9092994 --- /dev/null +++ b/nf_metabol_screen_adaptive/.nextflow.log.2 @@ -0,0 +1,80 @@ +Jul-11 04:23:14.724 [main] DEBUG nextflow.cli.Launcher - $> nextflow run -profile docker test.nf -bg -with-tower 'http://nucleus.omic.ai:8000/api' +Jul-11 04:23:14.779 [main] INFO nextflow.cli.CmdRun - N E X T F L O W ~ version 24.10.3 +Jul-11 04:23:14.789 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/root/.nextflow/plugins; core-plugins: nf-amazon@2.9.2,nf-azure@1.10.2,nf-cloudcache@0.4.2,nf-codecommit@0.2.2,nf-console@1.1.4,nf-google@1.15.3,nf-tower@1.9.3,nf-wave@1.7.4 +Jul-11 04:23:14.808 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Jul-11 04:23:14.808 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Jul-11 04:23:14.810 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Jul-11 04:23:14.820 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Jul-11 04:23:14.831 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/nextflow.config +Jul-11 04:23:14.832 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/nextflow.config +Jul-11 04:23:14.849 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /root/.nextflow/secrets/store.json +Jul-11 04:23:14.851 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@26a94fa5] - activable => nextflow.secret.LocalSecretsProvider@26a94fa5 +Jul-11 04:23:14.853 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `docker` +Jul-11 04:23:15.119 [main] DEBUG nextflow.config.ConfigBuilder - Available config profiles: [k8s, docker] +Jul-11 04:23:15.133 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 by global default +Jul-11 04:23:15.145 [main] INFO nextflow.cli.CmdRun - Launching `test.nf` [admiring_magritte] DSL2 - revision: 5f66a2b283 +Jul-11 04:23:15.145 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Jul-11 04:23:15.146 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[nf-tower@1.9.3] +Jul-11 04:23:15.146 [main] DEBUG nextflow.plugin.PluginUpdater - Installing plugin nf-tower version: 1.9.3 +Jul-11 04:23:15.150 [main] INFO org.pf4j.AbstractPluginManager - Plugin 'nf-tower@1.9.3' resolved +Jul-11 04:23:15.150 [main] INFO org.pf4j.AbstractPluginManager - Start plugin 'nf-tower@1.9.3' +Jul-11 04:23:15.165 [main] DEBUG nextflow.plugin.BasePlugin - Plugin started nf-tower@1.9.3 +Jul-11 04:23:15.195 [main] DEBUG nextflow.Session - Session UUID: 8abf60bb-5459-4d36-9886-d8f0064971ac +Jul-11 04:23:15.195 [main] DEBUG nextflow.Session - Run name: admiring_magritte +Jul-11 04:23:15.195 [main] DEBUG nextflow.Session - Executor pool size: 32 +Jul-11 04:23:15.200 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Jul-11 04:23:15.203 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=96; workQueue=LinkedBlockingQueue[10000]; allowCoreThreadTimeout=false +Jul-11 04:23:15.205 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/nextflow.config +Jul-11 04:23:15.205 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/nextflow.config +Jul-11 04:23:15.206 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `docker` +Jul-11 04:23:15.243 [main] DEBUG nextflow.config.ConfigBuilder - Available config profiles: [k8s, docker] +Jul-11 04:23:15.269 [main] DEBUG nextflow.cli.CmdRun - + Version: 24.10.3 build 5933 + Created: 16-12-2024 15:34 UTC (07:34 PDT) + System: Linux 6.8.0-58-generic + Runtime: Groovy 4.0.23 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 2298940@bigbertha [127.0.1.1] + CPUs: 32 - Mem: 61.9 GB (882.4 MB) - Swap: 8 GB (972 KB) +Jul-11 04:23:15.288 [main] DEBUG nextflow.Session - Work-dir: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/work [ext2/ext3] +Jul-11 04:23:15.288 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/bin +Jul-11 04:23:15.295 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Jul-11 04:23:15.301 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Jul-11 04:23:15.309 [main] DEBUG nextflow.Session - Observer factory: TowerFactory +Jul-11 04:23:15.438 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Jul-11 04:23:15.444 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 33; maxThreads: 1000 +Jul-11 04:23:15.651 [main] DEBUG nextflow.Session - Session start +Jul-11 04:23:15.653 [main] DEBUG nextflow.trace.TraceFileObserver - Workflow started -- trace file: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/execution_trace.txt +Jul-11 04:23:15.656 [main] DEBUG io.seqera.tower.plugin.TowerClient - Creating Seqera Platform observer -- endpoint=http://nucleus.omic.ai:8000/api; requestInterval=1s; aliveInterval=1m; maxRetries=5; backOffBase=3; backOffDelay=250 +Jul-11 04:23:15.893 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Jul-11 04:23:15.972 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Jul-11 04:23:15.973 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Jul-11 04:23:15.975 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Jul-11 04:23:15.979 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=32; memory=61.9 GB; capacity=32; pollInterval=100ms; dumpInterval=5m +Jul-11 04:23:15.980 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Jul-11 04:23:16.020 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: METABOLITE_SCREEN +Jul-11 04:23:16.140 [main] INFO io.seqera.tower.plugin.TowerClient - Monitor the execution with Seqera Platform using this URL: http://localhost:8000/watch/J8JA6yEb +Jul-11 04:23:16.141 [main] DEBUG nextflow.Session - Igniting dataflow network (1) +Jul-11 04:23:16.141 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > METABOLITE_SCREEN +Jul-11 04:23:16.141 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_c8d2b32ed0aeeac9: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/./main.nf + Script_85e5efa6aea507c6: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/test.nf +Jul-11 04:23:16.141 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Jul-11 04:23:16.141 [main] DEBUG nextflow.Session - Session await +Jul-11 04:23:16.243 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Jul-11 04:23:16.245 [Task submitter] INFO nextflow.Session - [cf/a7b064] Submitted process > METABOLITE_SCREEN +Jul-11 04:23:34.062 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: METABOLITE_SCREEN; status: COMPLETED; exit: 0; error: -; workDir: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/work/cf/a7b0643787b68bed3189f63698ed53] +Jul-11 04:23:34.063 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=96; workQueue=LinkedBlockingQueue[10000]; allowCoreThreadTimeout=false +Jul-11 04:23:34.299 [main] DEBUG nextflow.Session - Session await > all processes finished +Jul-11 04:23:34.362 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Jul-11 04:23:34.362 [main] DEBUG nextflow.Session - Session await > all barriers passed +Jul-11 04:23:34.364 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'TaskFinalizer' shutdown completed (hard=false) +Jul-11 04:23:34.366 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=1; failedCount=0; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=0; abortedCount=0; succeedDuration=7.7s; failedDuration=0ms; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=1; peakCpus=1; peakMemory=10 GB; ] +Jul-11 04:23:34.366 [main] DEBUG nextflow.trace.TraceFileObserver - Workflow completed -- saving trace file +Jul-11 04:23:34.367 [main] DEBUG nextflow.trace.ReportObserver - Workflow completed -- rendering execution report +Jul-11 04:23:34.614 [main] DEBUG nextflow.trace.TimelineObserver - Workflow completed -- rendering execution timeline +Jul-11 04:23:34.743 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Jul-11 04:23:34.748 [main] INFO org.pf4j.AbstractPluginManager - Stop plugin 'nf-tower@1.9.3' +Jul-11 04:23:34.748 [main] DEBUG nextflow.plugin.BasePlugin - Plugin stopped nf-tower +Jul-11 04:23:34.749 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'FileTransfer' shutdown completed (hard=false) +Jul-11 04:23:34.749 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/nf_metabol_screen_adaptive/.nextflow.log.3 b/nf_metabol_screen_adaptive/.nextflow.log.3 new file mode 100644 index 0000000..ed29f43 --- /dev/null +++ b/nf_metabol_screen_adaptive/.nextflow.log.3 @@ -0,0 +1,67 @@ +Jul-10 05:08:04.417 [main] DEBUG nextflow.cli.Launcher - $> nextflow run -profile docker test.nf +Jul-10 05:08:04.464 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 24.10.3 +Jul-10 05:08:04.474 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/root/.nextflow/plugins; core-plugins: nf-amazon@2.9.2,nf-azure@1.10.2,nf-cloudcache@0.4.2,nf-codecommit@0.2.2,nf-console@1.1.4,nf-google@1.15.3,nf-tower@1.9.3,nf-wave@1.7.4 +Jul-10 05:08:04.515 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Jul-10 05:08:04.516 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Jul-10 05:08:04.517 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Jul-10 05:08:04.523 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Jul-10 05:08:04.533 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/nextflow.config +Jul-10 05:08:04.534 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/nextflow.config +Jul-10 05:08:04.549 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /root/.nextflow/secrets/store.json +Jul-10 05:08:04.551 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@17ca8b92] - activable => nextflow.secret.LocalSecretsProvider@17ca8b92 +Jul-10 05:08:04.556 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `docker` +Jul-10 05:08:04.812 [main] DEBUG nextflow.config.ConfigBuilder - Available config profiles: [k8s, docker] +Jul-10 05:08:04.827 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 by global default +Jul-10 05:08:04.834 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [drunk_swartz] DSL2 - revision: 8594c93ec6 +Jul-10 05:08:04.834 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Jul-10 05:08:04.835 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[] +Jul-10 05:08:04.859 [main] DEBUG nextflow.Session - Session UUID: 925b41d5-7b1c-4ed9-b34c-88420509e2e8 +Jul-10 05:08:04.859 [main] DEBUG nextflow.Session - Run name: drunk_swartz +Jul-10 05:08:04.859 [main] DEBUG nextflow.Session - Executor pool size: 32 +Jul-10 05:08:04.863 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Jul-10 05:08:04.866 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=96; workQueue=LinkedBlockingQueue[10000]; allowCoreThreadTimeout=false +Jul-10 05:08:04.878 [main] DEBUG nextflow.cli.CmdRun - + Version: 24.10.3 build 5933 + Created: 16-12-2024 15:34 UTC (07:34 PDT) + System: Linux 6.8.0-58-generic + Runtime: Groovy 4.0.23 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 324567@bigbertha [127.0.1.1] + CPUs: 32 - Mem: 61.9 GB (4 GB) - Swap: 8 GB (5.6 MB) +Jul-10 05:08:04.889 [main] DEBUG nextflow.Session - Work-dir: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/work [ext2/ext3] +Jul-10 05:08:04.889 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/bin +Jul-10 05:08:04.894 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Jul-10 05:08:04.899 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Jul-10 05:08:04.921 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Jul-10 05:08:04.926 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 33; maxThreads: 1000 +Jul-10 05:08:05.053 [main] DEBUG nextflow.Session - Session start +Jul-10 05:08:05.054 [main] DEBUG nextflow.trace.TraceFileObserver - Workflow started -- trace file: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/execution_trace.txt +Jul-10 05:08:05.123 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Jul-10 05:08:05.213 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Jul-10 05:08:05.213 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Jul-10 05:08:05.216 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Jul-10 05:08:05.220 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=32; memory=61.9 GB; capacity=32; pollInterval=100ms; dumpInterval=5m +Jul-10 05:08:05.221 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Jul-10 05:08:05.260 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: METABOLITE_SCREEN +Jul-10 05:08:05.261 [main] DEBUG nextflow.Session - Igniting dataflow network (1) +Jul-10 05:08:05.261 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > METABOLITE_SCREEN +Jul-10 05:08:05.261 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_c8d2b32ed0aeeac9: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/./main.nf + Script_041bcf7aceb7d897: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/test.nf +Jul-10 05:08:05.261 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Jul-10 05:08:05.261 [main] DEBUG nextflow.Session - Session await +Jul-10 05:08:05.359 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Jul-10 05:08:05.360 [Task submitter] INFO nextflow.Session - [0a/8843c6] Submitted process > METABOLITE_SCREEN +Jul-10 05:08:37.851 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: METABOLITE_SCREEN; status: COMPLETED; exit: 0; error: -; workDir: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/work/0a/8843c652f011dbd021cd836c526d44] +Jul-10 05:08:37.852 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=96; workQueue=LinkedBlockingQueue[10000]; allowCoreThreadTimeout=false +Jul-10 05:08:38.827 [main] DEBUG nextflow.Session - Session await > all processes finished +Jul-10 05:08:38.852 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Jul-10 05:08:38.852 [main] DEBUG nextflow.Session - Session await > all barriers passed +Jul-10 05:08:38.853 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'TaskFinalizer' shutdown completed (hard=false) +Jul-10 05:08:38.857 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=1; failedCount=0; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=0; abortedCount=0; succeedDuration=13.6s; failedDuration=0ms; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=1; peakCpus=1; peakMemory=10 GB; ] +Jul-10 05:08:38.857 [main] DEBUG nextflow.trace.TraceFileObserver - Workflow completed -- saving trace file +Jul-10 05:08:38.858 [main] DEBUG nextflow.trace.ReportObserver - Workflow completed -- rendering execution report +Jul-10 05:08:39.681 [main] DEBUG nextflow.trace.TimelineObserver - Workflow completed -- rendering execution timeline +Jul-10 05:08:39.893 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Jul-10 05:08:39.897 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'FileTransfer' shutdown completed (hard=false) +Jul-10 05:08:39.897 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/nf_metabol_screen_adaptive/.nextflow.log.4 b/nf_metabol_screen_adaptive/.nextflow.log.4 new file mode 100644 index 0000000..435e7c3 --- /dev/null +++ b/nf_metabol_screen_adaptive/.nextflow.log.4 @@ -0,0 +1,67 @@ +Jul-10 05:06:57.796 [main] DEBUG nextflow.cli.Launcher - $> nextflow run -profile docker test.nf +Jul-10 05:06:57.858 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 24.10.3 +Jul-10 05:06:57.870 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/root/.nextflow/plugins; core-plugins: nf-amazon@2.9.2,nf-azure@1.10.2,nf-cloudcache@0.4.2,nf-codecommit@0.2.2,nf-console@1.1.4,nf-google@1.15.3,nf-tower@1.9.3,nf-wave@1.7.4 +Jul-10 05:06:57.889 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Jul-10 05:06:57.890 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Jul-10 05:06:57.891 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Jul-10 05:06:57.899 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Jul-10 05:06:57.909 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/nextflow.config +Jul-10 05:06:57.911 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/nextflow.config +Jul-10 05:06:57.927 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /root/.nextflow/secrets/store.json +Jul-10 05:06:57.929 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@17ca8b92] - activable => nextflow.secret.LocalSecretsProvider@17ca8b92 +Jul-10 05:06:57.931 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `docker` +Jul-10 05:06:58.207 [main] DEBUG nextflow.config.ConfigBuilder - Available config profiles: [k8s, docker] +Jul-10 05:06:58.222 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 by global default +Jul-10 05:06:58.232 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [nice_lagrange] DSL2 - revision: 8594c93ec6 +Jul-10 05:06:58.233 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Jul-10 05:06:58.233 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[] +Jul-10 05:06:58.266 [main] DEBUG nextflow.Session - Session UUID: 63ec0e24-1334-45e4-a396-bb1b7734bb1c +Jul-10 05:06:58.266 [main] DEBUG nextflow.Session - Run name: nice_lagrange +Jul-10 05:06:58.266 [main] DEBUG nextflow.Session - Executor pool size: 32 +Jul-10 05:06:58.271 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Jul-10 05:06:58.274 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=96; workQueue=LinkedBlockingQueue[10000]; allowCoreThreadTimeout=false +Jul-10 05:06:58.292 [main] DEBUG nextflow.cli.CmdRun - + Version: 24.10.3 build 5933 + Created: 16-12-2024 15:34 UTC (07:34 PDT) + System: Linux 6.8.0-58-generic + Runtime: Groovy 4.0.23 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 318707@bigbertha [127.0.1.1] + CPUs: 32 - Mem: 61.9 GB (5.9 GB) - Swap: 8 GB (692 KB) +Jul-10 05:06:58.308 [main] DEBUG nextflow.Session - Work-dir: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/work [ext2/ext3] +Jul-10 05:06:58.309 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/bin +Jul-10 05:06:58.314 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Jul-10 05:06:58.319 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Jul-10 05:06:58.338 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Jul-10 05:06:58.344 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 33; maxThreads: 1000 +Jul-10 05:06:58.461 [main] DEBUG nextflow.Session - Session start +Jul-10 05:06:58.463 [main] DEBUG nextflow.trace.TraceFileObserver - Workflow started -- trace file: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/execution_trace.txt +Jul-10 05:06:58.544 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Jul-10 05:06:58.620 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Jul-10 05:06:58.620 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Jul-10 05:06:58.623 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Jul-10 05:06:58.627 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=32; memory=61.9 GB; capacity=32; pollInterval=100ms; dumpInterval=5m +Jul-10 05:06:58.628 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Jul-10 05:06:58.667 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: METABOLITE_SCREEN +Jul-10 05:06:58.668 [main] DEBUG nextflow.Session - Igniting dataflow network (1) +Jul-10 05:06:58.668 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > METABOLITE_SCREEN +Jul-10 05:06:58.668 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_c8d2b32ed0aeeac9: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/./main.nf + Script_041bcf7aceb7d897: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/test.nf +Jul-10 05:06:58.668 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Jul-10 05:06:58.668 [main] DEBUG nextflow.Session - Session await +Jul-10 05:06:58.759 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Jul-10 05:06:58.761 [Task submitter] INFO nextflow.Session - [b1/b3e41f] Submitted process > METABOLITE_SCREEN +Jul-10 05:07:34.617 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: METABOLITE_SCREEN; status: COMPLETED; exit: 0; error: -; workDir: /data/bugrasWorkspace3/metabolite-screen/nf_metabol_screen_adaptive/work/b1/b3e41f08bc233c93e7ac82702bb856] +Jul-10 05:07:34.617 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=96; workQueue=LinkedBlockingQueue[10000]; allowCoreThreadTimeout=false +Jul-10 05:07:35.660 [main] DEBUG nextflow.Session - Session await > all processes finished +Jul-10 05:07:35.716 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Jul-10 05:07:35.716 [main] DEBUG nextflow.Session - Session await > all barriers passed +Jul-10 05:07:35.718 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'TaskFinalizer' shutdown completed (hard=false) +Jul-10 05:07:35.721 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=1; failedCount=0; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=0; abortedCount=0; succeedDuration=15.9s; failedDuration=0ms; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=1; peakCpus=1; peakMemory=10 GB; ] +Jul-10 05:07:35.721 [main] DEBUG nextflow.trace.TraceFileObserver - Workflow completed -- saving trace file +Jul-10 05:07:35.722 [main] DEBUG nextflow.trace.ReportObserver - Workflow completed -- rendering execution report +Jul-10 05:07:35.973 [main] DEBUG nextflow.trace.TimelineObserver - Workflow completed -- rendering execution timeline +Jul-10 05:07:36.099 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Jul-10 05:07:36.104 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'FileTransfer' shutdown completed (hard=false) +Jul-10 05:07:36.104 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/nf_metabol_screen_adaptive/.nextflow.log.5 b/nf_metabol_screen_adaptive/.nextflow.log.5 new file mode 100644 index 0000000..8e005e9 --- /dev/null +++ b/nf_metabol_screen_adaptive/.nextflow.log.5 @@ -0,0 +1,69 @@ +Jul-03 12:08:35.777 [main] DEBUG nextflow.cli.Launcher - $> nextflow run -profile docker test.nf +Jul-03 12:08:35.914 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 25.04.3 +Jul-03 12:08:35.944 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/home/omic/.nextflow/plugins; core-plugins: nf-amazon@2.15.0,nf-azure@1.16.0,nf-cloudcache@0.4.3,nf-codecommit@0.2.3,nf-console@1.2.1,nf-google@1.21.0,nf-k8s@1.0.0,nf-tower@1.11.3,nf-wave@1.12.1 +Jul-03 12:08:35.978 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Jul-03 12:08:35.979 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Jul-03 12:08:35.983 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Jul-03 12:08:35.996 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Jul-03 12:08:36.024 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugra/metabolite-screen/nf_metabol_screen/nextflow.config +Jul-03 12:08:36.028 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugra/metabolite-screen/nf_metabol_screen/nextflow.config +Jul-03 12:08:36.073 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /home/omic/.nextflow/secrets/store.json +Jul-03 12:08:36.078 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@29314cc9] - activable => nextflow.secret.LocalSecretsProvider@29314cc9 +Jul-03 12:08:36.086 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `docker` +Jul-03 12:08:36.792 [main] DEBUG nextflow.config.ConfigBuilder - Available config profiles: [k8s, docker] +Jul-03 12:08:36.833 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 by global default +Jul-03 12:08:36.850 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [insane_woese] DSL2 - revision: 063b5cd9a9 +Jul-03 12:08:36.852 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Jul-03 12:08:36.852 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[] +Jul-03 12:08:36.922 [main] DEBUG nextflow.Session - Session UUID: a62b6efd-60bb-4b97-a6e1-a68592f7d53f +Jul-03 12:08:36.923 [main] DEBUG nextflow.Session - Run name: insane_woese +Jul-03 12:08:36.923 [main] DEBUG nextflow.Session - Executor pool size: 80 +Jul-03 12:08:36.935 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Jul-03 12:08:36.943 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Jul-03 12:08:36.975 [main] DEBUG nextflow.cli.CmdRun - + Version: 25.04.3 build 5949 + Created: 02-06-2025 20:56 UTC + System: Linux 6.11.0-26-generic + Runtime: Groovy 4.0.26 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 3786813@k8s-node23 [127.0.1.1] + CPUs: 80 - Mem: 251.6 GB (220.6 GB) - Swap: 0 (0) +Jul-03 12:08:37.006 [main] DEBUG nextflow.Session - Work-dir: /data/bugra/metabolite-screen/nf_metabol_screen/work [btrfs] +Jul-03 12:08:37.007 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugra/metabolite-screen/nf_metabol_screen/bin +Jul-03 12:08:37.022 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Jul-03 12:08:37.034 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Jul-03 12:08:37.060 [main] DEBUG nextflow.Session - Observer factory (v2): LinObserverFactory +Jul-03 12:08:37.087 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Jul-03 12:08:37.098 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 81; maxThreads: 1000 +Jul-03 12:08:37.228 [main] DEBUG nextflow.Session - Session start +Jul-03 12:08:37.233 [main] DEBUG nextflow.trace.TraceFileObserver - Workflow started -- trace file: /data/bugra/metabolite-screen/nf_metabol_screen/execution_trace.txt +Jul-03 12:08:37.394 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Jul-03 12:08:37.590 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null +Jul-03 12:08:37.591 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local' +Jul-03 12:08:37.598 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local +Jul-03 12:08:37.609 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=80; memory=251.6 GB; capacity=80; pollInterval=100ms; dumpInterval=5m +Jul-03 12:08:37.612 [main] DEBUG n.processor.TaskPollingMonitor - >>> barrier register (monitor: local) +Jul-03 12:08:37.646 [main] DEBUG nextflow.processor.TaskProcessor - Creating process 'METABOLITE_SCREEN': maxForks=0; fair=false; array=0 +Jul-03 12:08:37.724 [main] DEBUG nextflow.Session - Workflow process names [dsl2]: METABOLITE_SCREEN +Jul-03 12:08:37.726 [main] DEBUG nextflow.Session - Igniting dataflow network (1) +Jul-03 12:08:37.727 [main] DEBUG nextflow.processor.TaskProcessor - Starting process > METABOLITE_SCREEN +Jul-03 12:08:37.728 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_181c5ac3efe09ab5: /data/bugra/metabolite-screen/nf_metabol_screen/main.nf + Script_3b80613f4955047b: /data/bugra/metabolite-screen/nf_metabol_screen/test.nf +Jul-03 12:08:37.728 [main] DEBUG nextflow.script.ScriptRunner - > Awaiting termination +Jul-03 12:08:37.728 [main] DEBUG nextflow.Session - Session await +Jul-03 12:08:38.010 [Task submitter] DEBUG n.executor.local.LocalTaskHandler - Launch cmd line: /bin/bash -ue .command.run +Jul-03 12:08:38.016 [Task submitter] INFO nextflow.Session - [3d/10f68f] Submitted process > METABOLITE_SCREEN +Jul-03 12:08:44.784 [Task monitor] DEBUG n.processor.TaskPollingMonitor - Task completed > TaskHandler[id: 1; name: METABOLITE_SCREEN; status: COMPLETED; exit: 0; error: -; workDir: /data/bugra/metabolite-screen/nf_metabol_screen/work/3d/10f68ffcfb09a7b35f3b90f43efbd9] +Jul-03 12:08:44.786 [Task monitor] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'TaskFinalizer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Jul-03 12:08:45.543 [main] DEBUG nextflow.Session - Session await > all processes finished +Jul-03 12:08:45.581 [Task monitor] DEBUG n.processor.TaskPollingMonitor - <<< barrier arrives (monitor: local) - terminating tasks monitor poll loop +Jul-03 12:08:45.582 [main] DEBUG nextflow.Session - Session await > all barriers passed +Jul-03 12:08:45.586 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'TaskFinalizer' shutdown completed (hard=false) +Jul-03 12:08:45.596 [main] DEBUG n.trace.WorkflowStatsObserver - Workflow completed > WorkflowStats[succeededCount=1; failedCount=0; ignoredCount=0; cachedCount=0; pendingCount=0; submittedCount=0; runningCount=0; retriesCount=0; abortedCount=0; succeedDuration=3.7s; failedDuration=0ms; cachedDuration=0ms;loadCpus=0; loadMemory=0; peakRunning=1; peakCpus=1; peakMemory=10 GB; ] +Jul-03 12:08:45.596 [main] DEBUG nextflow.trace.TraceFileObserver - Workflow completed -- saving trace file +Jul-03 12:08:45.598 [main] DEBUG nextflow.trace.ReportObserver - Workflow completed -- rendering execution report +Jul-03 12:08:46.431 [main] DEBUG nextflow.trace.TimelineObserver - Workflow completed -- rendering execution timeline +Jul-03 12:08:46.525 [main] DEBUG nextflow.cache.CacheDB - Closing CacheDB done +Jul-03 12:08:46.538 [main] DEBUG nextflow.util.ThreadPoolManager - Thread pool 'FileTransfer' shutdown completed (hard=false) +Jul-03 12:08:46.538 [main] DEBUG nextflow.script.ScriptRunner - > Execution complete -- Goodbye diff --git a/nf_metabol_screen_adaptive/.nextflow.log.6 b/nf_metabol_screen_adaptive/.nextflow.log.6 new file mode 100644 index 0000000..c2cf3bd --- /dev/null +++ b/nf_metabol_screen_adaptive/.nextflow.log.6 @@ -0,0 +1,78 @@ +Jul-03 12:08:15.992 [main] DEBUG nextflow.cli.Launcher - $> nextflow run -profile docker test.nf +Jul-03 12:08:16.116 [main] DEBUG nextflow.cli.CmdRun - N E X T F L O W ~ version 25.04.3 +Jul-03 12:08:16.165 [main] DEBUG nextflow.plugin.PluginsFacade - Setting up plugin manager > mode=prod; embedded=false; plugins-dir=/home/omic/.nextflow/plugins; core-plugins: nf-amazon@2.15.0,nf-azure@1.16.0,nf-cloudcache@0.4.3,nf-codecommit@0.2.3,nf-console@1.2.1,nf-google@1.21.0,nf-k8s@1.0.0,nf-tower@1.11.3,nf-wave@1.12.1 +Jul-03 12:08:16.218 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] +Jul-03 12:08:16.219 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] +Jul-03 12:08:16.223 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.12.0 in 'deployment' mode +Jul-03 12:08:16.239 [main] INFO org.pf4j.AbstractPluginManager - No plugins +Jul-03 12:08:16.269 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /data/bugra/metabolite-screen/nf_metabol_screen/nextflow.config +Jul-03 12:08:16.274 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /data/bugra/metabolite-screen/nf_metabol_screen/nextflow.config +Jul-03 12:08:16.319 [main] DEBUG n.secret.LocalSecretsProvider - Secrets store: /home/omic/.nextflow/secrets/store.json +Jul-03 12:08:16.323 [main] DEBUG nextflow.secret.SecretsLoader - Discovered secrets providers: [nextflow.secret.LocalSecretsProvider@1ddd3478] - activable => nextflow.secret.LocalSecretsProvider@1ddd3478 +Jul-03 12:08:16.339 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `docker` +Jul-03 12:08:17.003 [main] DEBUG nextflow.config.ConfigBuilder - Available config profiles: [k8s, docker] +Jul-03 12:08:17.044 [main] DEBUG nextflow.cli.CmdRun - Applied DSL=2 by global default +Jul-03 12:08:17.064 [main] DEBUG nextflow.cli.CmdRun - Launching `test.nf` [insane_snyder] DSL2 - revision: 49b8a74e0c +Jul-03 12:08:17.066 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins default=[] +Jul-03 12:08:17.066 [main] DEBUG nextflow.plugin.PluginsFacade - Plugins resolved requirement=[] +Jul-03 12:08:17.150 [main] DEBUG nextflow.Session - Session UUID: 8cc53326-d69c-4269-9519-4eb256ccbbd2 +Jul-03 12:08:17.151 [main] DEBUG nextflow.Session - Run name: insane_snyder +Jul-03 12:08:17.152 [main] DEBUG nextflow.Session - Executor pool size: 80 +Jul-03 12:08:17.163 [main] DEBUG nextflow.file.FilePorter - File porter settings maxRetries=3; maxTransfers=50; pollTimeout=null +Jul-03 12:08:17.180 [main] DEBUG nextflow.util.ThreadPoolBuilder - Creating thread pool 'FileTransfer' minSize=10; maxSize=240; workQueue=LinkedBlockingQueue[-1]; allowCoreThreadTimeout=false +Jul-03 12:08:17.322 [main] DEBUG nextflow.cli.CmdRun - + Version: 25.04.3 build 5949 + Created: 02-06-2025 20:56 UTC + System: Linux 6.11.0-26-generic + Runtime: Groovy 4.0.26 on OpenJDK 64-Bit Server VM 21.0.7+6-Ubuntu-0ubuntu124.04 + Encoding: UTF-8 (UTF-8) + Process: 3786432@k8s-node23 [127.0.1.1] + CPUs: 80 - Mem: 251.6 GB (220.7 GB) - Swap: 0 (0) +Jul-03 12:08:17.386 [main] DEBUG nextflow.Session - Work-dir: /data/bugra/metabolite-screen/nf_metabol_screen/work [btrfs] +Jul-03 12:08:17.386 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /data/bugra/metabolite-screen/nf_metabol_screen/bin +Jul-03 12:08:17.401 [main] DEBUG nextflow.executor.ExecutorFactory - Extension executors providers=[] +Jul-03 12:08:17.413 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory +Jul-03 12:08:17.440 [main] DEBUG nextflow.Session - Observer factory (v2): LinObserverFactory +Jul-03 12:08:17.469 [main] DEBUG nextflow.cache.CacheFactory - Using Nextflow cache factory: nextflow.cache.DefaultCacheFactory +Jul-03 12:08:17.483 [main] DEBUG nextflow.util.CustomThreadPool - Creating default thread pool > poolSize: 81; maxThreads: 1000 +Jul-03 12:08:17.707 [main] DEBUG nextflow.Session - Session start +Jul-03 12:08:17.717 [main] DEBUG nextflow.trace.TraceFileObserver - Workflow started -- trace file: /data/bugra/metabolite-screen/nf_metabol_screen/execution_trace.txt +Jul-03 12:08:17.950 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution +Jul-03 12:08:18.079 [main] DEBUG nextflow.script.ScriptRunner - Parsed script files: + Script_e80a6c5924994093: /data/bugra/metabolite-screen/nf_metabol_screen/test.nf + Script_181c5ac3efe09ab5: /data/bugra/metabolite-screen/nf_metabol_screen/main.nf +Jul-03 12:08:18.081 [main] DEBUG nextflow.Session - Session aborted -- Cause: No such property: chunks for class: nextflow.script.WorkflowBinding +Jul-03 12:08:18.096 [main] ERROR nextflow.cli.Launcher - @unknown +groovy.lang.MissingPropertyException: No such property: chunks for class: nextflow.script.WorkflowBinding + at groovy.lang.Binding.getVariable(Binding.java:61) + at nextflow.script.WorkflowBinding.getVariable(WorkflowBinding.groovy:143) + at groovy.lang.Binding.getProperty(Binding.java:117) + at nextflow.script.WorkflowBinding.getProperty(WorkflowBinding.groovy:132) + at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:167) + at groovy.lang.Closure.getPropertyTryThese(Closure.java:325) + at groovy.lang.Closure.getPropertyDelegateFirst(Closure.java:315) + at groovy.lang.Closure.getProperty(Closure.java:301) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at Script_e80a6c5924994093$_runScript_closure1$_closure2.doCall(Script_e80a6c5924994093:13) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328) + at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:280) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007) + at groovy.lang.Closure.call(Closure.java:433) + at groovy.lang.Closure.call(Closure.java:412) + at nextflow.script.WorkflowDef.run0(WorkflowDef.groovy:205) + at nextflow.script.WorkflowDef.run(WorkflowDef.groovy:189) + at nextflow.script.BindableDef.invoke_a(BindableDef.groovy:51) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.script.BaseScript.run0(BaseScript.groovy:182) + at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) + at nextflow.script.BaseScript.run(BaseScript.groovy:193) + at nextflow.script.parser.v1.ScriptLoaderV1.runScript(ScriptLoaderV1.groovy:246) + at nextflow.script.parser.v1.ScriptLoaderV1.runScript(ScriptLoaderV1.groovy) + at nextflow.script.ScriptRunner.run(ScriptRunner.groovy:246) + at nextflow.script.ScriptRunner.execute(ScriptRunner.groovy:139) + at nextflow.cli.CmdRun.run(CmdRun.groovy:379) + at nextflow.cli.Launcher.run(Launcher.groovy:513) + at nextflow.cli.Launcher.main(Launcher.groovy:673) diff --git a/nf_metabol_screen_adaptive/.nextflow.pid b/nf_metabol_screen_adaptive/.nextflow.pid new file mode 100644 index 0000000..c971846 --- /dev/null +++ b/nf_metabol_screen_adaptive/.nextflow.pid @@ -0,0 +1 @@ +2298940 diff --git a/nf_metabol_screen_adaptive/Dockerfile b/nf_metabol_screen_adaptive/Dockerfile new file mode 100644 index 0000000..6c916a7 --- /dev/null +++ b/nf_metabol_screen_adaptive/Dockerfile @@ -0,0 +1,20 @@ +FROM mambaorg/micromamba:2.1.1 + +USER root + +COPY ./app /app + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +RUN micromamba install -n base -y -c conda-forge --channel-priority flexible \ + python=3.12 \ + numpy \ + "pandas<3" \ + scikit-learn \ + parallelbar \ + zarr=3.0.7 \ + onnxruntime \ + procps-ng && \ + pip install \ + /app/bitexpand-0.1.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl \ + /app/mol_fingerprint-0.1.0-cp312-cp312-manylinux_2_34_x86_64.whl diff --git a/nf_metabol_screen_adaptive/app/bitexpand-0.1.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl b/nf_metabol_screen_adaptive/app/bitexpand-0.1.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl new file mode 100644 index 0000000000000000000000000000000000000000..480d8cf48fe11bb3f348fb6a78335e85878dcd18 GIT binary patch literal 348148 zcmaI+c|6pA^gfJ-&{#{^6UkEcrIK}$WD8}NWsoIg-v+~w!8`lDGfMWg$dX|+Le?p3 zmN0}6GxoulxnDlt-{W_GKmXi+80HVJ=XsuUo$FlJnR%v1bMe}R3l}b3c>Vt8i=PA4 z+_AtrYN`tt1cBcUuKrF?Z+lNiNf{|wDH$n8S3iGAS5IdzX?;x-^~dTa>ZJ+o4Aioh zHBVtZq^_8Q=h_eRYcFOtM4x?6^07;=>AyI%5Pz|TwtY}F)=%Ush_+q4bV!!VVzc&3 zu_%oKM~Ebs$U$_6?Yb?q{OV9pnPXSkU$zkJ*RP-`@xPZ6B0oAF>ol3(kcCbDl$H-> zc!SyE<{`DetgdzY;DUSH=3W-r9bOW&!TjuhT_X^BL&Fyc9}fKR|9@V?Tw7D~sp|KS z3>cZq7k;QhQlG~n$|OC$v;LR=-(Rje-wpMUR6Xhgyv?_R-?sntTR&%TVwssX;7fU4 z>9c+^z%Mc-R`QmA4kA10N zaKxfj))*I)kjOW2Sf}94=-Dl%1o1ncEIYP?vc^6oE3&VoUTScqf#RI?o&NCg`@VHs z&o5}D5xQ8+>%0_nKxW_%z3{)I*y@jO-O;7JkaCCl0`LEd;{T5VDSHQ3c_}}ye`ky^ zW79)0lW4~eZ&mgGI36<_eYpLqy0|vtLk0%)!HBlW_KxqB482m&HO<>)nY}q5m)W(n ze0qJn{R=j3Qwug*&%9}g6NE~OrSVA7UW>Edt^0ha)Zg#PvV^CcqLFK7D)sWh{YU>A zrQPd04rk6^(p07@E;deoILm(ZrT5yIlbj;4@net+UzU>_E5+7M2{|f~n?T9m!T&N$ zH-#;R_7h9sGxFjPra}*o)y_ zD^r4nB+C@LxZ@_m<{fLplHKbCBMwPn^>!_xVx28BcP=0MJ>oYWDt~gixu{w;&VAN5 zEN_Ed;ht!8O1raayqw5FC^gESx_F1;{yF3;G7)Vke-qwA@rs~Q<0Cuk{5m5k(vZc7 z?VRM0uL~1|DJ|WFL~!3mgK!y{ch?>fHwP9z z|Mb5FPl^F2Z=WfWa!b0m5$GgR7&lz$sRzY)5iba8>|US-wLdyKqauH^PZ2K_{}DEo ze4rz;Oi}u}aEWY72XEOqVhnJti$vo_Lt8M&bae6`tPvT7-9M%1PlTa4$)h+tHBp(7 zyd8N)}s@e zv>zI`9SR|e-#-H{gZEsE0u;KI`^SsuT#cVn+9?N7=)C}RpAL46Xq-vlUBvs6!=*^2 zc_aVOUkOtyOrth*aLX?X=3gPr+ec9H^^)#g;+`{+S9m3;Lx%t!xa(0AL#c5#HW@hx zKdq}P8zY&gauts4Q&h9A@z)!0$f=X@9f3PLYfRoq#c(ns^FU!18yHzWyt7kDxAnp? z1?v_SG9v#9Ur4v^!uA9LXofe~g2(!$)=-CJ? zTDDjt@lN>30UeC|S)E+r_id0u9Yt0hEG7riz)IBB;0j&*vR(WNU7O4&POVh7UR_`a z&p5@MCWQPt4jEogRVXb}f%T0d^Sypn*I!&T$TYxbA7Q9aVHo#S<)BJk?TCBPlFmPT zpqRYO{5Qo>rt^fG5GAY_-ew;aaznm&56rXyZ&N?x^srB49qOrxaY@eIjM2g`Tw5@n`aapqlw-|rIT`LSgl zb+X{_Fm{XX0NzzR2j?Mlo6&@Sm#Yw+v0TE1G4D=$J*2?77tNv$rQ|9M!BMaxnTj<> z8YPI!Lu?csQG;$PY(gLm9u=tnAtX>PbC|t)#PD;^+6SGWks@Umqqm{EDn}o5%5+9R z$LVDT`3hSjxx(A7dm?||@+?iN&*>0Dit$We6J_^?@?33XoHLyg`^_smfll$Z3HN44!Oh8@+U=>!@0 z8Rn@3Y^aR=b8RfYCjG~8ne&lPqvn@4(YHjhpYjIv*^HI7it1ZfJhdFoS6J^2em4G1 zaZdy*@$TfB#Gkt*e((N*_CyTZX8rpzrh5o>O9i>cs|JPl@02?(A)Z?*`jsX1@o2nl zTpO8ki&1o^T{_YkN!uw>o_mj)>+caRvK(t#`iv|oZ>uj6i4f~Ms2n+ z898NO6>&G;Muqd_A&2!>lEN)E`o*0CEDR&|Gx8Iun*k|8yR9hqN zct|nGO;Xb0Qtj96T%E9c_wuk6!D9p;a?^DBt|&I|UQnDXo6rqKeVFLLQ}ICTMd!#T z0{Z2@BmLPmA<9AXuLoq(;`kGgs~qhAkvUd&@XyEQjGeoVei}?cj~tJhbb|eKRmNj3 z`JOddjup=abSQa@GzH6-KfL#3SY468~ zg*?s_OuW9(oJ#wHCCIjN@{cQ{V5L{VdXelW$xL6-P~EcrwkHoIwd%M&H5Y{(`;`m& z{Ta!pd)#X6&fFp!tL*gc(NPnd-Rh-8+AfE0!eXZb) z<->`b)EotR^wY#$(6}ZOO|2kLwU%6B*3!lG%jtp~T#6nXG{17J7lmNI?*)w%zLC|9 zFiM~Eh+F)UAt8}VO=6{Xn?VKptr}3jH!Rz>j9?QLoJzSW+Ac~{;vl+#1IdiugAUZR z5u~--`in-7(_M0Po#z#Uvv`H1Wq!TJ7EGtd>-YG*YiRo+Y|irj)7nU`r&u8N0!NNg zrQ=M^U)CYoDn(ZVpNsDoBI21|{-_k-S{=4|l?S7b%VPWcwKAP!q~N~07`$(;EQ(mP zZd*~0Y82RYzxZdp7Z-7W{A5?CZa)(?y7#bXZ~H*pO!u8 zzvYWb6bdwtWmtmIp6AGLEFF-NJ|5%*fcai-wdBQLPrWfxT`EYuMB z;@Qc+rC`6`x1Tx~IcPYfvWYNuRIBDbx}~QDIl8{+sH#&=ZSzn`y-&Z5cTnr=JJA&P z-Rl*jg=5c9Lj`Jn407rcRE2(J*oj+H-TR6`BhUhmTQUuEe>V@%5!)7|nq0r_7@vF7 zHgWqo^jFvCrd1}M%-pZNCNh)T81JIF0Xu4n_8q*O$MEQG^G9K8SAk=pzum#N-Qr!k z_Nylxg*w>Sby6*_mszT+R9+JYb;!Do`fqL4+gi5XVby6=Z`93JfPz;RD8Z-+7v^mLjrEL2-o^NLc zRa9M?`+k2jhn9el(jI##$&`nx=#FM&c2~FkMEeMk;BtQMe|v9 zyq;4Y+nil}dSvll>8K>5vvA$<=?OyngnGVj@(?Fi#NHkj&1S2pefzH_Te#}7yb#Ix zP~mnuL4g}0h102LM7_YY%h=w+l}S9`HULR?>MrWj9k=i-PJ;WE%w;^Y3I4tELe`;Z z6HI<krYGa&Iv7sbc`;m8z>s-z&k`e7iym<-!G(K~mW@2!PK~rr>3oX8TVa>=FpM0s zzlC7(E!FB6_zEmgmpF|Fp)@fX3HdjYd*JqSVz@yr!)(G3Po%OC$+DMG7k$?6bNGcwQs)QtYziVBK+^L! z2}U5VeUJU9GOc67xRdd$YU5b$KCF z%2+iWv=U*}9)H~Q6cdZW`lk~V6Y4VvW!F*-6BF`jfg{@$k%esYdo*Rq2*_aT`nm-P zoKUXYS~#1z;}0Wa(+GoL$2P|ZYzjfFcTk8Vusq02aHBzez2GI+WhD$FX-Oa{Z1K|0 zb5b~d*&<*V?bV5DD$kWBa;*f9a>$7yBUrVX$(+Cc|)hqin7w2!UfwdNu zg-NR(D#?QfByG2-0c=!z!y7=gz@2G4gaGFn%Vj!;p_I=3l6p>^mi9>EVDrpmorE^%= zY`dY=h$B+k%8=hjsM6+MCEL8e=-yj|`EN;r1W3A7Z;=HgT_o;pidpjs(-lVfbZVom zG4c;66KuA<2Q{+a;pK=Hxf>Y-zfOlQI#B6eNo=1XQVf@y;Gzx9eL@fN661hIBI+0S zqp^MEE|my{k(Xf)G1a;`MQpZR>*jh;y7Kze&Hk;KJ2(Z{@UAXqO4ifzN<8w284F>v zU3DU-65fyl?82!g!+eFc~)?>RLDNY2x>Og1vfGnL{7f_#NWsh%6qy;jSkmr@F#ujdtvQ9A6>AbfGJ$50TCZaw(2zBoq|wS-PflKEb%i&kMH1uKosfUdv!Yx;#-E>_3zxFgxlN0@9mTS;8uw5RpUXPzbMZTfU8dA4tRXn4YeP%lc7 z5$KWDZh^2=1ibF2I%ezC5}ipPC)7iQ!`rKbNel*PV~l(bKky$|a4nmyH^&~f`XkYQ z1gwFn4lYa+#%(H|F#+({2LKlM@iu@DN_fPn4aVGBY7`HPuxJ*HGs#D@prqdgis0VuY>iM z(wQQGp>$J9!3G0&RN4GY^fk>S{Ly%-074Ezfsr%}Ek*DR*>dpf*?_Jb{I~1B}k>y$S!Hv$`)x-|dQLCg{?@q7jtD+4dQMuo49S(tepjsgFGVI!*^g?^@*w~P2c3>9DsQ~7-%h-)#LZN8H?*_Z}3dI4e| zQGdUSmzhvZ0obiLrX%t#SV47f>lN}Qb$3$^G=RMAkXBL%4n=qdVUz~z zDm|!0)>aJXB5x}U42Jp)Z_edvVVKz91YHy?PYA}de69xyEnu?Che1o_Sh+4nA(A`* z_t9)!qE9cth@>J3F!QdZM}&ed@#2W+tBCx`o<3t{0uzn(y{>pBf)NdB-~z-oVv1`~ znVG;rGq>w0(fPLTvkk_@)gL+)!9sU@O^2BNB2;)TM6^C$SfyLC_mm+DW~N6BN&ueO z<(JDZ1QS{=J4l0Bh;5{c;qsOzH~l?wWHA7hgDzI@WeaC(OrC*Dn#_sk@0=7P7_$f5?w=U3t3 z=E5pbYn$9`o=zwu1OCNufX-vvAb(&F&KN)~@|~YVI_D~Y@i2l`FT-lQ2H4&W-4&$U z+K)XHZzIE(Zs&eB3gvFmCNlKae%{$L%p|z9LPp(}k6xO2kit!bVb{u~?|ydyRAc{f zhA#0&ulUMI_D5jAGu~Jsr+F(cPq1y`c%>OQ-;W!Jd$RzjujW7Pw(L zkWZp;M=mS#=sBE)VAN~IZYiDr2Ljqen*z%J(YCMSl7RuOTLKJ1pt)iY?uQd{p!%Y( zzNQ!}E&#y^*_L&>#BYo}Ep8y>2sDanUaTd1@SaCj?@zI;P&()r1gD=G_j&CbnE)OD ze>;!>7(*B)yzInAhV)jSi$!r}0uKm3AKM3%9%#g>_#WvMSWUprSUK;xbov8h5F%0a z#tV^zd-a$JVj%E0pq}X4i7T1vCr?1=*f9ki03`L1l<#R<9t*AzlQJTTfiBX-Pa=4LL(;~iCOFw*!wm>^CcxkD~N7&?bOk3?W! z0t{;P04WGk@K_781xc^L;)F?ehU7Ck4`Ypx63 zRh&b!&8P27u+1X@IHTis=s^74=W|rP(->neH!pZa~&i9Dts3=aSAOuyO;#yf6V6F{}yZIz+UzeRvkZ44@iozAlmoE?I6~ z5QmrXoaTu~DyN)IT{ve8CIT?i0n;*f0T}<^^nz7%p=!(ebkJ%l&oHoBk!OT56Ttyg zA8hbA7C2!_u603}bnSmCM+01?w*MdJe&h%Inf|z_1^^7{6z{%0YUwP3n5TIr!s_ZY z-UJi>0Lku47QfiJOA~d-b1u*io|Z*Xc^=ECc`9@@G7--4MP=(8A+69=%}k)9LG@qo zy4O|9-_tk7>>W#G`znHycQKQW$Up=8jELp(y4w{+*Sfw;gjP`%*+&2-CY8$8Edsc3 zRJJ^y5J^QcJQ{)STXz?NaV{s)td)%|6FhpAh~M#Z1ef+ z*E0y62`$=Cv9$#;T~k3r+)1w zApY-wCOTSzIcpQ2OSM>Fj30zmBG3cA?N2e-<#S(_wgMZ;K9^g+SN+{0a!I|49h<;(3G7z{(NXZvHY|lC#Wz?IO;7 zF&&YK1_cTg@t-t>VQ2#T2gh;&-fW%eH-l^i-*=#ey zgcSgyw2$?rTB^77vLqY%@^V?BQCk8axEOoStBk-xW7m8@V9dH6;DsT%a6lwms##9d{>t^l|V0yDv4T2Ljduv3|hdRvy2V@Uwwc8cLOpFGECHs z+P}v}zOkIhHvetsa-PuKx1BdHgh(1Aefy>oNtYXJX7*Rj8bT+|H5$Q&QQpea3H!Pe{^R7!>*j+8$U)zy822(i z)MJoWNZc~If5rBzj|gC*6#7!Ly!*ngFFY*UyZT-Y5a6&Ikk?~EW4X(`+N}Xfv(JT5 z8$3z3L~-IbmiB-ZgUsHsG)O^pcrU(yOnX?Lz5{9FW3#>gc3Dpwx)ZeI*M{Kqxjx12 zt7hnn)`RMW9%iQ#%FbYF+L&sz9a@;iR*O*Ig z7y9CH_4va8RI;xzlkmyKqDT)a+gJHL&0Bn|@gXK#O|aMXT>R;kY#&k}2>aau zt*gjC>7u)G0(`cn4LzVr!V6`GW~H!-J1YHSLjoE)ZWAIom43u$Hh7${x|bt2AH5QR zn1VhSNlpm5>i;Tjy#cZOxPKjMe=LA2E4NVle$cWLjK!DkC%=W&u-V$&QX3OSl}Y!3 zG6*6H_)uMFBqkiiHt!4W>q{T(h(E9ZL1gonx3pU`*P;d6igJg%*la)R!+;IN4nxwd zn`;Y^XT?G)%hs#nZ8kPJ@R>hYUk!|3hr@N+m3_{Su$0qHzoc$~?9==3WA(IH)&_V6 z!UfS5##Tf^R3zJAYO#B5zT9g&X*aV6eMR&z`pJ7Lf;cCYPLsBx$~Pmx+AgJU=RYBo z)0ItDHru@ieG{pK4dsjHJBM}6NI=c+SfRkTr{EIx;wy)NxV|ouML(W!U>=UnRRUuqpUqhl1oP`d- zg1Eg9Z<32**v-MKZF95|3PPwITD3Lda>%!nwd7r>%h_Yh7B~*3D-5IEjCBI{PAP~9 zqZT=f%KrrJgaE$5eAuN!vuv$)2<)pm_CV?+84&PMPm#jc>orD@2PuVeYVlL=eA_KN z>7A4sI%foNn_2Q`9q5Q$XFzz6gxZ_quY$M<`DwHbCO(v*EmaH$-))4Y6F4SI~gA{ez5zBXEI6V5>v73%`Y&1{G3}JDc)C;pkO*vPsMA3Ho#@nLb&_ZFH)MR`Oo99x1brqt%;w8n8 zn-aIC4D!ky3}0olbz zU66E6*Iu4AGN49u@c8xO-UC35DgkT7WctTwfJvFN8#**Gs;qJQ`o5uF&fw8vggm5F z7y1OQhQ5X4qe$!mi&VGHY#|Lyd>i^Y5YU0^JA^{r+Ch>vzemT_1Zix%Flwk9u*v+) z|D6CJ9di;4D@AZJFYO7ic^a;r0#aS%?UuannI*+q5*Hgxn$&KM+C&>m9bK6WT{+qN z(ym#Coqi9uT7entqJBsmOj)9e(g+*i`29-X6RqGIsou(1EntzA-gTI}N<4AQLhv7a zQf*f3R5KI6X$Cch3*xwIz}J9nu>}A5dhTw0vSY!DMkWHgy3=Zn;mbe1j(i$BeU6?i zl}Y|TzU}g0?N-y5k`dw z0joexkF^IWY(+ocuEislr?fIRyGam$Vk}i4+QhVrz<$bBC3=}Kcn>t8Kb3F>fXi2= z|^#U`**c^t%83`;_gYfhzZa6KZ8kR6Q0;+*QR(!Pu&q;A;}-38WI+; zdl?9GANa)g{ijZ+4NtM%ulcja_S8lU+UCwsENO(L?KfmewoZp@$g2zDKhw8HvpPP7 zkDSyNgeQFOlLDFtSpp2MqU2AG1$cg7v@B*2B{Bv(Vz+=~d|P&pNyvX37AK6#S^H|# zMwak0*CvJ}^8X3hC0R&j4<5efQ4EuAZux$oD54gm3+3K3jDM;Sed>eEpdf<*ht@0J ziWWk}ZM|OywEk@VO`In0w{ndUm+P~x!l);WXn^Eb0PmC!Ei{$Du{1+6x6@Z>HcL;J zu=$y6p5XkoE4iLCVH$v|Jo&|-coq$Vlp|ccNhxk^Hm?B~j>R7I^0XDjE7~FoSO>eG zv_XC$T>yRcdnhCcaWrwr4~Q4x>%ipoo35J`I~wdp+0IK(Adf!R%8eW)mFl+U@3rW) zHhX1C;UrOBnKyCwW}&}@a89q0Cc-4H`dbV@?8gnyFpNbj2cHm}$nH&vHZp$KkDGs( zB+}wuPPD#>)0h8MCy2YrKWi#9HxL*BI1XsS8eiL7T@4_~dXJX;%IA_*=JWrM^d6|? zKZUREae$;>jF9{uzE5t32rM7%0_CTSY$}^#7=KB!!NU>6ib|VrzS{r@%v*_qrKC(ozn}XvC}~*jjR#YF;#r;5IqS>j;ynPZlE8mcC|9 zUB~X(JS!9Ji}XtMnWx%u5p#c5uFT;U0Zbxfi z7#~Q502{?2pM!YT-gLo*$ zmc^rXb^xDHp{QniIW9SSD><1{o-akrna{SW`>H=Qlf`fxC+-hTW2v9S^((1VbkD96 z63T8Dz3*=HZ`F*gRzh{KNRQ+A{GpXB_=;}v0H`RRZE3giCc%wwUNaW>uQ(R3A2`{t z2JyI{iLYjS;aMy#n*`63lTE_560D7-Wu3so7v9XG5XRqw{rR<0NyQYx&o{3T%ehG? zQi7GTfX!nS{t|4JP|stL<=y%I#N(3?^5q`sA2?d2xw`Wcz4$thylaLL< zUA`ORxUhiMmA>2IspqGKD_KwA&H|txSBYU`KJ$N-9>d z^*?YL{zNxEHIrC{b%MPT$}|>I(!CY>p6Jb2RNBp_gtCZT`%4hxQ+pIEJ%wvKzZHLF zx4S>Ih=p~7@Lc39>bBYodaHoes`IQG16hS7umBf)dC;@ro!vRNdb_9|cns+UpKWD# z-#Q^v3H2}*xb3DtG?4{ud!C;irMX?dYslj6u>j&@zM^;CUO#Z9N~9-z^Y6PE4_0E{ z6ZOxpuuxN<%z{3z8_A5%wyfK03}>oD3Or9(x<9m`wFX*Y z(aYLM!F&wQ_^x8z6xYeh+>0&X_4DMaKT!)fNm2?cH^D!O@BeLlu<+7UJgK$4iu^ho zuP||>`75x8a9EaNQ%f8utfEVk=AxOfbTSHCXoHnwnvFGZ_U{L$^4e%$;EZ-(WcIo5 zg~dx6ENq#T*AGf6wyZs!`R|}_6cyUIEAE!Dd(=?5ip``q!*MS7WJ9=lwcYBSrz!{j zei`x@DXn$3*b`6o^bWBacC*7AtQH)!YR6Kuw0*L&9{8Ij8@cU#4`q6AuR<%Rs)JX) zd!z)+zEE1{bdpth)>1W{$hf*{{(48q$&+!~gaXy;+(pt&DBK+0-fbI|Gg&YrrPk4L zlv-Lxrn&}B9Hnl|F78gyq1D(~LaFYzpH`4lUCk!4-F=ShB5n-4dEzm|R82Lz;U!tt zAc@oc`-mc_y%bbVmH1lv^7Th@kSc2d#LJ1tLeP zz8yP?Z#?W1`aZkX%Vsq`v-qqOLswW;=gB+<*DILL&u{`=QvWQF{3w19@_M+Q__L7q ztnqOv`O5h27HHO!Z*+eD2H7Ze*Qzoj#Qab#8}61jF;)_+s50>GB2Pue%gjPta>2vY z2K-v;89b0~cUbFw&hNE07`Q!z-^d+p=zBQ-ujY5*2aEJCD`Gb3Qhq0DCXHbK_9nV^ z*l^uE{ltuo4k2kKl%|vBt@7%_B|jOkfSOC`VO@`Z4!fFZ!Td021(z}FM-Ex1tW zb7PxMBceF9+^t(`ig`RIH)hl-KHJZ#nzyW(868`u{CY37mu0_vrZF}i*U*mS`3pNU z8ycszS?RvPYFB>T$vS)E3#y}kT@`oR2l1qOzRYX_^7`x7l&X`)@fl>=BpZ7eZ+CO1 zxw?91;pWHJPd2-owd&dMSoeBCoS(D@|DC|%4M@z+&Ugev*y*J(+L6Ow<0no|9Qpz% zm%jS#`8R!@!)?s;SP$MxzlxfMEjl}~(wDyiuMn(X(Gy-Qh%nwgC~xri$!<}eXyNeV zut#fLO{_x0i&->lWJ1)2#fz?d+Xi22bDNE8SEt)0Q%XzoV_@ z>H0&E;JY~!V@?yr-My}%;u6{GI+ls^~Rf~b6$1Hoo-*3M6w~Kv@W&XZaI+oeC z;_5^#-;RxjUsYKys~%W7S=aR$4kwv$Hg{Z-<~Pd{5?fz!HBGV5fj{t|4G$dtEN0U; zGf|q~uyeb5yer=%W-#a)@uHIWeg+R$pt;uHoro>d%VwKnZ`;VQT)UeKMRwWQwDh$~ zG1oJw3MBuwo$T+|ID|+|{q&12UK;>w8y4GA8P#8?H2*%{UZtqpk$6UXkmWuu{&0hx z`XJ@-`Doirisxz%&-#-x_FKOP902>K)w06#`w4Z22AuYb&3xqFRkFyVmVBwiAGLgA z9F^wbvL@K(!8FCrgmz|5XSYU45KjV{oPO*??`T^ zd{I>~2y0g>E16+-!a*>i`3t;P=(oIk2BUW61M`EeOA7Z(Vl#8PNmuP6G}2TBSV^`U z_t5;O4VpGznxcmeoNwNU`0JRdxnboq@8folJSUX*Yez-mm=DI=h~nHpU+p|~DJ=~# zoYBi@sHIPsB{=h6csC;!r11A%wikLZ=+b!H;+YIO*7i!{J)H}bPaFf4S2B_xin_;F zp~#m6i+;a*oWcEhIM9(^+^j|+HB7R>eeZ5X-o`A8U)~D{%_}b3n$nt#7Aq5cC1RrD zN~Nw;Q^So-&Snp;h~EJMq9_e_;~w9fe;QFulTG~USw{4|34=JqkMotU|&6b-!OgiESyQNP|m`DL(>MiF=eD7ZnPG zBZ!Qa2qdHbQhG_?lr@T8Fd4q-?mmu)hmruIiZXA|Z!84+TprS9#u7hSb#=IRTEHTZjr;nBd8YGfTtwq(- zyi3Nw$S-A$WAG^UEBVZqmUg3~`eUD)^cyBWN)k$V9A&A|R;)|tAcdqe8{$Y)=Z^<7w z%u8VxFQU5Zhx{a_Pu%-d8b`z`nBc%1(nz1Uy@);n{SX-8OHRVdyr< z>*)ck95wm=B-=T4sP2)g`a|wG*3a-;*P8!4f*Mc{LGD016NF&SG`o4bi&rf^@Z8AG zGY01cG8G<_NGko@=H~jM8-8sg{=W_nhoJHyNud`Xuh?8)IaOIxUk2Y0<3WoIVRUO> zJrhfbmUGV%eskG$0Da4BA*1Rg;me$3qqq#MnH|mSo&H~%4eHMVA)hQOTUq3&WXn!E zhe2MPCjNM{u$D5*>zR$ueE1FxTndtuy~xzP>H^0x($B>UQ=Bc~pv3H39g$(q%3-1r z%nu($dz?zWGJN0PQXYK$QW*3RVVaxg-|WBJrxQbbW=XCNaei-?JTLczku+cX42CQd zzWH1k!+0+oxPFhA5V)Db%<`}Ab)}l%f>g)!N_T8yRGZ zoiSJJJ~*Bho%_8gY0*!Q&V3bA)t29l4-G6~rxs7vJNgcNXDObd@{iHuEFvzl*`WB> z!a(9ZUGubxXC)0=X?hL)?b1)!FP-cqY%%jnPt5X?)A?R{5yv7Z3bVXCLB;mCpPgwP z_RL?84(@$YkoX;cgW4_3h$qPL=BomO%UN!pekjO4`#I!&{A`w~M$cF$#;}X~C}S{4 zCP$IkvBP{(q?B|jbk+5NWd;AOW{!F(`ZkuZiX_dZ!0S`ES(K8>AT=Bdri7L6L>PVJsY8M!hXFpF$zfF35Rt!J8?y=E=fyEpsAGrUgr+K?}X8J6Lw2 zA$RQ_S%-f-++wN~21blicIi-iXsp zte<^kpClJwX@f1)t20Z)?l&y{;vFu_bjHqB9mN`%Sk@FdJp0ddfxP%N|G8o@>bJN? zw`On^1!NuERmI}`Y~oaPoO9B0nm40Q!J=6y>@*`zr-D+b)zBjHbv^WQ{?(0dg9ho) z2A#xr&vyF_C4Bzt|DZt?Xhk`r;kAR})&dutxgwJT3TY|*&ea)Xl)n5nt{8-SzqXPGsmC0 z{8=m?Naqpja$MH6IWN1PH?k6Twm8$CX#L|PmPeeyJ?XZVI+7oYYp&uO|M%+#D>9#k;8=<=D^7W#$Q z_JRak_uOfGLbATEMS5L~jOr7;r8-%9GrOK$Um1@&Y~V17y~Nn^>25T~L~^+)o4Kll z#CPpSjtn&h1X+tm?bOC&*QLgTY45CkyR{O=A?Iu_7dr-?dC#IlHVhJYeC#(PR;sGw zDN|lmed~oXKH7RtQFE4&stj?3UOcB%HG((x$92UTxjUoEv9HIKN4(>HELTQZcfPc@ zib_1WBnG`QIT&~LlDnpBlwDsxpwi* zETTC0M$n>%>d4eE#Rb)QhNC_^Ib4o^IoVQQctlw}@Hn74xsCcD9W6N??Ra5-l*}mLz`0veMi>Tjx8@V)Q z&keO)!jwtt`-z_-q+a#UEnzyOxPm*AzJGJvMu#o?OM%6W$konb3lrl>G3f!dnQjqM zRl&Jdm}W@IGU>sFH<&&@i{(#4o@z(KBkuSAokmCqS6V2_U5@efLrn=mzbJ-n6?~)F zt8FR`cz#{zIwxZRvDgMn!>)v}rKJIMZ>o_A2+G_7N;^m7vxy??IEygN73_9jhK z70dg!4L__AdAb}jHsmNDRDQJZF-*{MxGV+`wvxJKku$3whVpLl zvah`5nV2iiSZ)iJvoN#!6FKBD?EdO>IiumWZE=kI_`ez28^2_=O{UbcR$ML zjL-~*!EKV)Zu{{y%vF9I9klakS(P}GWYTPhBMMm7?re7Y=drfKAeCBZBbtt)=Vu+A zCYcl%Za-}6U&oPmot#1?e<#mS^{+Llp8eC^;r7Cgqm?Y?j-d}kazX)r>#c&RQ+ZK; zO^@5kV406S)2C~51Gd>KX7eFQ6T$mqK9Sql2g#oNoUI27WwKCVgv1b(ad_)x^4wkr{wy@ zQvrov_vQjJO+zn0On==vnk?FVZRr|V{wR&-X_`OF2kmgCy%-anwM!#AH}JZj-UNQK zE7^S@V7B<5q0OqyFz6^yL+wQO4u#eam@nPxd~^_hZ;=b*}{3QOnuWL$93Pz3~1jQ4&4i-P}@wheyK^ixX@1`FSNqiZ3teg zYUX%|DPE^~w~Icf98bT|Xp8My2x=RsqB<-14Awx8=(_jg&o=)KY@afPw%{D8rm5Sii2xX?(x z@a}3&g2Md#9RJB}m%>c3UEsSO*L0ZMnRr+CJwG{sA&4_l$6uF-%GBYr3mGR@#kUy} zVnSN}m>mKQn4g%k+mKAqvH^Ixfu2x;B|;Qqy2;Ao{xM!yd*Y1w=g0T&@^v4y%Kaa%?61GV|0}mB zmXb8s(~`Lw7+_v`2DTM{!YlEg?Zr&-JS#uhLuT#1UrN!Zp3Mzs;6OC2P@leO=j|-aT-EgUQ|Uj6cnV4jh=nq(M0P&iq|J0l8s`Yhyz(lyZG}*3z!KdzbX( z?Ob;x1;MpzTcZ+<6}(tECztz!{<`U+xu5$V^mjdd^2L$tDw-QpP=a*yG*EC-3?NnviFYk8zi&1%Y625fTi)QDK%E^R9%55o1?ZTEnj%3s> zI~~wdyKrwEe(?bOf#AU0j9QuN-Mj& zY9-+rh0HV=3^e+#3XY{HUb7PY>zxx8ZX#Cp-o$P6!>B=qF8I}&%Q{x{_b{2BkzdpW8_XqzV2j&@bMG++OUe=7roQ@r?B=7=%|Icf_`ZI$!Z(lLN zw%yf0zeSYzW&}lkR?L4i-aj?h?V-w#*F>R zKQsrb-nss)Tq_gG2~m5iaNuv~cd#HZtSp|mTBzl)T1Zt0ytMrc7Ip4c1*@Y`k!Nw# z7RMiu-+FSlig+59j@}=Peij*?hxKkAshORf*eEJEpLL@5DEU)(Zai*a_nETm*?iPu z{Y+2ILO-&LmnHN^^b=?)IKD$z-*~ey88S)|c#n9BFPG+knGRM9aKk6jo zaXR5^v{Q#+1r23N|KLHjxzl9d8{}SvR*|`Y}-kwBOk{=R8`wdTCqiC$_ZB;SJJ<;1p9jXB z5yUD*iZy|}!P%BQA*~?zmq`g=n;D&}kTd6IJK+L@i< zI>{_lEMyXpqPZ4Hac+ucImO{_a`zJC7;qdmV4!Uqo!)vo*`&Y!%|Zlv^nD~yr}nY@ zpzV*)X6Of+nQWnD{jZ5c{}gfV=^FIhB^tp>E8IOzn9p6Jk=Q=mK(V7=YC08~XGVcN z7alazmVsdJ8$pE?G#GRkA6lbtg{C^a*O=V%=jaM6<{G%Lbzb67B#!E{xbQ!`yDX$2`ccq<5@!^#pAhb5phOkvwy`+VOu5~^d=J1QT^^T3A6O@tw_=}DMtItr5ZgKr4@wF^3$ni8#a-qkqyz|@g z1e@e(XT!Npn;vxOBBLm?#yO!Az})ME3>ux# zk2~4MX(1bDPI$W$vS}g{=f&7ReKBPaQ?_u*Zdyv+dOruUZB3ZB-05c(g@zQQ3034* zgrjtDpX03E(@uEx`e}OyruDa>kMgrGLjUIyZ4X9tX=&{C=C|vSr%Z`DInwQzkRx|D zfDOXnJecbH5GP*P;#vSU*CU|jwiA*QG*vVV!i>BSRJ2xH)H!`&r*}`QvwuCASCtXR zK;7Vl@jz#|-kE*WrHne|^oA|ux#;r2j8)=*zVwD;R>$*Q{!3KfF|jgs9I1~ijf0V; z@!bX%SZ8+qf;)juiRv0{X^fRPy35&rhx3yIPV)|D?STYm_+zK??#J@dIKvcK8ux+G zkJckljq38v`{l*36PlzrlvO9gw)p{#6oj$s)|$BSGWuY@@0S` zb`8{}Q8jp>IbP#+;+u^8?p5I(;AKW&Vhy&Wf&w_sRCwQRrSm3t}=?y5Cbc|EKua4i8#i5%aDFo2Yb zj<^=SH&I(%VntN*F{o;^ma4bj3N;nBShCS20Neoe{iJzP{KfFJU^`(yimZDFn?&`e-sWq}QRC5PxJ8i8vqLhCLsewdCV1?l7{ZUTYqQRhm_(H_D-=kI! zOT+#jtC>4oy+4NLz#`dB9wBu20v1$GVe0F@71l}cF7~}xEH*&D4>sjij!cGyGANqm zx8Qq6zZerp>MwSwvg=V`WFK-UkJULWb;4I&O@yUFW)0*vA?1{^%56TCQ|V4QRXG8^ zAQna}j93^jT%C1KQC1By=Tr_#sf0y}w+5D(tr?#6&8^Vgg66RBF#qQ2y_H&T6Rk&P zIiggUky&;jv*aP(2&6dFoB*I=O;M~Jl&*@>H9@hC2F@G<+j+pDT}J?8&K->l-!aIi zqx55yibyU7@zq5ZGi8mO<17H;IPEySuHg`s6b68P9aSgCM?`sO@ z)B)YYC{eJY(8F_aGrb^oa5dkJ!@`eZoEB41S{5$KqjJ*K{~#_Jn#;BMRmdMS6t->p#bOHGtl9Nwn36~lJo3KF2WAil%p8TZ@a+d}oKJ1_)(ls@O)aXq zPQ^ue7myKag#z;z(D?OoJH{mp3y+1ueP2IhF;zwVXNaeK@8ik~Mw5zUEbwM0C>1x7 z>jnC2b$;zIj=uIZ_~sy-ZE@RheP$hNjVdMG;fZ$$ym?9FO$VP`1=6dUugBz8v*znT zUL>fu1d@+WOfd0@pk!sOSYH+5vZ_dPpWri`>@YL~q2dHqLNjn-SQxh1j#@}B%0T54 zm$v&mv~i@^f}#Yct4Dd+=g=G}GRTnv3J?m0IGX#nHJVEulvAksz75;{bI783$xx|J zg)Ou$u;98NH9`ngU9vVtO2eIrVuu;Q+rn;;;8{MC#lqeu8N? z)DG6Er*OFxIc~57G7X&%KSMom=B^04yRK#D7SflN@zUT%D*R}0?t7@uHlMJ>`b&uZ z-zip!Xukgqj2oS^PN0=$*pHvWhcfaQo-3`vH5X_nC^~%WgnN-sxI4N0^T9y3Sk2Eq z>RAB0DH%lB-9*`IvqYEU)@r2Ruzx2V5gd??9G8LLu&ZubZ81fAmTUs`<>Z;9b-W!P zmm*qb5@8IRF0z0iExqJR7~UeVva{XZz0#s}nr*#;un29j%IGE4Z~%rqCE z0_3I{u-^U!kE5((A1_?QvR6@hA2CFV(e-FGvuG(icw}X}sNYiHVc`zudsujN`O4X= zt31+ibY?e@yz>{~F1AAa?9cVKldn=Tk2;4|=^4TXgU8a7Or|LR+rzf!K|D0~)RANH zFHv&5vFiVf93u`RIo@nbjvf~>IdGmwGF1LEmJF-ok|9c-<&3Y8$iuF8YYxY_-rc-P zPo8$CAy2YIo-z~{An6PE03e7F_80l~h=p7fEwq+HnT4Y8>UM2pmhBkHEcX>IUq<90 zrnV5uMX7rHO^a~;B3G}SCfU_X2$Uy&K|vBSvC|dRsBg4Jp>FU1t-+c+36s(Hsv|<4 z^m`{_4~xnVLB-=JCn}k+L})P}-IKM!ScrqM2uW3_%>*|d(q;mo$B7|&-J2FuG~PiX z6IzXt{#itOWTwyvd>M0VAIU9{JS--Ugwy1qv0E{A7Oa>*ZLv_2Vy%*IT#%q;Th1*M zGuG1w&5;@FuYah{VkQygO=%I#Q5<28QqBME7r`8b$Q(t;9LV+OCADFW)+4{i9N)g7 zXO86t%u#yC5_Q@uj<81Q=~$!JFM>5Xtmv-H&&Or*=t*Fvq$-P}_*KgTf~47wj-2!VbmE4sRS1>`;L0P>Ae+UZ-6W z+OR|OFTckQA6M(yq0)dIX13_qVMc@r8&^T+!*MMjSnDo*8ZPbWol}dqtlYMfzNG zfnDEXVOR71;uL-Xi_1N9V&_nBFqH1{4@z^9tqj8lKsA0tbu^YIwjUBakzvRa@4Ob} z3AU@r3{kj0!VoaHpsv@DiB9mt0KFe?-)JKY80E(Uf>Azu6Q>l1Za%?TIN$eCJ{YEj z)L6;03eLl5MmuI!9P7$BPm)Rgu;- zwz&t|nbxGxJGl9s?`sLZeFCi&qHSkIVrGzy){QcThIRpOI7P`IC3Wr95Q1`!AP&=`rvIBap2Xk);(>t)?4+8*rLPc+c# zA`42u_QZZ@V279netsMqi0WS3YCjs%T3DoOVf?hyL!yZ{R8tdW|G0FDv2++r{Vx9< z&{s!u!k?*Y8rD^3uSueAd^xxX>bPlo*E?I}unMBytn*kcn3~Td`qRmujY0gVG-gB;h4HY{3w)a0DP!O8J zg^qBcJ7>j@O63)_=)J@}2TD3|j7nNjNqV7Wy9S71*Re^1@?n8aqK`>Asg6N&`61 zc_QTFtfz|soW9W(r*E9~cOs3v(u`73a&(Lt=CAL8x{c89@jZ`7hCWRIk@KUro`B8! zPm8wW1hV(vyM@7}UaNp3Qh|%90^wlK*T68E3`x)kQ;(-$H3@NmvPeMLNC8!XO1A`h zWzWCS4l@~9d$yShli+ZN!+@YOkejbYoypDg4*6Z{t%v7`HGG#U%Z zW9AeqyO!NiWp@zCj+luBS0*~4E;Q4qCW6Nt!?w?Uu+T=m!-eDg+aP)l0Idtrg#ztQ zFlZ)UCag+5s5OuMY>DW1JbXX~Zl~dM%H_WrMiAC#`q8%h|Fd8TkJF!TMH5_(V$Czf zGrvrG)fEZH4nUMss4%xk^lTGj^cp-v6n zcB!C&?Ny|~Bh9hy9eBPMuih0ELpSgs^?tFe|}H{1INHB5s%Z*>;u+j5Xzk#oNoR1%ZBBa#jV(fFXnl$Uu#Sv6#&?;vuPOPrnp&Vfm_lTuy-yQj@ZAn%cZ zd(7Tri6tZHApECI0X6JBmNM@`ET&bf|KY0G|9NX$Jt1#Xiu*Z1@55E$2G4Jys<7>j zUC{2ze4obxf7a7h+~ptk8T7Dw28IpD@wdY%YcOt2U0`}o1R*=J7P*m5nB`^Gz^++% z2c`3T*W3vYB>*pV*eQ7F;+1HLug^RZw0A<<)-|`D#OO!R6_-I*G@}O|{pyV!6Ofz_ z9E}GYWqZu9ITVIH7Z9C0a>51nYV(7MD=qF%QDpoErk@Z<{N!E#u$UwPjN@JBJqB9& z;P?L_#y!{sR_?^Fwm<&^og1$BhAepJh0cX4Rwq#Y7h(Q?!Tfu{ytCUvfr(sGY5|K zq_j|Hr+1SjqTjmwm*iLMb5Dceo=3x-9B633d&GdBj}HF+e3KaQLt(_XxRloiWqXFI z{zO-H&^=tot0`@U`g7!Av>S$a=&`UZxyeEbSQVj1zXx;;?PV&f%tI4BPz#_cY>B3& zIkm~q>FY#4c)YVvb9$HHfPahz{Aer2+-rU)cEGo(i|87qd>TmgX0#LsX3_v26+3`? z^8hY8-S}0?520RCCB|0gpC+i7`ujcfu&X(|WqvDCHrH4uhx&&7AqEBXlRF!e?W%jh3M){ z8itedUWCk=;%gS%)O<0lJ*f}eV_}ql&b&n=DSru`R-0YfyWCUs{ui)k@6S~IP77@+ zFGZqcA8{y8)H&=es_%11@A)cp<>}|GiY}T=4nSp_P4w$$=y%N4H^!2mJdJcq=oG{0f*SM2f%KDu=ZDBbSfK;h?{{$D=6N~)INim6R{zQnW z-7jd9$XDnK<=fQ!_v4rz2Kmq5LHfH+@~^M)R|@=cyk+(UbynDDESF=?v(`&-W5c%W z9VGeNagbBtA*y5V7n+1_y7UDU@yEZl#E(Z-;5!7Gd5n6v#}ycO$zF2Q?G77TVpSLD zjA4JG=NW}QbWi4%oQub$O3Kijs4}DmdS#2SE(5YXlboyvE!JqODz%AiWaHnU+AyOe z!E1TRSH1-LFu8PhdzSeyI5-h}hEl|RhebBQP3n;MYviH1z7OK3=AH%i*IM#;b zrh29h8E;=O*-^evsrU;@wDKR7@)uCT*R@M%epY-josN1+`A1@nX3?<^mC^9ED8v2i z;^+Ni(|sS+{?s}1Bj3^516?zZ`i|A^O3pmy8=J1qJm~%Q++4MG|K&4}I7TQYbZM#g zeV(}u=BsVUQ@N?W@xrYZs^{s1j?AHUST7)+Z?rY1eze`Bn{%+1=%(C8j17-S!ljxd zM7INd&BJ{Ywi6r6@GD;v9Jc)pzJykRK2-ZG>O*}#qxEO(`9{@07gk?CtKO6C=Otm# zP_<$k81=lr0Sml=(o1=FtLi-nGxi3ovHI!H)bAKW)D^hPtOiC~#0d|lZ!Zlr$fu*r zf2T$DPqI3F`}4DRD-S$CO7m})k`jEbJTL}-3tPsRK=<8Z&PHiKW})|?+AtNW*9M0E zN{?#y4^t|N%_c2aFpSwHpzL7S%bU%Sz_w`lk`LFQKA4~Vt5PmpH-@IEtHTlJ&;|@5 zwG7=Vp`?9SQZ)YyIR9P5FelrWT#fdhJr-TaVo3G!mu&rMM^>Ubtub0l%-8|WXqnFJ zI%V0Ps7XI1u8-K*-q?4k zJ51L3g};yl{PHit0-^;Kz5GLqh~P{HfC(5hkIxSYMH%fcU?5752K9CK0`n+2Hi7Cn z3ak*4SG+%FU+T3cas6o`L9!!SDST!`&x>tW$KU^LVO;kx6e$uyc%4Ak7S-GDBpX;%Z(SKdz0g{Oa7Grji)rTniZayQ=U3Uul+CXl44-kKB6?Aj985Z$1AKhNJIZ%9wiW~a9{ z$?4sY1WD$FLN7=7Cz_@E+G;b#X>($(Bb8O1y5wDL@xc5VHoFJIZ&w#{-qotv^C2J! z?mqBuVvh1eEj*dfB_Z$Xf&}=rATgC2l5*_k@snMm3GB_MMwawws zJGH~1-J*v>C)T)p`HgfmbYg=VxPPZBkXI8u7y2Wf3%!3Q9ShBCik=G1fEL^)j)m4f zMdv>;W|#l|CRiZ`@!k;v>psxVV{-3gV6Z*M7TU$R>95!!d5vm)-cBK6@|q$>syxVK z@MugCxF0$!xh}TDbo6qlcsyZ)N!W9K{7@{E);$iALd^OIpR5z`KM?k3!7HBOsz141 zlU6?wRk8-F5m0F$cW#CylxL6Xdml4c#~Dn0oK^*@FI698F0Wb*c&cGO*leMh%a_*_ zeCW+2jGLIK{ONBri+@XpL-3d=SFy+AxK_&$QiyCt-k^XA zcl30?9D$EF36tKR9}9=8xc>^!NEgTh5?}`<*Zq=+WwgN8&@)urYAl9}+ev~g04aS? zUVUC8w`6tLHh5E<{v_rPByV}<_xR%NXEeUpw~^%|z8~y|r>MnzfWKj!ZxV7rOtRi- zEhc|5+Uzk<}NgA8a(&p_b|Q)Zm36 zM|a*c0Ja9e@;t3kg!EK>Uk1N>E(w-tDHNi2Xw*&Mrw|6^zxR0yg)_?$s$9vrFbW$e z5j4)uehQ$~Z^HqqLpHV@Px|^DQnmWM{!vW*vb6ev0Su~v1Nwq`V*7Yi4BKx0fDHYi zi@=Ec(Q_74$vId-Vbx)0j;lUEH}o9dNCu*R8B@_1`7E~2LGIk&5VoBys@A|&>+kY= z8dd*oJE`nL!TLo>VtEUKdK6a*cO66hb%Qt1IqNy3AgrRpu-r^RS>FSy*r?Gk{T8NR z)%zCRZ`iJ^*D~*_%RFqG@xIu>Ev&+=0-b!1(%0$x7;h~Q{r_PMeJ^uigZ#HOu8(XC z;*~nMv%sZYqi@Ouzyb^YiVc8OhZD55gwrv>hg&5kFl@x%w~9tQ_6Y5F@c2a6qgo-i zYhYY9@Q8-l_WnjOK6ip_stJC0MG^}J7#KB^Q8taJ)ei{DFEA__)^kDYBdFD_UP-L@ zc#W9)p{v8T&)+A;LU)Nk@^zq#V<1|1?W1?$wJ-hzuZ1h|wYsuup=3eNA0kPrX#+z1 zfWfpFj3fnCI{V(rQbFUVRI!Kp``+5H}Q3wwiMHbWy`)y3$-e4@isK zK>iMX@_7R>dX1%mW) z7!+%LsG4IQd6`>iuMc{5p#|17-mE0|yQ0ERQUj>|P<2GgMg7UZJw1m1eW%)}{4ho* zZ?Nd*3+)K8>dRjaD%uL7lq)d18n+qtA{+V#Uxq;t{KHJp>X0Jn>&4x!*SonF(K5`p z!TWuZ_gKQbpi=R&2{*qt!3xHj-10I~dA*P4Ga$-Jo)7$qBeR=4SC`$tGD?rl z@#rzqw~MLqIa6Z?QsX^;VyK*4DK|i-xUjFB_$qMRN)SvdVCG#8yO;jFmCF)WCb@e? zG9*Ia#WJ{eaZ@cZkp8%tD=_T&U^`Q&i+4*x=C+Z(CgcS7bJ#qxTP8WDbbrca{tem} z{vLE)xrLwS!@%T5iWWM~yoF&~eGOTz7IqBV9>-At?OZd`--p7tCqgo+K+-aoxi#O{ z62_r9cm<8el~8Ck>oTjOx(w*?_pfyM>cY0Z?~u`o6t&aQ1XVZ`7bks^|Fg_5S;Qy9 z;Jx9Veqv0;j0faT@ia2R_PRh9%-jOQ=ezfip9WULU{&sSHw|9tOH<^bM&RI@Y;eO=>F9<6s+j=Hxj{SDR+!{KKgvYo>L`(_UN(F#cL zbe*I8sAr`}pp;_|P!dnK9A90|QnWccu+y&a{5h1E6YVzE@38k;B>t?A-+Kp{KR;vs z+|K;@x|s-|R1AcVwSq)3^a;$nOeTn|*u9k7p8K7C9z6Crnj%)h zKFb;&-{T98)`|Qn-m~wxuLb7+OER}$gUU$A^=b*{CaK=h?LQmZ_%jK4*oudpaXh@c*1}W9 zJ6JSTgtWEn22TQ(-#M2?Ry_sL+8Vaqy58~!*YH=Pw7dWnpL3uCFMt3ttqlyT?wVp^)BXi(E&BDSDF1#~-*{TZ;*!+2 zrSl@{+mm$AGG@(gq`p-H=fnE?&%7O;AnmNFlVDknIFLQXdcy4E%{rKsfKqQNkt05bio)-W=Ep8ApT*+q%ACF~LriIS20) z&cREC)j&lCy5IFL0OnO;zY8rkP=O~z1<*t@h)Np+0%8Of{??`Vb404B&j|FCKQxD+ zba)l((??gIq?r1Q0bxD@^r#!TK1*Mh=Qr=(;t0R_Cc+5K4@USdko+=An*qd+-gKJr=g%xi|gqE8msvw_<*4_wpIcZ`W1J^ook;f4^pA|D*g@tvrML5B^8W zKWtmPE`EJ4ed!GHd*MHA`{$%6#kDLj;ddGRc2>7cNm;pZxpG z%6t9JxaGaEGFo2ZnUpvA-{chVWgYEqe2O30t?n+M1z%MyP9h|Pn^1LLO(_Py4j*Jq zQ2U=!YfmMjIDT3^dQ2tf1$wdF>(LhvE9d`KHtarl$>d3&sCtL3cpYy@^6hqaQvJgo zhN&PJzAqdOqM4yCc|4?pO*DEdgSF7S}#;ebaX#GPjGDB>u^TYOQr)%Qi&F0-;~i>N^@7M@g{ADCkng=0J%XZB|8wZ+=~+P*Iu zn`2%iCt0fc>q%PG@x|`q#k}an+>p-qWzEkCW#7Z=+r;Y|#G4lVn_Of^dJ|vTSrbf5 zgLi6}TH>8f5kg6I-DZx|wWc}AsIt~Lm0fO@E1MjrvfblU_I9(bvhCVdHdTAaMg3QC z>Lgxti*KT{K=T3oDdH5-@jMaz#)3z0VmI%@wh1qbK%KT%ZnBu(L*`qLY#6rrVa!D0 zNRU~yyNEhl`%}VN!K9`)g+pRXX*jIea_zV`;7`8)Wwc;qpyS3sXSf}@E)(_Z;7<#*D8IeqMfrtp z7+Q#ny)OT;#K!pTOYqUxqU#yGKYuB*3+`xrj;A*R$>I4TPzv2vU0+V;!_GH}o!Beh z5WAn}LRDOTJM0&g<~hTg@KGv1GT|d1=xW2BdmD=lzG9(Qi(VGbo92TKxXO`=j{0YDX=B@j^80} z4npUq8v5i2E_{(1^@-*k6BvBSjp96o)fIS{p2OPLq@sx_l$@anO2rHc!}u!smaB9X zB^Fa0Jk|we{+psKzsO4q)1(eVyP#)bK3D>3_jE+htJ)tr=Vk75QB=!oJfqds5%$$0 z1Z8hrkU`<-XH)Hy|MniuLpkq~7!XVh^;-Cbn2Rc|rDV43i577t6n3emL2ou6r3!OJ z_^|!glf*eVJRfhLXna;tJ0Ne@o%CCm)=HmrV6o3Df`qL!@hSxxaKR_8j`9PZRH(M<6&#clIyV|$ zwl3A_-2@ZT)U;CJ_2l%=393V0rIf-IG(Rvsm=E=^IALU2k%zJIuKumaicYK?Ed9Ix z)ud5mOkn70iVisky4Gp_4#`E49V+&@|D@LL788*;pB%Q`1JrMJ1Bb6cG-tII&w$Dh z8~LBlL%|}*jLd|Yg&u|$fld_aiL#)SLQcB;qP?nLv>(MVkfz1ezeQd1%D=>a>d{@U z>?3ZNLq1h&LrHkH&=u%gau;OTp$h4thTq3HyYpLdCfe`xUlW--!5AL;23v6+v?5Ur z44O@CHt**n><3`~7kP&%6uH3>xj~G}2~bH9V?adVa$TgUhXD#u;liE`6GsPEv=`$+ ziouU944;@Ul07N!AJ3=s$+P`{O@7FdvyF- zP}ZQ#qDiTUW+#?vn68*-7L;zy=V45Sz_2ZIXuqM;IM{C(N@S^hL0Bg5A^UX4*F>Q; z^sM5a;umTlVcTV|VT$H|12V@R)r=OTO~@12mbT6;N^cmSV2%1nt1Y?HjcNUA3Yv*&9mF zLtWKJKSL?`z6bD)XnGf3$_jzRPU*r zdCxd&TN7N_wM!liU8n}G#b>JG{0N^Z58Q{=yxL<4&g?BpU=IHHWWVqN2|h6gRl`F% zw{Bg$xbfsLc}>3mZLA?GbVvRr6uQ@Dq1*+--Z8T~5B9;8iVnmW(@C6wR`^$BS$`#6 zk?gOslTexmq^_o~-a}@!{Z^&?1j+s_9$V;a)mtNO$rkURdoJ`y@K>U5z0>HGzPpPhU!)_WfHS+sb8&uP6f9s{u&?O0aZf7o z9eS1X#jCIx(kXNm9)s=php&82$15Lb)q}L!$_nuVcWXz?EXCn)^Eo7UpZEvp)r~}| zhu~{-x3C<43-}jvDd${<-W{R1QvP>HLsUOSgR^BNQ@!6xc9+EXJ!R3$y%R{sqKmr! z$2WT)C0T+Q`$czN2d#Qcbmu{{+L3Y=rw27w5`Ai+IO6`LT6NqrRM`AheSg-flA-#+ z!0oRRRoTi_`Ln3XQc)FpK~%+k8&yL)0)XonUS_1;rBV7hVCzsh-fA%xWz_Sawud^y z&-wJT>P4|4{SIgqwsm;XV$$)y>R%{s*+yTxRbb}~RYfk|M(FPVH6K33aSVp0u|2_S zk8p{gkGBPg;>9+4`iOH-Ftdih?0wchu@0U7DNfa34pk(Yjs{C-B5NFi0;aS4N)F)R z7Jn+v6KN*e7AxCuGY^Md_ zIgV3we`N3p&}gV^G70Yc==$?^VcU`C=%*Ej$@tI~Jf^4mZ?WR(RP@P0t)WpnQ}T-H zACEc<ToO`)JR+L?_R~wzW@M z#GNyH>8>Fwc`||=-$1MCeBZIVOfyWNe2fP<@E74KMn;!CFh9{G+#iqn10zi&-stuh zjqP8m*U!0C4 zJ^#hi#4iwL8`qTisdUtP0gb0oc9(y8y34;9gO6z~*zttLR5mots!uF6BQ*ajW|1m#U)f5Z6u&S8Kz=)!s*)<}l1<3%kOe zXBdMqIL$}ZqhEL%5^$Mj5lcSQ{mIzm@(oRcVKg*z+w`i#%DM)q+y^ke7JZNk(|y>b z{HGq~bF)hsv0*)K)qh%-Z?0F5f)s-ky<0pV;QMSL%(V+yO?Qc5sB+(UD;-OQFR66F z3VJx~lpJrs{7hapIqUG>=EYD-@bCK`2TThTy4nfM0<=i*+(kyk zb5>9wmay$f5*(XInFc+%ANdH~XDP37U+?l=1=hV=#k#u9efE84wbPk2I#XLC7u&Cd zQqeX1J`1{JL0!jz=nZwEka*vRZ7%~uv6o0<JMM%+kmq+p?x7>WS*W7IAp2~E*zZS&a-I*M;eFp-ZfSep5)ChOB=JwO zxcp13xK%hM z{)LsgyAXY(a5bovugfaj_iA$9u8;TP1@en95C2uTWuKTF8xNPHQXu))Tw&_c-5iGE zXb~)0A{U22Il+OMq^AaLq}~1Vv9|tLdi(BjS_d9+;+3wW$dF#FSlgkrEuuiSV21;i zTWNN8qqXSg=xyYOwQF-14B^B{?N0ygR=RTqtpe#Z`0-{9GR1p{2%EyTy~{C*l+$}6 zj7KQ5YgJ`b1I6&hbCIgJ5Sb1}{FJ#3=8%H%!ENV~24_V{QivTf8s$;G|H^!FrB1xT zDr_MQo{%$;N40n0!F?yXK7fLryMGGd;gxd9+bQdkKp`` ziyT>cRh8dt>aUq|~SncE6-t`GLJX`)E%j^NP5r{c~++-1lQye774 zgnd`v9^Mpz^^HFQrmx|l>dp?Vn?_!^f+c9?DFF34Sv_NDW(z?(|P;2n1a>f_Eed8 zW(MOUDY5;@h;r;YW42^Fb>Oo~#@ z&eW>n-&X!z#=lMU8|R(=!YrtZMUajxoDM9k^naF2h)Vy*X)j3WFLv(m9j&tpi284e zV9(ovPYf1qv zkx_wTKSP1@zaww@M&(UUA#Y%Ao|pyVMb(QGu^*JVEhp@8z+XY|=vh&DvcjYvA?U$C zmyt!p3F0yJ#Vb!@gvry*LYSlpeVpXU=AVT;sX8Nhl9C&hCx4BVC(Bu$tcaB-S|uu` zvM{k~7ot$ek^Wq=7=aiN54UCXBBm>em?tY?Ox(a(WQj|;#Oe^`3*M(2D_;IaoEH@z zBr&WkKAQMP5&mf8A9l1NWGL1Nc-QQ$I43^Kvg2`*6(~zIVO7Pl#Kf{h^jdIchSo%K zeIZ$bRU=Vi(uoplRFtH~6(wOmH23qUD0%+Is3@_KtIaU~og_*=ygDLE-hh`vgGolf zW?|Si4{7FOIdVD4k>OQQIf9YMQHZ?rm=GfGKQ4rbEh0of%Q@0ph>%`F`FXpYNn8@E z@oI2;Zy`lyPeduQ=h0Yu(u8OX8(b2j?KAB`Vf*Yg5gE^lfi$iR+kUD*+Xu{!V$TW_ z96BH@wok;eDo#(QRQ!*BjgG~ByshOX6gufYGP zg@w?HW=;q%cJeg!QIJu;D22dIij`@zOupHoZ3>Y_KKQ3)4DzzttrP%lPfr<8avdNHm^u z0W=QRA*Q9Lu#-#9c2v64lEevZ7>h~4AuzUX+URRpdJ4D1OZwFY+jXje?cpRx*-yhA zWgnH{3(0E}A}@5H7x3hl*;F#9HrT0C6DIeyz?*5qJC(tYWc|DC)+R>Y{U{mVtqq>l zsYQFIllG22gLe81Qr0F#G6+xx`upC22?B#(x&oFneXD@Yb@2e1`QPvfp1$z9aQKMH z?Cyi$Um5It9iFPINs_|M;nJ`7NdMhQBb8NCEbz~L?MEtamvr#o-RVf8S?r>EI%e+6 z%M9mb{+O4!5A$?#o@)xiVG#jjq;E#j$jTzi$jZ|8(?|M>JNRaF3YEpXKL++NMwgQN z$T}5kQUo@=8F8z178k?YDd`WPO-`yxTBIuNxhlu5rMZoZ3XVBf zOhw;ci(~KBhb?XHE2sS;{VIK0{YYHMhxTXs zgk-qs+BWxF_(wY^B0W|B%u16Ak-_f-+Ni>NXV_b#pw~MAKWhFvV+{Ovpa6Y9g1^7v zeHE%)a3)pWUU}Louc{PPekotOuR=E-ED@P2*+5a^7RwUXzy>;@@^m)PD=Q6cpyyV$ z5xtg5VFPV->E_!Tba%y}t+1HhPDWlKEz~d8C9sKAZ1&hASI2bCO{EK7d}FmO^=7)t zoG%L$)0u5Qc>qnoOWbT7ZV=x=Bd~onQG9pM)zG*pV$m+*Dazm}O*qS;TN6%>5y!*G z6+Mwz(?9sCGMw#fRY_QA=a-YHy?L26d6`>4pSw?U<`V`qeKXaWV5V@3)_nCC9tgPWut!7{3UqLrL{ybtR8g=WcO zfI@$R&A+y(C$>#J;z8`i5(^q!FC81}P5|o@PinlM`&@SVz~CJ` zemuF-_~~gpe#Cgt;>UT1n_z3TZ}&yWFiR}qzH7_$5=8SaFBaOIwyXsOinPlDo$`}h z<3X;VyOh2e-;V9^fx*6qsCTa?1-|nNe1fsloxWW;tA$(GxCh94C>?fLAE7!e0`76& zh)bP}h$0tJ+JIr&Ef(rgdf0YLIp0i68F>05*Q=V#QkHO8f{qw;A8-DIdeJ>^p>8@2 zvFkX{5W9}HX4bfTu$!c94;8a84p5kLST3o$O28_?dX|arJ;D;U-HTBJ!nQ9TjBKwK z1pg|op$+CaQ8>T%U>kdCIu2d}v*L`F`Q?-TOZA`~@|>`#4nW!7|N#{Fi%0Vz)}};~#c3373^li$!Li z@$(64)P1~$F^3xCKHiDe>K2qopAvD}0hZQpDo4v&Z9+rLcQ~`tAJ~1|F)^c_J+n*Iyj*n)BZ))_Y%Z_h5x?#AYXI zd*QJDd{E4=PmRXj>I&*yl{h#(tS{IQf(6i-xYf7(!Ki+V_U^E4{zBST4F|EezYX?- zgttJ#xeuP+zTIHbmWVF@i{v&P@wE0~JaXV<=O_E~v+GL0Mk`Knpz(mOt0PO&3^Dc= z2?x{ymv5`fcP#i)l30?X@1B)?_Y#}Yuvxy%eSW_0L)G_T*j9?8$k&_?_M}gmdCw_? z5t!Y7MgYB1UE&VVMVRwP!m~eYtDcWRR?)Sge~a=!Up7$|pjEQS>F<<=lbB^}V9S*(W z_qT`>IJ7H90lw|LFNE_{V9@pOchHr6$~^`h$7li^Z$;fUpOxAH*U0;=LZ2OItk0^6 z7*N*yIp-*1pYGJ%mlh4R+jJeVr2@;n_2&~?(s+wIpGElNXbgY6spAi^%i;XwKz??8 z30?GCtkjJ;OzD=87+IWgjoOiMD5*zC3Y1J4Ykqa&(FEMV;D@OX*@8Cm|Odfyu)RCVSq8!$pqRE+F0E zc%pkDdJKpgkK5=DYZubtA=C#(mugE5Bq7e=|6a^4yC)Wkk_$;u`BSk_R0>HmIXB`X zQG^+%ip@hjAQE~8ovmCX^e?|KqKky@5xU4Y$ejb1f3QI04_e5=#dIGL{ToiNgGOIoMg$SQJ)q-vLH*v&S4Aavs1(Oz zP^9zmnBDh^<1ve|z`OhB&;VaDd<2liro5Kc2E*dof|sT7~1LaHh#QsOm`P%KPv{&&A9;t-I$rbGdCEp*aCr4G?=+p#0quY(V z+#;TReP0F^+!(bd&|RI!L90HSCX`QTa#>u64UA`8?@9-qQ8|ZA&UB^gt!Y`p8jtsu zY6kkk=nc4m!GFemBXrDboQ0!lXj<5|c%B$nMRa6o25pF)OCo0IbX8egKV2!V*^l2~ z4Bk5%ZzF^`U$H*UHjVMn5o4`~l_iO>1_Ky`Fn>HkK=6ETy0el z?3pMC_b5hgw{==5+0%$VtJ~7&prB9b|A;SCgw|2(AM z$=MP5{fme2^;aYPP_DJPzy37-j;~(+f5+eP1NZ6u9aTQ6f?c`C6g7dPcPto~kxn=z z=W14Fv06BliB3{~-2Po{inV{QFh%X(ng0X(xA0AWr^@t)?B6A4V*f5-`*&8X{ksSY znTYmWm`6v?AjjYOARb;;y`eJA0Nea;T8K`X0o`1DCidFCC8xF5wkr|#+9OxR*lSP2 zPq$|L-{Gf4^NjgPL}y34Ko^oR$|<|V{Q+XV8Zf}n0DAiYOBfpEu^-Ryn)oA#<1 zaKDU%`)zkw$gws{yI;5b0_}cX->yi+4LksS{2al=4mEOuIXcHP3B*13VheZh&*um> zc7$#Hrs-6d;^2yd!dRL*2>bofd+>af>T6L}DR@l-9!3ldTa}Ad9lQcRDz>Of-cdEs z{d(2Ap%eMnZ=NOT%QzPCR`-YS1>X;AI+}PhWh2e_@a2seBnGXwY>YkcQUHrvlF{Fi za9v^rdEaFKzCAQ8ly0!z{|tltRP4iPSt`2gmZ>GA9V6XM$gK5HH#;=1a$L-g}C z$odOZ?+>lg4Ma(-m3n}m>1=mIM27oLo~@5RrQ4sW*rt^CCgatoH*g)g8DHT7 zaYsIEbZc1e2JwTo-Lo6SQ66o-0^??UZQ?NdU^@L0)~D0x=oKu6a*k{^y9bE4#IVQ*wEfIH1rySzByy> ziq*C>dzv^unqOpie)Q%$;+`L!GCO*HG-aBYpTD~ld+w%LfBgLD=BY8$>#C{$n!keRcfev32I(QuWPg2=@w6u_H&GXC~U5MOUGR;Q}DE- zaQjWaHZZ{M8uF^(4exGR|CAF!$9RV}Q9KxI!5CksCR8KsbYe*yuwd+T#;1E!EJ!f%rwZXwIsF~k;GjH0uKr+hPGyVvna%3qzM_L=g@4ehIxZ);n}Bkq0R<)|a%Gs-skpvDlCNG33^?VvW5% zITmFv<$*UNvG#z&D}E*Z5Hkf1JPgMzg61W$at0!^fyB*Dr~iIc%|1!)-$;oJHM?F} z_IJzyg93rlAG4kxIsm9@NuaG5i<*7Fvlru8(DqUPW6A>#;n9sD6~|Uh^L(>l z_f`|{=J|wEwf<~uxi;jU8!Q6QwQ%2MsZ1|er%ke$qM=!u>$DVM+rc}?`y$H>J&U^{ zWP4MQwuK=V?qrm-i4yefG#+DzNkDX-lr2XJTGUBI3fhAI)J#`q)#9xw}kzJUThInjHdk3+> zbTpLV3rf1k01VS=>fsz^iNiwcFsBdF*TDL!&@AoaYF+g`T?PqRcDb3d6jn=Nl!nRa;WLu*p zwcO6pdT4}Dz^=S0B73nJ0l62;+hz#~FVWI;nSprNpZvlwbP zKOIdER=(mE8DH0QFd~W8;~72gH(J9-kuRnjTRsxnT8QSd>Cj;I#q8VvJUs2d`YFYi z1AAGXaXdB1LxtB1eurLTCTSZOsnO-auwLzvYA@X`Q7tXi-BG!)oh2vbu z&*V5)&mQ>BA3M(VzjU5!Z1g;r!|41d?j-2Xj|!QiKR>#Hr98Hb4gw&1{`h6o&_zc_ z)A?{@oFiW(v~}l4dACD%F*!$ddu`b zI5AojIsZkwmFdXA>Bzz9eB?_U8-1LQen~S1^p%5;eBp2Ev*7sS;*5LTQ(q3uJxMM%XxV@ z{;>QhWMPtl@+S-BkAvh-PvQMWvZn{ho~y2f5u=?@RnOq~`pYK0cMS`h-#c%bfqJL| zkC+zV5!0eGkvG;h@+R?!kT>y9tXp*g#~u|p>2U?l^6Q}4-$eyZ)_GBZlO~RtrVS*4 zGu;#sIAgDCBXBH8zDHvO&i09M1~i_>jsZ6VE&8mZ|H6`_B9+9@ioNr0{=7r!Z`6m(6?}|6diFS`rr63C|hDNq17OH z87>?BCiRmhKTJxw`)acGWaTB}O9*3|rBU0zLNoEd_)8Ip9O}ea}&|zs%F3 zrgFyNzUMemuC|{*a`i!yt7Sk>hqCHdWW5HM!tkyS`}Mq~v?rMN8x4kFpgVG9%JuQ? zzre_A{sk}}k4snmH-fe?I?LrB2PWkkRoK<0IS1`bZhR)B(Sw{vzvFS7ld9NdqHCPBXoY0kcRKY4_$KANIVTuk=bbAm-@kr&t z{nm-FZPaira!Vg^_zpIOe0QfRtL}ysS}sVZEa)e9pB6QoviKhOB@}RfNzrOLJ-#fr zkkmFC=$$g?>5D;U!?xE|>TLJfmsMvQeZ!8q>x>U&%$S|JxmcaavlB-pqw9Ol(AXsL9|L^1p;4k1yvd@F^w7oqbV z^t~YGJz=H3uQa%#6$itVBXc*df{9!vBrO-vESvRbnIu1vL7)1aEt=Fbd!a&VU7DXUq~wM`@g1` z)?Z1IW5y^BznpRe8MEtHb~3|UuZ`xK%egj#pb1?GpTtddXG)1sB8QDoU>_kz$nT4+ zWdF=({(NMN*gR;!e>Oy}8OX?a4;i+3332FI<1E^FDda!e6_WVxu`}d9iSK~V3bbv~ z)AQN24#8)mlqjDiw&AnXmj4qzD-5bfiO&j|y17Mq(&iQeUCRWAiN&F}>i0Nog^rDu z$8uP_M;eDU<{EO?H@U=N*a=Y%n_?#pn|V0GVeLjThyCL)a@c=V9fzsWT!(S4%OKZK z27HdyIP7<5py#azh6~=>+8McJ| z7U8f|;F9z>90vPsH>x1v3PHlnI0Fe+s*`Y>Cxt4cpoLM+`)rutybn4>IqwOR%z68R zI?l7k<2>dz`fk@KAvlj>eFWb*jLi3rHlks{?X5J$7!tb@qd*S`_8Ssxz@_@qO;%0Z zATQi_KJh}{!3Zz>mczX8^g-l>zmH;G_ydLMyZfsU67wb2NA1(vhd_!b_+Nlbn{e@yZMFq>FzX=y9+H^N%AHl_v+%Oz+V&(K#vbYU7%9Gmv5N0M_aT?OK7tQC zwypd5r>%SFW_Sq;ygpjsXfAL96d1Z1KJ%D+az_aNWIM%g7b-9Ji&8Na72X{r@;8nm zcSB~yylml47)YV@PhLbmG{3(iQGXwJ^SL`u|N9;3cgM1r{cMagleta3Bn40Gk=wz> znDsxhFIb5$QQ&#)#_3g=HBMinvww?I$*obdYZsiYnh&bJt5hFwxo;e-2W|v1wQei` zDkt@%VS4@E$i3{#h8n~ppxp-{s8Y}kvEC%c$X81F-^o8icWOLK`=V-J3h~Qy;e!?l zx9!^_E=0Q|6^%?o)12OLqUTCnk6FaZEzq~R07Lf=O*4rN?iOdbi&F6^3p?n`N{|Q5 z8}T=+NK0}}upp**7gq`q`AISk!Yq^Wc#WfcGkfuB(R{T-Q)ZL2V-n+5$6kJqgWEk{`cqT0;F}_7? zJQ}*(=FY)_;*;RDn>HHkUls5P92M^z1-Yc=yi0pS{Wm-7>zjmEvlX?CAA#-G%OM)dA6fuViE+e6OT zXop&wa~k`;cR1`|-AMj_qlFct0~$QTeeb)<0-~|14ZUHm8l8F?ehW?dxK19rQFPOq%ai5Xzc(A(**M1xAk*43?oH+mFM9 z{uS$QpNhUk7rXpZ?7ttI@?xxp|GsqXm5kqi<>=M)N|yGDT1LHJZyA6WB_Xf=jGlF;?~hgs2wc6^v_ z5Rx$i*R$9^-r))J zy8Leixtp7Px`Q0oWg8ykxH7xVL5@DGd3A$|!~6n6;E_h${GSn3?2+r2kw-4xdg1cF zgBP`^OE;ny0qjX8xdLepa_>G8>g4op&Txk7^0W84&m-k^?6Q%U(I&X(M-F7OW(r7% z9q|rx>hEXaXr8xT%JHvGo(ikksY(T&MZyQU{9p(^VExJOMTZ9(#jrSfCzUqc|8^;M zpf^kZB#WL@UW&ZQ!7PWUv>~_Wl+*jusr>Ato-5b4Bx|=}*iK$WnOL<<#zFH%cxC+| z)zO#ZMNoYUe+6|Rx}TSjpMA>x#z3g!8*QOt)K#`7UfF=;ro^rxZaDRJgt!zr;J=W({22iW5V^Q?H` zZ>My#V$}Z>DhBi6`Z)7p@l}@C^?oYNI{zeb5S0+H79!&yo+_~tO;jCC_Q6hG{f&4p zjW#|SRiww}3>E3oZLB|OfS||Nz|a9X;m<=~1G~1GMc%OuqL7bw48jKemxK{WJ6III z(?o*lr*?M(5{LJq!MHIk8}B?6Jv0(7r?6V&osJ7GZd5 zGVtekGH|;%rmxNL)6BXVe(~iThbcJg=qYiYpBto<_ot?Eqb5Sa=5t7#>C+rC>C$9k znkEycq2Utk5vBaUCSo34ubA+KXH9rk?S!-cUK}o6W&QEpnDK($yc_m`1_@gTRAQe} z@mDcLoraa4%KSZ6_GAh|ScBgF!e$K5gEyklP_T_EI3_sqSAwbqgzON^6i|(Tu&;yX z6NGf_e&kd*-?uxz|4Ef}3BX+ zWW0_uejD?3W*ATW)q|FUrCW_M%4~eMBO8FED5%?)qeFazj zY^*vCWIl6Wkls9u?OjX4wsWAXn$eQx#50&jF*sfM39zjG#UyNbkmQ#>kfeg@y5=(E zw(*&4p#9qbVR*%oi|M}J&kagGg(n%IeKWagfi$?=ah_iQqd`VL1=-eqo4hg@sDCna-R^E;%p z-hwL1)kI?osLax2Uf)}|* zO|N3j16m=Blr7s+MEJWSVcV}4X$zinLxX8CAZPzrO!mDf`vVsP4}##VAE2Gp4-P#n z1m~aw$ZM|+XnTL2cdtEqk8ASdu;%fb@bLZ!)!!*iM3F=3(}}`u;c+TEnAZa5P02>p zXNU>N6A73Ig1S?Sc3TQ26H$e%k-#h%5 z@#YT-IxE8V9Hnr{< zQ7ip`u}`0G((mABgG}VhUqy3OIf)b8^^ zhk8sNTyUufqFhEg+%0gU&6-=^0;u!z3ak04D!_0}ZRk7yN-Mw|eg zI!s-HVpjZ+Ao{=QBjEa*4 zlhHc~;+^Cqk>|Nwrj>v9;oqtJE_Ov^drJ4+lqmAV-n1lgS{+si-!T~%U00r#M3Hj* zbUm#DcJCY%8iMW@r1m&q*V~b$VHpBb0aG>1!F4J~67@iOV*S<&^B^Z+nF9!(BaeRnN>1+-T2H zR*g$7JC@*?OYwFdr(CtSu# z9Qxm2tW!z3gPH`f{eg$mo~Cn3=+68&4c#2YnnKs#;&=azJ#zdDdgb`;NzCzet$bJv zYV3zqRK*Etg%||9lBrP2V;nsloq^FkoPmjSYk7gwf4?bDS(RteO2R(YNgNoehPE;2(JP7vzbW@yJRj!z>~<6gx?&z=i1psPK{7gC_U3jRfI4BV1q~sjPx8 zk-*7CFejRp+}C_4g@RaUw8nl9ngvtqX->h;5`;ZaqrXydFKK5Ec+8$otlz+$7Acvsk%s2%a4YbH6W{nPn zMIs|$J%X)2gKqsjCn)AhG$n}NMf|&wf6w6GJ6ZDKaZJ(#`L{Sf$`X(d-y$Kh%z{94 zloQ>Yw26_W*vbUq_Eg2wl{TA-?#Vx&1x6xvh|ps3+6|;(fqn$X_B+S_uQ!vIhA$^_ zIV7$fkqv^2GR4SxF#~f1c>}wrf1(Y7+nxRgHIv`)=;L~Gqe?Vg>3ypkj&?^~=*#7RG`Uy7N|MNIc1 zsUHgB^aIje9D;t9=?|X?q8~Dt?sleoJZ&ayd!h$Lkx(xap*wICvncO#A@|HP6pUz7 zRFs=plrQWfmge`^1nbWHQCph-Jy9&pZ{#QA;EBs;7l)m_tC9M^;M-~Ub~R18xc>fP ze>f~y!09~&wr>}R|56esv(gHhy?C7;%oXDNVtvbMJAUcEli~)x<1nGbID(Q06HKql z1>Y(YHj43K9TaL=MoI0 znkMr8H>4X%{uww-i_K!Vo~g94Ggk|4e^^MJRU&gJqncmK;n!Y=-|*9kWGzoygNffR zPs>M(5d40ZUmho3elJ1foxypp&{TE(h>|1|_C+D+hdpQzAW3M_Wd8HyJJG5_^4JV( zrW!oX2IkaFAP*c$MH$$0^3A`3$gnznTbs8Wjs7%$m+$+n`E5Y>Yw9tKmc9uX^ipI{ zK%0|~Yk^ZxQ-$>sii_{y_j@=p*9*bvLU60;Os5Eb)r_xp#aACW<5yuETaG8wy;}_t z6VtS_Va0bXV1u@#h|DRh%#m{dzUoZ#wH>HSF=d8v1^JB)*M!a2!h>e))#j1-&sEgj z8#&r3XbPcRULJpVF=>j;!>L7&oM++5gUsEyf(%3Iv4NyZsdG?7xDxS78M?>QxO#pJ zCa#4^!Z-`GNbf>JkV@*@)k2Jj14y`YX-Z!U(Pf_%Xp07OU7wN#0y>rpcVXcVbK!J* zN$l(va)GpM-Xhu&x|@yw?g@SkX7kX5u}etQ(f8}4H936O7WkPumxgVf#1mW|c3ms@;V7}heK3UnYmVq7?jJ<)I28x?d>Iaxf938>^h4nD zFSv5}W6Kw!a>c=qzd`kQPq5#&XbX7ZTnoqd0b{xo8_8Nwip&2t7VXTe3*HI~I_0&N zXnbtHmt;~!E5-|`b+tc+@dEsaVZ4BbNW6e^F>06g8%+A%Qwb%VYn!dvwQeme;?j+D zbl&$JndEp!;O=gE3q_T>v>p>Rm*<+|`5Tj!La~m@Qmogi?A#3+vdh0XU0F3J16jq6 zMtY2w^h!T5IqTM~M>_N5j0zB@Q(Pi&&G;;JJ!T7Y{$3GwT(YNUpx1vPA@s%>09z`i~FVSKTfX_PT(yrrFK{j zl#e?|nI~Mn-D>S-D=>DFn)#tK(5b&O^W%K;XJi}LY=>vI{LHV_%!6uXbG~_xvvyNw zr}@MD%oA#Dt<{y;?5wS~=bLvs%^$;~uKAgJ0k`3suFPZ3%%jewzoG>I-!y-SFY}xD znhSH>jjzGm{3gByFaIB>kEX>``Mv{G&&)m8xaaz&p3S#RquF{M1aUw&xO8;J;b4n1x-y=~ZlsADql|Am{O) zG2z)1?81G%c5$<|7>-=jg^9k0y<((PzW*iKTJfGpP#(bPFyH^0*xbP}5g`BJMQQ5v zDzL6AC zhMy$ZG3W`c=xK3ff1y-}s7f&9H?-s{uRkE-+q7WZGT&0n)t!)8qdDLZOGY+ z?-^%pYl17gcFCim3)R52_)JxtAK^3Qf%|ZWtM*ueGkc2?m_yf>?Z>12zR!cnyKv=m zNEeY;+W*vS*TV34+!YwMt~V$%%Bqz2&~V4{{>knv@82QuQAf|w)1IHt7th`IyL=fK zT+u-snUtn+rbTcq2VlV~ZpzuV1NrC{eV1}Rd1y2D{S;m61#A}KfL=oP(qR5|xv3^> zS72K37QGx2(f(dlEHO&wvkDpg1GYrqJdqIF2Xdx!#N;2eh&8+8^HX7C`aElIOP~4O zPEVg3y8Z9ar%N{j`poVgk3ME&`aIkvmOhKRFnxY_H29VjE=RKC7RCJ(Ho;-^;Q$HjU|GeWpbxS!Z0GO ze(Ne|^~R^@H&CB>B)IdtQ{m=w=$P1M;L1=Vk!me`ZSE#TtZCy=~h5qaE1yyg$HEPGCG*3TJ8t0$aMro`~ z#Lg!lU8NjD<*R|Q7%RNRsk|->YVIqvT0p65P<2s8d`M!o3d;NZ)BWKMU=;twdol$o z4oulR4#)!4yv8$H^>fBA(FoMyOl?eZ`b7Jjz7*P&bo!RfAZ_Ntrg6Q6g5BXaE2MORT7iCm*!$;4ov~yOucXdxJiPR3QfG{f8W^^J zH6Dd2=*02BMXpx8H{H5ULf?7ylT%@X`!^{B=TYG}QH^JDl^*S^tK zNO%FZ=4Wor$Ts}@Def|0h1_HD1-#D#WXF~SR?#cNTKY9j6`v!UigFc3B zJv!oLph;<=;W6>9KX88v+_bxu+)p|=pvGNNS0;FVqAyh#70$ag3G<)OCDqdcPd-q( z=33a+kf@75%IpIp_rhrYVcXRfi%DxDk+9-jP`j|1KSYMB;dre>{RyRzyR(o&13r#O zY^D6~I08{>pQ4hQI5C!F3=N9~0BTL9^PCau&l|Q)R@QU?Dxyzf`M^ zdxjb)fSmuVRV739gMr>(C91NOtMX@2m8GI8^n$30`!=cumw`0G@rg9De56V0OJVg9 zDu+jTZ{Yxb#KOmlucV)47R_@FV=n)eqQ#RHmG&>R;Bi!#zQeYcK(`H5(M13n^jHUU zcRIya2M$dOK1zh~+9R`!ppUl&h~mXIdiv1H=us#qlp3}rbVNs@6CENlC0HQ1H8|r# zTr+*&!6NQUp;_WIcc$c6+TNKm(8B(Te|YjUZw&W6&@Sfux`_A1lhsvt%O5%wLyb;3 zv%mG68zWq!$29(xf`v+@;a`T43k#3+g(& zl!3gWwmZe0OBR~0=?<85U!%AJrt$ma=oK(!_gee7-z8gO#D0Xe`zv*1i`u_Yc>sOZ zoaPhqYsMv+@z?xl;Z%I;PAcy4g|wmZWgs{XrRjNhE1xhku8AY1GF4(K$jqI>FR z(UUIZuKHOFDf$ExP0i=Scf7*0QIb)hKmPrV6uSE*`HeSliMN9s@iv5Qhs}|zz(j$a zxj@*DO4gsQA#aY&$zs}jYbza1!sF;2#7Wan`Do}fTalS<7M=gB=uB0`^$s~_-72mu z6GwsrgR5UpG4aXQz^N1yM#qPT7M>CrND%8LbB>^oqd=s~6g)|5K76+u|)mHoTO< zY7$3ypD_!%P1%BU`=*`b&m>m0s=q7VFx}Jpo7r)+_Imd-d2t__~msYOfKNlU4Jt&9FOWvy^u8G>Gaoq}tR z3mJ_r>8=1u@cS$#yrC!@#JkDzeRM0=6E*C<4D67P=ilptyXsGctB^?pgU|mD%olx4 zCsOqB5C1n#x>Y2c?xfqD35F-#TnTNMDmy_qllQMb71rJNxCC0;9?!huz0To{@#0_N z)mi@G!K&XVk|0qkKY+n6mk3H74JOmIx#!~v{wHcQhxYT4O7GO^72c|X%y2LjqgnWA z0eqI4EDV+K|1z||-2^kO<7i3@(pF!dAlw%DT5zl8aHySScWSn4FnkSO1xo{1^{(wo zlcC#eG4UG1ok_O=xU!EZkJpxi?5`*J4DxvXzTJyV#_j&v z%m8`gS|sGSh`W_mN75&BuWb&4DX*unw>zCjzt2&s zHo~racZ+vJqxZM=$}$W`kXH`m`@0B@>uYp|YgO~ck`2v&287CbAzoQe$0_RxDC^%e zV&ayCN*t9%F>+$cS|Azdb@)|d33YlJ%tBl1D&4nZ5tEl zHAW3%R1MD;&3n*yUwivbejDwh`u88(T++SGyWfONdX5?o+=I;Yc#XpXZP|4KS?Z+| z$Wrb}5<6`=VZctOncWVbOo^G~LDn<@)LeRkocNoI(J9^(?|L|lbJh0czn`Sj1Hs2O z(D_^M@C49x#Q7cLk8ir0cK zbc$ECS){@w;v2lFh;P;X`Li2;_U2Cue{u=c3H;feKehLh`7@0_d+}#S{%pseDg1c> zfA-{C{cwO+KD-n)!DRw9#Px{ouD0 zdH!AVo2cx|@9E~>KYX6nf8PJC^RzuMtm_{>Py55M6mgz*+xkCxp4NT>3mgt+q){NJ zH){J!Dk$*(c&Uv7Pv&GWV^?AUV{k9^K{iZ7RN6UEQjki_6}$;1aw8r{YI<7Sw3Ah0oBC^)GT{ zapdt7GESTaqRR9VAK-wt4f+)q6ss)&XF!<0G{uBnw2r}AMy_g)Zr0=Es^W%QmYRLY zy$IWJhYR-nF3Q{j`1VyI9OK9*P?V~dseaTyuJw9Y6)HrGgzo2Uo_<5Erxg3;VR{--%?`i1=t_j#o6%X zP7B_Wtp?7!;4R4F>^SjYK6Vet2Py^erqh<#*t=Q`+t0Nawx5RHkExxOz!nK|n{hP7 z6t(Yt>`u+c4PGZ`HLXtnptN8itO)Xbzl46k797XmM>fx~6fM5IxZk&62WnTk`+a{n z%BSGAwWP$q-}lVo^}N#K|3g8+jJo1VB{=XpA_4YAA?|AWg8nMf` zkjvszWiVAsTz5X1;{ohq zRvLL$+Fib5;&^T^GhPY8PRf0JgZ;mu=wBQI$kQQ7GdXSkj` zH^U!!{OG-5r5j$+KQu#_%jw7=ZvSDlH(X-bRUfi1rt;kfe`sX`#=$*>u@;oWZEj*G zV-{1&YSNCd2D2JYg^5bdKY=WxBXeNoM*DxH8n7#T{RweUuEX0X@XCKlk^Rj?f5Li! zx>UX)misg{VrYwavN-!6Q6Ai)P2p`i@-OwGBPkGjMzkZdlx5;3^jSy_$TZTC1I&1x zh|3qk13q{$y%ol?c0UgF*H7QZ^w&G5>#q^eUsJ5`Z_*Se^;ci$FIQg^b=W5Auz#WB zO)63<13N5BoQjNIoh2@e6dgrhGX6-9+1vKmgLR_EGMZ1u^q8(5H0M6|o9MF}-oid> zJd_d>KL{_Az-VQ#o$ekCOQ9t8itoP(_S$msR+lbS=zvUj(4H{6yMmTSL;PpD+hu#` zd-CcM@h_q~3c7$lKOIQX9b*Mm828rtXm3gT5Ni&w{`=;sFco|B>ri`9{s->&wX*kf z*&ts`ztf&%eS1pI(%NG`XlrxcS{ z{5HF@@j^|jFb%l}pzAt$Xn9Y8;oxraj5ni+>ntF_dSOu*=(aS!E6h-$IMkiHkX?dw z;??_7@SK?0>C1zvT@2Kq8;S6~D6}lM|4~d|Xbsh&Cyei7XHpB{jB6d*!L+k*($4&(%#E3MI0Q852Oe$po{njtvHS$ z?yXj=+A)U$yV6y)DqU%zVi8q1n|%J!UzQI?@Y(bxQ}k>)9WrctHoeBg2cJy3_|ANk z9Zw0C(Q6pe*h&{d(p{@~5Jq#7@R!oP;~2lt8n*d&iG#S}Xoed&VmURgV~f_}<~vUcdZ2;T5(%!=_VW)Iw@I}eTnCGRI*^j5*P)#)+sRH)yxs)#wd^bqdtl|ZjY#l1zEa4TTq~Y>6x$O+ z(lqx!7_Y+uWaQCOVwgwkAOA)n*6b)Mm9a_$lZn#yS7S~X+Zi8QR>3OwLpRsTrgyd{+%ymaxi zQ3}ssk;1zL59i`3#`!vSzGDI1j8IxLk*CB+pisCJ6OBE?n(?d!p!`mgb=(J+SQY zup#n@)`3Kacsd}3j1Sizis$*xrhkb{q4scmNPUdImyb5<;3bX7oenZRE)hO8?{fJb z|3oDvEZ<|+E@}(O*4UM`HInbK!=Cud=6gJ{Gd|M6iT%6dng9O_^8X)-*ENi%SI&E0 zKZ-k`TX{`-@M;H)J8B8neLt+Vx87 z!4>U~zf^Ixf9_|WQWj|J=S{OlMRQq-EbHw-)2elXvoF9|jGm~gp{jv|)1R+CEc?C58wwJlN zE*uHWOHv4`IgVc6r@@ggD>yN|!Y1a4eXLibKIch)8+`Hs{z)%S&6`gB|LOoP>rW5F zhs4_q1rKd?G*)d5bC!(7l7#U8qgUW8*}nHu&XT2j8+Dd^u(yG;KB!fXZsQPEYioUW^_pOd^L$qZi>=PUQ8M-Ba{<2!jxwS%gyC{+n#^3(hS% zZpZ@l-LqmnvojeG6N@lr@?$Om!7SwaRIG?*GXbBj?U$ryIZVPjD3X!-i4?V?)W=r5 zkMp$sbJ({9r~7M3-s%HZNHXbzrNM<>znjqA3N`q5*qW@`lWbg2zYZlZTRN6 z`1K3hRr!ng_b(A^x&`!<@L1E5KQ#3I-^h=te_T?2-1`Sxn9@h};q^rSp1xrG2)MV$BBI|1JqWN@^hGdy(aSu4C| z{T>uv^Md~EjZ2NePa66F6GQEFzxfVnQq_V6#d5xDz2BhMl7@DvbhYJ} z5cRT|m+#VtW?r60Z~ct>3heuB0AU_8SG|lrR#T{d2JMZJ`ya@%j6IvjdZrpLyRvW0 z=ilfiyFO-_mM%}`%vxH0I@q04zzco%Yj5@r-rRyWZ)zmaw+OjvXinlW z=NsfC9(X={1!#xsH%;2kR=|V*!WHoQPVEX9uks^MV~qiQ8Ma`LtPf{3DGio1u$ore zL-pj4Zlr`PMBg^nja~1B#COuEZP$Qtl!{a^4j@AZ7*GaeF=MtdK2YJ(IF{@oY1&ek zR2T@>&1UMygffJeqP`UJ$Z6Kql(70iqN|U;^R{0D@dhFFVx}Bsfu)Vriy2#m3dfzm zVj8U%6U?W7LkO_2eEOy;REN&P{)uuSUr9cFo=;wr)mbQ{v}^8OD-W?f1${~=MDw7U z-B~C^tAVskP3H{OFa!7pVwXfS`1#Xfb&edCBp2KeJbAMh9c%_n_yF7aUMqj1liO>Y zlw|XqlV#*I@chl^egS(T>MiB{Vkvoa0(3<#tQHDipq?@ujt@UUfHYFE243w+5jhuN zZEEvJ3k4!&{nd0MgLR`X>&B?CZsh$EA4nq|azgLR^*Cwo?Z8PB3Na@!PMr543Y87y zl+H%354-BGx5cZbRfA^_veT>mrnj_>Yx#C5>K$BP)3=4LFHQWhks=u^<$@El8dG$~ z5Zs}~gR41xX6Ou7q_cJQq$KZKQ3``%b!TXR(;6g6HX%0ZKDizlJGiuiE*D-5%_FOtu z(W~M|Liom6gz#5qYqNI8tmWwTo1}FB?QOrwvYpmNA)$9V%l(`~F9C6t!+vvpJU=si z1~Ik2flwKL8AF9f|>jNW27M{1}jYCCo2;dm~ zg))VLf$tZrfBghw%=Pd`zCOqw1Y>M_=oh-+uZQ2A*zfG?i3_((#*hZtvfr^vRe;$} z*MxXjk)`stwj1KrdMwzRELH`EB^mSO%kCa8E{WCQ`9k25hw4y??VYWhb?%MF2r4>% z=SUTu)l+Fxi(6IAsmsq^`%Q^+oyA9Kjq#y?5F`dn!gUa9(yvs!PXMTtr;%tElpQ57{7(V=(#Rz{ff%L zK%Uy4QXZ?5Z(ADSnbW%xs&v!|X$PJm07uljCRq)uOuOMN#vC zq5Ra5>G}msWL&|l+p2?du0BFaR!u6_uoS7kY+`PW9t2t+%#BKi6+2U=WK0@RH%dLR zjNSK}My)6B6awKXz@+tj6RxJG^28%w1S{K2{047_=RG$IZ0|eObMPYDsQ>XglFW!r zBsbwN;WwCVAs=5*qkmZP1=)2wFt#}1<#zC;qH#DdW9;+KLl=zAABBIy;>%!qV-^aD za?E`EgR>n|g})tJD!fi>zV{6qVGmF5q$_#i|Er!@jkgu-`j+2{{>3M z%<`{9<5^+K7U?*}rl^L>EwCxU7yYKiziOrg0eTK_%gB?jA;J$;sr&Kp^E#ma{6|MR z+pUWb@1rw@Oy2}T;P7M-d7*m%&*;r!v<%FgLH=m)n+V4K29{pkHHR_rx-4P#;}k#u z%v%TgH+Sq9>GZEcx?%Il(~%BLW2eWnxF6uJlv&hEjd?}-tuan2&_%WdOxa{h&32<)pZzb}9 z{Q*ujz6MQVg;QPsbc~*Rt$+oLG;nCL`(e!70~WF4@B(xGqA^DFWMXHGrYEP-3UEw| z*J+}Q6g{i+3l|`OtVZTaOVkId|BhoV4Aag4rk$(NEM8I_8we|dxk-p(C``F?3eZ)-#OEea1|F}UrUAOBW!Km(M7Vrc8VuwmQI2+u`& zxBT17ybJytJRsg$R7!={i)*Xk5ofg?E4x`yaO&7WoZP*?b!$bM&c4d_Fw%{I$%$0}kz!Hs5p0;M3olU>(mD|@y2%b0-v z@(fzn&eK>AVdNC)FF2?!OfA(I$h2E@)uK)|iB*+B6FZ?$ReL~JSvUoW1Q)2=B+rZ0 z`7A(R(Nix=U-0TN&8yeU!%*}?sO=11#R5$#e9e8lIEv@Fc;4AY>Vv`wvrD^5AaR$m;YoH{6*>OhBkG*akxd1!PLJT$$Ywd@ zSQ1>#bd0}#HAOmPB!va9n*L?ivV+4V5!e9%SiYLEgKu7}Z#4f=1NuUu2g@9Wv$ue+ zCxv}oIWIYvv)JQ;^@uIkQwCL`>}ID~X=RVs{nz@W%{>Ef{Ua?Hu8slumcg=N^r6%f zQ5@o=<%cV&qEJIsqN`A)Dq|8OC_{j{6u+u8lHHNqU|nc5Gk7wQ-3`X>@7$w2KID8h zr44e&R&HkMsb;70aXH_qyso2=u%%25t{}foeFa92yb##Ez|PiZ4#5}Y3#=!jR8D%a zr&}H770je)xx?TDdW+HcIYZu7aaILhP*8W^`HN@#{snr+uMCXl4%_?gKBI=tvCYYf zl5l(erRXE%(s^{Gq+G-_X37Q0d7#dQ(W?el2Lk+6_QyovRJb*lDeB#IgR0*+aT+9- z4M0@ai>W0b1Y)M&#umADD7Vm1?5Q$_-A4R|<9k$EjXCMH-g44z3z23dONFD2=scF+ z5aga(?xvGnDL~~y!F^~Dcjp*+pig0tg(flB2JiACWXNDuD3b~Wn3zXkPRdvY3*F6!%z z(tUNhX6(5cc9k%?ak;d3AIpvBv16%hj6s9|ON|b))CGjb;dsI> zAxc)JM-fY9+JAPGQS#GkzN>>u7aiS8EkQYSD;^5LVTyq+D!cur1FP5;#As6-G)!lO z0XrOc%5N&cN5K3xYt=||sOH?5{1gc~EL5J>4rd-V21%OrMvLpB=sZ{_GsbUI{sJ*j zClnkGtVS&fz4s?Auu8sZAZnx2BZjaC^WecC0w``Qr5JxFe1@hcXHm*! zaYZ~yn_MiMLc-p85rohj5<)<&L(#-qau9@1Z9sno(UaXh0|iibk;grvP&CH6o@U~v zdj?#*tX_yX6W|{~HGuzhAGLW=_^SBAqGPwP}`>i5(tL$$j@Q%P_EdW zVBWxbRxo|B~sHe*Z^>knhS{7l8#(&}JZ^T3oQI6*LPmCkM-}zol?$)_%8UFpI zBs|`V+Xu~*BO}(f7|A9LvDOW&9GHVlJ@y$Na9w0ALlv)-CEztPPc!JdrNLMTzv+`D z@l?v|LUBAhOn*B#lN=N;``JRE@;O6GCpXh6Wi>8&Q^G!EYu$k z);vUsnur=m5)|uH+}I7rSU0dAEs19V6<|w<^P5_+ON=jf4D+p#Db!+=F=8~$SE11~ zWy={PziDF;0|I^l_A3d%2?bcMi9h>o5t)j8qcwpyV*`OV&n{;=#ACBr;7xOS3gJx& z!n5D(H%)*`Ul+frcqOwu2gfnEC@>DZ>{G-bww{fu??2%2Ncht)*WfQS|Lu?@puqH} zZ~|Il(wsL7$O!3wGM?waWor%WKz}ZcZBFf3Qw1h7seHz5^{@Se+qv@_tfpcO2!M5 z*VvS^Qm2!r`wA0V8paC~ca9hA+s9`M+cxJEZnEEa+A1ttE9=*Yolc5pc8Kl-MYbew zu%}tw1O4N(J8iToYaP3o{Dl`cju*DAEnFiMzKE`2eTn2O0e(khoGB^49|^|=Z}&c;V@?(D9}3qM>!#e!3rwD_%RU(>WLehU2Q0_2qJ>-Qtu0t-gqA;Vc0 zDe3(FGh0pz%T|kLz{nVr4}Gi*(VaBsL$Pw^#g%al#;O=Q*VoWmpftdxka&j8{?aLb7>hG(LzF|5;|8yps~V2 z0KR8iHx>Xtl6oa+pZLQDosL=~)nCjsx9Wc@j@(^_G1cVkvTt)Q^7 zLeJHRoi=38?QYDTYtJx>XLiEscr`2kkRBYBTg6mlbq`l=2hs!JgqD&m@M{|1oB6FmsIVUQDtI(d2n2o8qE>MjOm=`s<;;`%n~z<~N;M zg!5e6-x?znbdAC7NEo}5f!+13Aa=L^YGQZ87XiD|oX7od_}#pO|7ZAJ=SKM54PpE) z$m#OKINitphjY5-|5Kc99^-H4{wMfbdJ_$Qdn1IueH-L&TN!_Qc~t}c_SjFHzrFvr z_?s8QBIq-s^Z7cRP}r9~2JB9=t{$0A>uUV?&~^2~54f%_#qfyNi4~;?-_s`*KDRd# z%j^90f6Ve!;QLbk?_zp)d_<*O)qlFGH?aaXhc6SnAE0vt3jIVtFJ-!2aJkUA429`oWx*m&(C)5mfC)a?j z5jY+ua8Qb&=OrR%U}ibJ3a@3?=;Rb?OyAC~!O+02Yv_5<>|vy`O9C*@dKwNDccnPW z)wWI-iO;15Mk#Fb6&|w>L!=r`XA8>?+Vn?loi0dcejnma{$xmI_TKG|YvAWzTjucO zYR6T!%+bjnN4zc5o?K(k$aX*CA8+k+G+Q}{XR8g4Wtts7V|+(|c@2Tx49yVgZ z^V7YV;**7YnJkt=2sn2aV1^+TLp4aD)9ihH&bPJaVQbUZY$9HngG3@B6?4}6usASdLNPrlYPS_=-u(SO~01W zdI`vIAo7zisbiQa3OXm2l*Wp;VoDFqMbbcb_mhDJXL&U?nyJB!86?oD<9Q*Ih#*Dp zxDSw!I}T^$)Hf;-q=?F1B!QZqj0Dn<1SqLv#+8ylw|^4}XsiDKU3`z-!i)RRWf~N#Gg1Vtb8_<$1u|vG?B3JY#7n z$19zQE3WbXs!|IHW zVX=qC6`crMXFdvqV_=T4qT?(Uqxu;%8{GG8IKGAwz8+hK___x0HDMXYmn+MR=6vU> zp`*Y(jWg-F@Df8!8k_EG@_VJ@dydNT*py`qHL38guLyfDV(-n^`wW&phgV6jdyRT8 zj;7u}Hb#w{WWBd&dvEZZJH~o{E%pAre~0?}hGINN<^Y302cgkWl-b{qH$@6mg_K=G z!0t07NxpF~i0w*Hz9c~e=6p{QOZIOo+>|A}Q7$Xn#3mcE3Qjrth)O-`kb-!Ik{%ra zC^k!pqp1i6E1|%{m8&Kv#S*XCE{p#Z&(vdqW~MOu}C8%M9?ZCG>T?FKs@DgR-2lx0jT2QtGLh`^D7yC2H^1^Y{0& z-oQu;$?NCtb#fFgtA{Y7ox9fox)}du!~Ap)^#>tv4;_~83+ObaYjB46kOUsz zgw@!a^x7Oy-9z$|TXxu!2RVDT(b?Ri42~M$bzZciSP3(df(n6mjvmu<#N;)Hy9B~} z1L_W7R&?&aFkU#ZhD0TJ5Kq9q;KU~QKTuB{HUbm7pTfUSo-zWDoETGs7t?D%W%%t+ z`2Xm5XsiUzo43&njPcL)@Mq#yyxwGnTYpx;pWim(^(iy_{j&!C{B{Z-s=&r7dTBLY zuL}a%fG-iylb{g(c>>?@0za?+YrHW20z8qs`Y-r9eigpA0sib-kB@9*eSu4a^;^k! zVNX4D5g*vI8e6slAB>SKr-i~~EW{%GwgZ6vavXmAGF}p%2Ql$mDYR5#OXYY`cz(TP zDYM^!+a->VA+GK_CI9*%!nfVG+uYOiVCl6|T6LQs?Un`Uw5;E4)1R~{=VeQsW22~F zFX`d$R+}pg&8yeQiXbXjreg%Go+(M1WHU?E6(;&CrJs4gZ%3(9S^6$t+n_vEP#u#6 z@ucW4lP$aK|F*fF+zw*XD>pfbX6N0QV|_=FN|q%y%!~0RQOXvf0KLjKc4kBI?U&>Z6+&zST9h;DS%6lz5@;B|(j*mj@)#E?< zkL}f0f3DiAJAI_ut6P5**r-@{%XQ?bQ_@hS;l%K4kW4;}_xf>i0hk zu~)zHA%pnn6Ue&vE&zKqp7+4eb9b+%V3VQLzAM;%=eaL2^6+_5vWygAdz#ZH6w@djx|kd6gvG`y)ug z{WL6@-r|rm=BRO8SDLHFrthNqrm_czj(O;=-2@MxQ7N%dr#;9-h3x8fI!#tv|ay; zCue)=G3@%`&w}|hsrw_b`|X3>uQI6JXG-4vYTvQvY1*D&P^jl=yyqF%b1|gn{r^Ed zzmE01XIRgF|EJpX4BqeOwEgbI`~Bkt?Dx%|g?i6;KFx7p1}KM5WX;n=@6oy5rcIHM zDh!lI)jJH#E7Uw9nm1z-4R24i`F*t+6P9>8tIY@1W-PGiy-ICH10*$9BkVI#yg5&8 z#=v@Swc5N?ZJvuyuTh)zvAh{$$i3gI&7#_j0bJg9)#g{!=5hFRf!e%PZAO%OpHiFK z$MNO~*nE%L{IJ@Lnyf%&cfy&)#e}6X54Cc-&dQ@sm&N;%~TR>wl?9-$XL9&YV%yRc>y-x zt2S>?oAFerx3AjVN~IGt$9Zp5o5!flX!Y{8RGU9hn=`QaqK-HF)MjLL-a~5hEzNlI zNNnDqHb1L2i`ZPGHW#bSnE1#0q1qgupb|0;{zbKUu-c68`zBM{+iKf$^gk#7}R4>FsE9woeOzJ|hVIkLHa+FMElg&u7q=+!+e} zUWEQ~Brvxp$}rvQy6q>81%ib0rXappnvWR zK)0~0DV!j zMxm!O=vOi5UBaMOyb91SG>rh=9fbZ!%@BH4BE*ARN8Ap-P!gV0@#L;rw5pU$Aa5eB^nLVr9G^z$eOegwwg`P_ zBU60Ujiv+!5MgaPQjYDtFpdXP4dUP1{kKF*BD!7J2e=G?7 z>c*jeTR_lXV$eU8LZRm%^yeZ$Zx)2UDy~uJcQWWVG3W!rpdWq-ptp+z{hR3l=#Ivr zpLP=TDv_Xj#Zc%9LSGRR0s4?2^y?dk{sx0Si9vUTLBA29kBbETM-a(ya>=eQ4yd&8-)IDmBIxfi=s)%k zg?=|ee=!pDwn6A}q(0eoJBf_AcQ2=_^NYIx*8-RW>x>4xS40?4AK|h-l3jLo5 zeZ4*c^szzc|85-mr}+eZHiQ0d81zhpo*N0eJ_vnmCD~F=*Ql3dLpcz*ti;PLflIQPlm{;J z@$#p@r5P_51TM4i@}GfA175xuxFi$Fw7?~qMxG2@l1XGt;Bo<84h~$B38YWpl1v|I zflD%ZbP8OOsiQ^Ul1v=YflD%N{CPsX6!G$4;F3%kTLYJ5!l(#b7LolUa5*0@zX)6w zM#4Jw51x?#+pDqt0czi(ZLh?3 ziQ1QI+ZSScI<|sQsX}eLJ?_OYQ5l?Zwz`rS>1S?F+CymD>NM zZJ&qjiPT=GZJ&zmXDM;TQ`+`%*uIzA@7A`9*uI9^duiL#u>Ct~@2qW4!uEesdvk5O z4%=r@`(LkU+C2xM{V{6)L)%`3?RQf9YHfQFwp*zE8*Tf1Z0|(vZ)n@+VtW&6pP_Bf z#rBiL;2zPokHq#J)Na$ZXJLB@+ka`>Q?UIDYHzP?H)8ugs6AHOUU$In_f7YkYF^ef z?#ISQ{ia>o#`V~E7w}(g;}UG_K#>=h&;GW$J~cr)|>NU9a1a#6hod#^6m5$ORj-+9QA$cFqfUqcTayTm6}tqNl=_{ zZOz}O&k+`Hl2b<*ZSFg3U<7^VCK&q8m5oNxKOjjuvty7uK{+iZ(aHSH^Ir`2H{aw8@i%vLGKgm|%eLv67n#2q{f!s~bG-<5rnlmCwK}~$nXY zIdTTmHnY(OSqlW$l!lB0`IAf0iHEpW(m1^ zJmQGeEp16OyvJ{v3Pi=qCr$=WHTjf83VKD*!=~ZMLc3Zd3=e`rKXZrEBuZ4~f|SaWBNP{QR!ii_hZoNtmTCnL-ez7({59 z5mTnlfis!#z?B-O>D;xmFplPagXDUi0&PJ_nVdmM6@o>#ch5#__8Obz_tRNqHOI5n zzYWnf1sta<%(`IuR9UHGEWKK*et-_O0n2eKe^P?`Zs-0%rJ8bdD-kBo=dc-9Jf2F~ zt7Fl5G0FH>rZdKvNHuY&8Dyx4;uN}&n;NI2dO&mnH| z44{KO%hMJOnnfJYfXPlVP1k8Wosoo5s42dFtXIZhuX?dw*&hJXx)~`9)c)zKPO>EP}}BbZ47uvQ1amE)qTALumQ()9el~W~0;_}xP&mEo|BPr{Bqfr#Z!y~Zu&ug#Llz0*ns^`L+_%klK zPeMLi#EMF#?-p69A-SQPEb+F;UsE$zhNs|nLjK-9`D^mwG8Ql60+(@F`G@*s<*(1r znwy3nkC9SgEkuKMVq|3&r=;T2koA5%_!A>5r~Ia)u()h`z~3|@ow+fLVk#GDSXMqy zJPCnk<-=H}aGKFq6rR6xC@*V=>hDbanrJDV(iy|i@N1}uJ5iU>@4=d1>W5f{B+Zv# zB4IJmT<-MTg&$K6*<8;XeTyUH%bInR)hi-FP9+jCr2+mj9G9|QbWgxqfj?bAH zHy&9)u?PRc)gm+5K9rrKa>vfOC7w%8cxeKYmYS@QZj3)yuvQT!m89G59(n1EL6g)R z2m7@tltuMEnQ}C^9_9r+6$;ftAi+&>JL{7|yDOJm~=eb7l;Y)?X+xC?7SQqfw=>~`1<-yujUiaqdf7NFZ0?oJe#$V zO8RiF=b6FPIM3vBEV1kQzQ|j}{9t`$#$RV0&8NBf+j9YQ+x*#X$WLUPOF}TtiaT~! z8k>uu_|iyKbIDaFA}ws5+&zxmteJ?RAP*+fL}Zgvg|nef1dQMw2R!R1-qJc)uC10> z$|){^XRXTD@v<$5@_#=;C_j2Lq5PYh8On!pl>a!1$KWH#8#Ew&tx4&LgkEJj(|4Y= zMywZ4`&C?D#;De5?RM{6~y&2U}qmbCohb4#WwKM z>47{hz|w!ugI--lSNNKz9c>}^cs}WcoU+5T2K6hLKK;$pjq1}&b0g~0Wz&Kx>!W#0 z)$KzcS@N7Vza)eI>BIp1PGRuRJxsZeKNq3?0N2N>Cxz+b8zyP= z@zO~Q&N~FB<#X}D@hhkOrjI8vbzFV-wMoG)%;B$&rB`=6+pxY2vqw?{wBIy$BHLQ} zSt^$Ap5WRqRqBHV^F&sd6tv%&oDte4H?IAn^cnjCJ1(wKfl-bk*t=2T9Ura&FS?K_jAuMWZadB$oO??Wc#dXmTY%00xGNKjbj*Y(o5sIq&c9wiTyoa@U>X9>G z9bO)G|J@zf!5c$5IFEu)2N2Xf@NTCw&y{y$yPM zXF884fDzaz;&+9_K}o>+3`-c(Q{QJPez*HR4#7vC2q~!IrlP!koBsBFG9;fY$YZ{K z0d<|%JsmclpuRAa*IQ!QC181gBuTQNg%R_&*j(3-r_Cgoii^)w+1yVi8+{4m=ecwI zojh1z=CSc$r0*Ea$51SR0>tw%^rCbO2hLO}tF;LkT=rESR1SUy>(pZSe;qrJy0=Eu zucrg4A4#t1tE$D+4g6Hm6Y0#!bye}_a7up6& zh)(2XqHbvHP;4S*m zUZCiEjk4>RBzE=~3lw)M1uoLEwf5-o{v41hG8S~NLksm$Nx#L`X*D~RHOSp{r7g3i z*U`%6?&-B~Arq zrf98RRgJg)3}4I??IUfC+$6~?oo)|T~=k6WBd4!^ZkK*2VW3|H!%#C8hvjLbSIn< zOZG?0?u2*$zlm2+x2)R*qvYWw%2~yQEZT0-sjtZO2l0dua9QWM*u2{*Ies?FAU)9C z@-N11K&4p&Ya|HJa7el z_dnL4??)f|&;897wf}LK>3`hi`=5Lz{qNJT|6Tu!{@HkG*{VA0BrF{hv9Z zLI0ne@Spd;r{i&892bdkTzUY}mmk2#W3ONUD;{kyfUh16(>Fm`%C1QY>;YX*hx-Ge z@!wBzBl{}qOxbua@C)4*7*CSxcFYlkE$LDnXx%``Pzn=@%kTi!GZybJr-FOskz}s(|oXrQJI8d4%V`yqWS}J{eE- z+pySAIYKf5YG5K_s9q*7oABhd@w&?wqjNXU4KDwQ+u1xbVcPvNbP7m_X)+vFe6dDEOTqhisZ> zJi!U3oOJ7QoULodvDx}(w;;jvB7%8|6U>>h?1?GeXujv=b7~PDV)MO?-yZ?@%d;5q zl<~HH-H>>u0`X)p;`x%_xPbv1)qxYw()$^(7y13B-5BuP%X}%JAnS4LdOGk4AdTH}OIKAL} z9Jv3I^KtC4hV!A^&k)e0Yh&~AD1YMcjf6toOg%wjV>lnxk7?&)_5*A_?z<7^YQ3D=+oi`H@SO`i*;p)yAkzB@=x1 z6~_l192*iJv~}!%93SL-Sd9<*$5=H!XwKNk@j(;EUMfDw@-RbKYHE0V(CuSG;)7Dg zviP9<@!|17SB(vc5Axs7AZ|;+DY$by#s{g}iLBZRy-*NK=FZbd?@dQBdVet`xcu&b z<>zP)H~%stfp;0rmd2j@*rQ`pR6**P#+TxsV>E*FC;r^+DY*8=8EwiTDRsB-!Yewe ziUFE+?BYqZ%i#M9Al%m;;hbR(afS+nGm*nN(FK;GGSY}UIMD@$B>iqO+kzqgH^fEB zfoLi9_w-$|t6NJzrmq>+H!3qomfx|=YtN3NUvM0^`nUMJJOF@Mii;m)!XL3nbytKG#SCF(vLid6Oxyt-ZN`T{7Q7M-%up66!D3g zbg*|=?H%ALkrgtI$pXU%>~^ZS`6cN=WDa@2&-1cyTJv8=zM7YYz*`4C3U@fUc^=R# z9`(T%+6VonRS&QgwCH-6b3|TKdKukf0WA~hS8#{6< zKGKpSAdWsU%HR1R>_l)sJCu@h_rzq}3x|_Xd9W4opS?>34%*ZNrtaRdko*}bL3S|; z=u#-0Lm~w;GJ$?d+yHr_OfiY5SRUpj72(2fD#B&p>Yj{T^@%{)_2O9NoOC8t`hJ=-ijtepTG*M^5-Z#bTRBhhCMr*opZUj*5HF!>m-I^V|wP%EuwWq>D^|b*1 z@`GxSmfvI=#hCc9WL)WwJ{Z^!b1x*#Ch|WkDNy7&!LsZX=uPx@K7_9a8V`GJBlN;7 z1q0gXxfS$Wh&h_urL-WtWw0lFOlT@w<)WgULd+2&k{k z{|dgFZ*OX?eF1-EIWRlhJDAbLl>r3P;rduWMhlc|3Cuz2H!ZrCE1_54$Nle3;YXLSz z&RHSWI^q@QWAR|RzS$m&FmyBj;#i5x~JZeiVs}i zTFHTH*#pnt1J-o%pa*RIW6H|GX{smJshWWf_Z46%f4K#7dmDHTqT2fy=lhI9eVId@ z`6c+@M`1-^ygQfQ&Ak@cI4UPob6{J8x1Qp+?#5e68lIh`jF`PfFu*?!XZL$t8!lA9 z!ZMI>)`s`tMgC~hYgM6Qc5sgH!3d2|d5}N1uM_HJSw?P+Y=+BNdBW&DU9XKF*4o#V z^ORh}NQ?R*0|GN~U~hDaAoO%?a45Ij&H8s_7<=^bPHO-1?Yw{fdo=wk<PJEuQJ#y2kp%Vxq5aX`3K_fNQn3=8N~+pAy)ttGl@S`Bf?DhCn)!Z zDdQTgEIcwotN&~8{hc1`D=!p;LV+UfCnm|Ri6DcHIhs&;l4_hc_kbkaRLZVLVTp}3 zgHJa_tQf%8?f_$8AA(mY2G)uPt90pW7U~&v%8^od3>>k5iuB^pd}xv@Ax8A;DQeTQ z+EIhyGbX9zaI{)yhPcRz`&d*)3Stv|0j|!Qk;^un2ZnjT-$naXfWO{cfB4OZDXZ<> zPz_NfX#|JIWB0`edg``&m8TH4)U?4`s(Pk6rXfck%6`e>=d z(NdX7OXbK=PX8T(OU0rtl`XAssl?yKC}|~sv=8=#yl{6v!4$87FNDl*P(Nh2n?I5bD}N;W&V=?2^~2;=d`-|BTZf11hxmRL ze?O%?=iN{VopAYh%NEtZi@s^uPsR2;}NR`wxGrUt3j7-1{`A{p~|FV&Yx?T-&x`M#kCv zMilj{$E^w6F7c|&sPI94e_xx1M#cs?1JPbM(iKlu6ikD;KyM!-7zY>xaIbN z)7m(Yp(XoIm=qw^~bn-Ycb9C}hM+^MMP_&;mK|XueP(~Xg zMP&!LJHdC`9jn&8^B}>$_l;=-N~oy8_SZb>GN2Br-(j!59ly+0fCfgA$H$5 z)+=+cSIdX-UR_LLy>b;KzfEI%DS00K`+D-+XuQ=yQtkoo(O@HZkU$|?mW;N4Idd5q zryV9L6i=V&p%}3HuMJ_CT7XF$7Jr>QpP&^aV`>6fIjb2_syZUF;xfR5Zmb)KBU(C- z`l=uX0Rkqa!19e#@!!OPlv-z>dAa+hXREzzGY!glpg1&cimWIPfu`}j=u46+CjSwx0VcsDP(f@YToVh~lE2LP&iW0efo5Cii| zkh$$8#tbl&uprr^WBg$*P5g1sP5szvFY#Egl*j}WS-B)?#)nmcsD!POjB(~W#ZDLT zz*Nf=z)Gnaa#NjyWtYAsu#1wb$ZEYTxl+%&zc7j|o?>-`^P}kS)v{Hh-XnIZ6VGgy z-CeU_cNa6rGCXCw<2svuwd9&nMKafhF(ktz3^E1V_3IPa*B$w4{XEmi?y(q=R|VsyUle*&X~Ps6Q2eBKp?Pop1Cx*X9g#kk(F#03DoRiblhwa(EDu`vKo;bm0= z?m<3^b>7!6gul41*A={2;~j-5l)*AQRVNhe)YF@<1>STQB&S3N6ce4)sU9oc#H3+> zCSv6w5+%!uWql1G)haAb&=sr^l-`ufDHq!6NprN$?WwcQot|c-(9P~y`Fr)k;t~;5 z(Wz+8m)tRFYQ6HbDoGihwq2^oPQ!69USN)<$(xy-=0UWkk))N=>O?;~9!0|w3QwTf zVNZQE=`Yd?lF)SI z^ZPFONUEk_6>!A~qWg7Pkvy-#o-Ewgc788YMU#uMR@7=}0V`}b0M5XRSf5*6x8C33 zvQelCgWCV{P)CJAy$1!3l~vIy#@V2G@P2hMV)Mf!6&vbwvj;IXXkj!{I;x_Wwo=5e zw?{E0#Gq%|bB&%)PMuDbE_$W`*QvTL{6;Bd;J@)rYR4dfH#slBmt@OnM|+SwA6$%M z>L%rSxzidSd;++IN6)O@CDpM+k4O*kM*Jrxo}?%1lVsUF`9V;MV!@;ot1*0n5C%K- zAQrlUSiDJK10q?N`5qy}-pe;srd!O_9x~NJ2lw7@8%|Ao%zRwBf8a%1OR>yojlducn-~45?chcFP zz@9Ip9nT_qf@nxM&uC~qt%Ds|jD{A#)gX%8H{H|>)yXWk^*nS%Ms_TW?u~#{qi?=i<~2>hLUXQ9$=- z3UuR>z#3f7*5G0p>)&J}_9YAyd@@agGa3(UsVJu1| zB`k>n=#enO-3ohbJv;5Q-g`sSNcuFrlchpoRNQM(4?1G{%$Yd!YqvOy$a#dF{6$jv3)u-7kl+U#mM5$s(&u7ON#Tc16N<&FNDHHTzUr!48`s_ZD zzMe)`(+vij`*}UGNrVQY!kSJx$33u*#9w+eSOnk}*J|P3pn(gXikQ9?F&S1GQ*%rz zGEk8-48WzL)Ir&lGnB#*KJqesq$9qKofj78;{k`{tYS}`u(%jc&rD@fGzLEfeQ`DD zOZSkzyx&_p#`DIo$ug@#4*gCwiOXN2sHr-Q7SaR*TWZ7YfirfN<}Y`w?o zGTCJYUA`3H=vn+Rkv;YdqMW26+9}nO@LAMj*x_r+<-r*9Re=cmdd#K-JUXA#?c69v zxARD_`2}Il=SUtHW7ZbFoW6_V>+*YcfSLIS!THN1%O1xus-U6TALg#b;{sr_(r-*J zmMtfRH;OUVNMDJ+3ub^W=(NN*;wtobE)q77mKx!WQfCG>>9A?;M!+{beyLlV=vE2d zn#XSW=Aur)VuR0R#-khJ2~pV$#!ty|R47nr@UdUY4eW-6eYmPJG8SjsjCNmi@louw zyZH)Su~>sy83>!PjbcS#MhHq@qgWAzWXaMIV_l>urgo&!+~-HBl8(!>giMO119P=% z`eQNjU+Kk_nb2}do zrg6lIn=r3NuFodvSx?PeZ8oavaRswxs%o=YZO01I`(tGNc|4$I#&g(dNKhG|-_kek z*0a;uM!au8W1qUa^|cT9$K3;J@D6EgmhD0T3RTH9vBu__QYYf!oa3^x&+5M?MGAy# zo(P6(7PC-HutH4(1p2~^OpieB=x!=^7yKF_cpc* zNaL%4Exy>N2Qu183et|$i{rW}H#D;;Ar*|RVcf!^av)Y%Io(*XsO1FeqBV(Y0p16Q z8um~i7^MXfQ$Z8=#bAxk3s34O4TVVxhSjmKipTF@e2R&k?#XD+4rn2CtQgEBG{rd$ghZZ_*3PtdvM6y~9U4RMzDJslq1stsyFzn_CW?os$-^;cM(hogO6 zLhO~Hi(FLJOa2W)f$JO|`7Lqwj&ba+h@%y{6$YLvHE<`y^yEnNQvaGSzd7XOG(Rn! zSBEEgC!A!f5zyKf>{xwaNe(pAvZSS`CIK>Ok^uQl{VYsDLp?r;b2>yBNfSKzD!ZqF z4&V9X+Il~W$H+N>QIg{z`Gl3YVgzN6VG2MLt)7@`C!tD%?g6=*=)!j|nM}y}V zoimyK-bbsy|EB8ii~yo4 zkUJ4**}I>9cJ0a{Ih4)l>RQ~Lxw`5vT=a_-I)*QB;wU4H-eU*+e(e$I8xRPUKzH}L z#MV;3%s~_%Td^f{g%{IVq zy76|bKfu`>SC@r?3VNrZ%6t)#@FjbiD5s7<)oOxW{eIInd}=qYwgX7=&jr6psa`tM zrvjUOp`Zn~ONMRu=OLI{-Zk(;9V5JWI&FlNc!r)hlo8KwF5)+1HU@Iju2FBYJ+}9A z2Fd#t|MxxiFEZ^EmCs%q;ImiXhV`4(`^2GZJ)c!^&xYs1Qxw_bH$|tza{~w+2kd=< zOYRU%TO(<1)CHOtvOquT!N?j3-_!iJps~oK+YH<4;eJ!y?R-Gk0pBKQ?Bh4>helr# zA16J&5$|+{@w3N$Mt&1Hu_rq)f-g7m`nTsUV*T6O(fRP^?IHD8HThQfS)^{aQRs(( zrg=dIZ677qZFD3FbdCo_s%1Qp4SDY*gcgcLSY#kJLs67 zy9Zz3?a#sjr(-fx`-8ql=Ti8sD7*#ETX(Pd7R14kZan_uMjroBcQFu#B4ZfJ)nK^s zjV4x9o(2?pR}}kJI)C9icmXJK?I0ZsD3NYr02BHBf53h9)Xc>jSlbMI2Ym2WI_!hi z^nR4{E+$zkB=+=RN7|-hxv12DfM`X+JtkStg*=zBta9`;AJYRc=)m*BZoi-9wh{_3 z;WNcQ@-Cb^6CCF_9A_7d>#2#ud<4*Q?-TI6mS432!uQ_8f%M=&emp~CUq6tK-Nun= z;`iS;6CAsqx6Oh!7QlHzO5G#8Fjq$#wrCoD@Idsw?p#7*?N%T=1hFEOf#{8&4L`7O zm`L)v+gR+Tl=??HSgyJ~bSuRhvhxamV90RKcH!}wEMPD37S{KZ>FgsrYA<3q8aoaY zcEs9!BEW~?%|0;WzTT)Fg648+9W2M|2^%-3tB1fSdLE_>^)l~+up983miAy#2`PTl zi5@KbWPEod$PeLaUP%1M+k}BX@hFo!_CB(Pps~N`dYbpGm?&5&@hCT-lz)<&j?n9v zhJp2ZM<>#AY|70xWeS-7#~LMNK$283fV4!fixkuD$;6p)#~@J-Vt4b_!4GvtK9hQb zjtu5z7UGi1T>`wmd6FI@c*fc9!L#Y(@OQ3NNE`s)yIK1=icm$Z8<`>*sGGrs${0!5 zDY(e~(y?8faXBTpilyHSbRuP@dlFo@Fhrxx^>8xf^RXdAo(Kr~xlaRa>&;s@E&V`X z!BjU6L;t2wQ7h9z&=i+Mak=BX80EOumqCU)k{IqDxECSc0qnq({rCjhm!KCQFWjb6 zcw-I5kiwgu^kNjFBPC_#P(+i6ILNXow@bdS$HHrc6wM>7ZaIY|N09A@J7N zad>)u)+(Iw2FeX30KqZ)O>R^nIDBx7EKDCutn*o{$2wgp{!4vX~;a?GDar zfo@uHE-7%pubc|@eh~J)1)hUEf~>ad_0ajT{P{h}{QTD`>ipCk-uW|Kc>FKF-$&E= zuXx*yr$V{vtDLLi{=cU-EFM_ToSXS_cs0mcAL4NKpKO%1R;GorRs*s7>m_44>D``JD}lduA-rt3FHmHr%Gy@$-K*4N3SIC*h}IfZild!aJ^IFWg&0R4}O@r-G9l;1Yh{QWK5~nfKRl zyaDmX@>|D_sl@A|MY82uHdLFL-CuXCasK;VXAS>t$6t8w7|s5VS$y`pU&jDm=*aF* zKNg&Q4{w`rEHeLXbtU}w-OUa8?<*Xza4Z7pK6emF_iM9;|BmI)?>S1Huj|7*KZRqX z55K?iXt47)^0u#zHp+i*xIK*jQXaW5{=2^egY(eQM)|LJV<`WfoAS5#Z#tJEiCx&2 z&iWeXzuz3t^53!7Y4~r8vH<@ba{Z5p%=N6# zIlcxY+?U_F!KadNB`uT|W`6#yJwN~EYn=ZczgEM4@8vJ-I6_o#su!n%XE;C$zrW;2 zkP15Uwoi{V%75=MTnPjIWJ7=fCvvJ>(~iNGjzpm1Mf;G755ecXBl+|Hl^0pSks2jzvp5j`8z)6PjvCn zjAv!?8DH6+A#4u6AMXjycph&%efVN%{*L?jjh%-HShF2*4A|q>FkpA^`%CfuW%74i zPbf2Aug%|4+Mee>J&bm!mYucr2m<*!+9w6_b=(9{F--^jKg5V!-xx^P(IqKT!jA7c zYfp6#YtIsPpq?C-up@~3incn$dh!&^YS6Yg&{eZuPjpihfbP&ArbE1slBhBACp$<*nj!(WRl;M zjplZsjm*cQHkX-?X&tX%KJMwr zKHdL-Iv=d6R}H3~2L)*eh(%N4c3jCVF-1geO$^oD+=l)PpkVH7fmNOj%LP*pG|Ybv zYpjpXe*I9MW#Y*?0`dDc1iE)=j0)i6PMBo^9vA=*1e!a)-Yz~QpV}~%)mFGkR_w6xxc1$v`8+7jCi4HQTKH05-IcWgz;s6Ql;Av=0lHEP5 zo8!O`B_QQ89ebV@u+3&IP}q3${jD`dFvcDZj9jNC&H+l4|D}pr8JxxGZ_QXPeWEO zgQ{v7XqcW(P0!_g&bP5^6)veY1 z7xd$>XJ0kW#OMz3;rYMuh@;JtM1uU{t=C6qX?z z`BNa72Td_tAHg`YZhy`fOS(MatLai18(0!2@{82v32`m7v-;NIi|Jg!<`Pq)9To&3Z@S?B4Ug(?oL(p z7VMZtih*!#pcshhRY*YlR@_1(S)Tx0RE+%I{p`JA?7h+ay>9g0oA{nlyOtU zM1%+Iw+2R)su`896_FshtyuXOl?Vs63XV2aGup=ANNU9h+pr7Rb69>(U<}SaQI5ML zXF06E4&bSsy__Vn)&CoJjMJ~ll*+0Jah?eYob%MvhIelwE?13z+~0ZfHC(7{X~r_w zeZn>be$yvLz(};ZS$NaP^tz{a;u`X_4$o(-oOkw)5(=w`50?YCcpe12K0!UHtPAWR z3lsSH@0}MLN#gnte`5a*wz}Ot&UWPzXsUo19l#_|CV%ed9bx;%Yx#|jc8~N{#p$}6a#_2^f`%8Tx8G;Q9AfZia1zoa5htwFD91?hm4O^J;La7qsTi2Ub|zZQ z(RMTP&i^z8>VvRE<&@zOrKaDsur;L(8rPip zX;YTO>bSvUFsveHCQ!!r#796^cA>xX*Q2Df8`d#rU<#?{ep9}Qh>%`*CGdiXZ!~F6 zx#VhpjbnA=2sc9m&pVz$yA7SlW(l!+{EGwKFpq`hfPA0zSRjRJ{+bzQ(IZ)vNanEYzhCu}h$uah!~9&NlHqw;}cx zw+zvjxjQ|dST<}`rzDY26#OqO;(7i7N-g1z?UK$& zUe+a`yoYNPS3^-h7)c>XbyxERZ_)=A{Obm`+FEW6EO=%wLc`%OAoqrq))Euhz8Cxz z3A8E2J>Qw_xrupN8SgW)3N30GFf~^XezYV1=m%Sf1r()l268)R0seS)f995;9m>bs zp4h_d=W=EW<0qT=jk_2yXF2C5`{Ed|@A>^(wgmWzSMslxl?g^RJfX0?9}B)?c)aPo zt5qXRU|fCjdTGXWHD|TaTQ2gD8GEY`^qdlcoY~W@h82F>@*9%bkQVU`>L~^I5lg3- zMOjOpry?|<3l643$(VjNj#-bG;;ZY}AX0l*BGWz6g%n_2DJWN2X@k&eFRRuddeqW1 zDM1~XZHLFevhab8;*A!3cS%89gofn2Yf-)AXh>jMv**I*i+*0m=DTBzA$d3BSRYD^ z*V;2L#9Y#zIVQ28J@afV_y2Bg%$~W8KQUr6O?~e5oQ_Ty*wp{T@87;TNJk&@w(B;B z$)y+hjiwA(<|4SJ^xjBwUsA^}sjQESh1#SV|Y zBz}4s8{%h24EO(TY79R=@h5KIL_-?dnd4_eJR8zm{C?|ALHsy*TlA(d{5;NY9N9>~ z+Lm$rJQvM?4dnONZoE8xZZjf&(u`XC;5tV9e7O)0d9e!d6LVDvelC}9*%23FTOA)4w5|Tle9KoiQ*EoA;#Ave>$rd= zG$h}$KlW1jme(|816r~n+_G8`8)8{4ie;8nWAkv!>ie-Fmep5c8N^37Ad2>abRzqq zXPZ^0Yb-x*zosGiajD)k?8)LWgG2Us;Y9PtPsLz5hpOXnVS0)#W&(GGzu*g^Gc0L% z^pbvMp*$W+>=w51Sii(Qnu?L5RVf`fXL)wAK;;hwp2~NRr;VP4RA-4Lhcm=x(^;x1 zGu2WP)6Y`im#C+_4oPB3X>%+Nm0l{Alo-YIlVVA+S=4XEqXi|UiDLRGXg7%^_g)jft&j+8yr?Acq0;m$x;msOWoO^tr zUZ$GR7VW=Xqr>gL`VnA!90I%aHTIjWbVk~iS}9qoBxSQr=(}BVo{yQ-A=}leh}n=! zMCTg4Y}qlXt?#Cs^kOf@9OtBO!hL{xE6*hS)Gp4Qu$m@n^M0wxPSIHzC0n-V8MB4O z?cz$Rqm>eA^L|^CoqgR2lqyQvyiaa6B12Z-e@kgz6G^{OR)%C@m9haza(b2Q8Vk!u zko7xc%qF5QkxI&%OXww3BaA8~ zfV6DOnn^}q3ZhZH&TBK!oe-BT{M6FGF^MQ@vI#MnZK=$=TGAKy6&81A$P_mp5}TY7 z5qpHS$n}*d&2-@=yM>k3%%9%Mue0~!B?rGp`3a^M13L!<-rO_WpLv?JaSFQhR-zK- z?x9~7!}f;WAGuzPexN8`uTUs_gIZ&kn;O_zDF2rl{Yi)2rlRwJhfVi0`Ub&!g$>^u z$KJyt^sD)6TI0$YGOp}GRuusD1bPgLi%AztVmsM3GD{@~HhE>--z&Tx zg7vg0ls=K_5l)Ur=e_|Gq;>xOd|XI9LaeV|1!G!@+ctk^JU@Qf`iA$Pje|!QUckR? z&c!ue-|*PQxX^fl2*AD|Fjwoba~ES9i9e9>^nBy`);F;Y^(_fI1`5uaipKP9edYuOdv}+R1O+$AGztxW09yjsaWB@83~zd420M z%0@OnR;zFIy~s`uwW&a5;`NxnrEkSz=9HkGQhOopKh?KB)~ou~cN~b{^f~+0K;L== z+8fum?$tBxNGcE4w?+ivp}r-;CF)!Aqr>&Bn}XxO%Z?Wqiq5P?6g?Bo^(}G$x24xy zc}9NRuNmJsZq}jsYg&@d-j3=qxbjj$&JKb~wou1avTU{9NsXkO1@AP_ctSETEbyY5 zT+7f-JQ^)3?cchH_NpEum!UDKhXbx)ZBK!J$f{&5YDNpC!g`l=*yBxxS?}?idH}Ce ztw;^%U$y@f6K!whLaDce$-J10<7pg3ApK`8_&M!e7jB{1p|5hiZO?5vzMuaP8beYiAZ;JHA@>#1pG<_Ey0-XSL?bM+eKsT8>96 zD9)Ha*mo5R(ULRGY{7iNZ=|lG1#{nze8DXFi!B(1-*2)?T`)cOQtFU#uwdeegl;;A z6MmfKDaE8HcrZ{fVm4Em)i|Vh%W-(>({b&1#K=(i3oU?`L4+K&wzao}^j<7hue?M_ z4cT!K0F)slzCV zPN^uMGr5#~1mDGKnnpT*9ITpEgy~iA`EPz#=iV~qhrT%)K$$ICTs?afzoTdKAt6- zxCvQ?Kc1}ejBGvU+Op$ZX`pJQfbn*uo*lLl$uo|NDg!OgKr2rsQ@wUT6|2`S6l|bW z78k*uPbr+-gfvjm4}rdVDo%%Mp#W1`Kwp2Z=ZoXrs6Z_8h*OL*x2*V%S}M>m z6sIHTOIGku8W{R(W5~EalF}T!lB>{pUnEnB^N zmfn6SP}ZB`Vuqi=RD#4+W0P>L2Tyykqh7sQP^&#T#WS)75#37<4c-qfvU9+oZ#-}U zu8(2TI(YiY8aC>q%hkY>s6;-Ovrfka15dK~bE}qz1)kiHQGX&>#2gj#+#vVyn|2V-2}DK>tYxg_uI0Goehtx{Rezw! zYvh>TsAXKiD&h{b+;6&oIThSP^#qG#f1BfRd@D(DJHhHSMY!N;>8IEFp5;hP2F}3t zK&`~U{*D+EzLVm+1Bl_4_y*jmITJyQvwmP{3er}j(6>|7+yR_}Nw`)c?$;*- z3(vbuJ5e_*+$0oCLRR9BB1an@j=#4x3!F%*#R`Y^YY_#oV?3X#)fH1Q3j`lowzh4qkDvU0m31;&wBSv;!4bNc1 zyGiJq)H@ zz-Qm(&$h+E5%$uXbL=gIC5gzxt{DO^JkDP@vIMaKC{WROC%>_A3869SD~`qod<>20 z{Qh@K7#gWJK%rhrgAIV_GmK!eDBPsuU$n%s^!CxTRbwF%M}TG9lp4=jle+9Dgao6+ zisu-gi`T@UxqJ0J$M~GllS_v}OzF_z#gv_N@D^F>NbMn^UJ0jYb*%lCR>!o3Y;_n{ zBr|z_B#xr|^Dy-h<1t3hp_7cq94|s1GXa=LV1Hgzxon|jNmBV+;?f7+Hw&)p86Sq! zhrl4E9ycw-EqOH{DiHtgz2yG8TWws!`2Qme&r(sN@&EjZE=4T*q|Nj;D zclO_f$3phslaKw!`|s;c#qs@j`Z0C?-Q`&1{kL%JQv2^6C)t43EDqm)Z#x>Y|E@gB z_TT0|Z;YjsEAAs+ch461GsWPh`8EIa38TROM=B=1u zGIr}XIEj03qYJVx1BMQpJy$NEqiCy=V>xr3G!nx>@y@6)UeJ7IlkLYDzqD z3B_~aURM60K3Vze^RwpKlVg2Pz+*bSF0U&-7LSi5Bvj*L^hR=@gnYP&)xHzwyPfL9 z;R7uaYSd>F)MvFX#%W)S$Mqj0r2^8TF&V#{3g+|jDXEA?T6S38@Z@4 z5xJN@aoZwwZz{+0HUEoOvp0R2KX=uluto0RH~#v87Wws`@FkS+4N`TZ?FG`2T= zo-0CaRkew2(X_^3+M;!X{Y97(WH`x`ATYZ(KXx=+3F`aR-?ZH}2%*pA{FcY>VYC+W zLjm{swT3fTuP$JunQ)K|*7JQ3-w&XrBL%k?uG_RFIst^27+9Tl?kWC_L;2`?Lg~-3 zd_wNU=$boPVq(sZ`^d;>b0f1H8u z4^&lnB%IE6F1QSxas4c!i=g?DFnc^QU$7q@=hQ_Rkrbkfru*4cy|}Qk)$G~F_rD9( zJ=pWnoOmuC)a=2E`Eywd!}egG^BY|j619x{kWxfIqv}?E)0E?J zx?p`+7|;91czipKsZ7TsovUz^u6D_!#C*dCaUK80$KN(KOg(>M*0<^~--_bHY^5FM zj=fy}|2Axx#r#Irw=~RW=JR1zRkLBv=l9LuUV51Gj>T!t&t&kOPVm4C9sYqeGjv}Z zFBRjW0ur1)HH#pcvgh#7!$dDpsF71>5>Y7m`_m`_{JOIZD7417zp0=VaJIF)w) ztRa=62&Ho|NvBz=O+{vT9a)`ucaIMiqNZzlAO4|%`2XOaxe#P}dDUG1`=&9i@=pH5 z#%~DSM|6C$9^*VHo!|fNn;=7L&)fd>O&CLq;Wr8xupi&&bJubY19o5!yZ`Vv4Hy~? zVf6ku%Ik^0b$jBN5I-a;rJx_}W7^V^ztkfl8IcZF-FFCe(bs)(fy1GmIe#(rUib#} zEaix1KMWEyDp-4ZCWe-<@{az_-ov1GMbO7K9@gk%%pbVoPz;Nk^>=>lV2D5P()wEY zCt7`NuIK+=ea(L4Z|H0ByZ*kucJ-0Jsjq#sGorr6&Ub|{iol9fYapYsrka}qxmhj? zW^>+0Y*SBhyjkF12C-LA?8pwBYBL8;x~1_{rKbIHYGjis5Tq(%r1TR9<8+#XP#7(_ zpZ2wrKB9f?u#eQ_l(!Sv-?}R<82E|>&3!%S0uL7z);f%=*Y{6~+B6wbc_OTiM&hPDF`#JD;`#VoL7?daK{&(l4_rHfD?0R( z57YklaLE35H{bs*p#ATmko|A$d)qFFpXP@e;^&K<-2bz>>XeKwo?oZXfvR z_YnKQg5Q~aKzAVAKJfDIA@+fpzcYv!z9zM#CwFMDIH*Jx z@#q2@vW|ruH5PxfaCcnj{+R6jsDH4JbZGP=UaGr=91JOO-Zn;w#!nklNuTCV9REaB zNn`5x+HmgFsHFY*bLF3esifWbjc-1o#jyJgz8HFKWs9LXzwiDepw_4=DV_%p!2wU5 zs+Bik{?V1&nL=tnmu0|5`p?~$^pSpjya64|*~{Pz0UDUNJ6z>__PxL1Bjv79e`nv0 zQ1628ckQBHw}VmarynE5cHG;ze^ge=C>0P4dYh=M2fxf-PPEm!fP-@J7Hro!|fSqae#0$J?qu3Ueq7;5RBhVtJunCHwLT=zyJA1 z5ge4Td-6xCMOgN+^Q2qi*w%aTcJeQ4yG;<# z+xVDEx2fin2&S7KcXBg@FM)C^z>BY{FDl!Zo#KHH5fi(1$A!k%4WJV?`ZCzIe!Hgu zeGOARfunvSa2U8f^(bu^MwJEQ5hThpRE>`u#z*ePM__U3?5*rg86TQ-*6&}a51jNP zMGBYUmw2+(HJYEogP7;@`^g*bxQTY7qVsGt-*U3U(!)Vbg?^1? z;RVjKddHJM-@aVDokoLOho^Ugb(Hy$N8(4JgQKF|Q*kJ2bSe&VF-$9fQx1E&Pit_x zy@^V>u$TLBYaBZ*_%JLHo}^nSC{ZmB?Y2B{iVqXab6k3Cu(9j(uw@5&%21cls@+q-&1e!4HvH1gMHHdgZXB0!;^&E6pSE zmjZh7CW<t|jbVH|U-Z-ZcHryiF13oDeaM@-OZ2 zJn_DE&gb#Xqu=D(!jy%=Vn-ZXKkDpQ{@~I=wS3V2;kBLW{(;)U?a?gXQTuhCILd*M z4ZMq$(9EXOYVm|3`}I;N>fAt{gmB{LA7a>!$%Lo)53X5bwk z`c2WO^gz$gtNRp|p~-%`CNt9%&I2F)7l~=os-^*j`ipVg&bnZ zPR)Lv;j0d|C6tcL)!uiQjj$Dr&{O{;5<;m4FF+A%4zn|?@x(eRC}?NBXV`{|tjgUU z0P-0F;`rHb%G?#~$DU2BA3wc^{YZy?gy)lLPwR>DTXh4iI5LWjBqqYsTW#7Ir%7*R zhfiU8t6zysLeg7V-U~@@bqnL8o@?L3{JmGGPn$M{=+kkV{$qXmhpnnUU9wTtr+?ZQ zS)cx3&My5|M+#aq^_ud$yPv5+eL5zPF=WEvX$o{sI zTjIj`#5JBjgYwrIC`f}6cvCh|+4U%BFkN7W@9r`9wK!%8M7)5qY~v6wyviZ^wlst&GDSmB za~!F8`CMcaDWTfo`jd15R&tgDxRLd~)X;j+4LS+W$(i8ow|_~{qb7Hzu3*x2caNuE zMgBTY)0M7)uK4tV^L>Jd;{$q+5nk9I_(HZh#@x3e#%zAz>4zofs@T978DJ9uj*l=# zo9iYifHl#wdP;5pW5-2A+B@6O@T4M5D7=9x=u&+AKM?5mpon-)Sh@@6Tl38i>Go^C z1;1%lzX@;(9zv(i)9@$6faND^=n>C>ii>_5%sf3orpE@4d5YC%&en%R0sVpURUYxY zi{bUkZhEc;gT)%^>p>rpY29`nBt+#qSj>mPbNgwmpNf&x6e)ErFPhHcV3JsbP+lMo z=HFa(-?4_<|KDnC+x8QG;`X;x_owX$*YAJ*Rpb7Ag+C{}6=uVj%x~1bNeX?Jxm=-t zp^_=|_wf5$-)xwxf=kzr*T(5WcW%bmpSEcNRY>2!xRdXAtAW@>xu>L(Nf4LmEx6-d zk5y&oY4y*VEdl*=%iae1XWw&?_0Jp1Bk7;*He5#kY`gKw_0JPkj8E=)<6>lbn03^s z=eZU7n*(+#;ir3GqjA;v!cC5@n92j~IpgUl=C&$vR*4Qn6P*>tSuil2&VKOBCQ*4F z#&nhJdOpqlod0yTu&lJxw(-jINz$3^gWNswL}iTVuM`#dh&#q2I*Y+PIotxGN49L2 zU6WHd_I`SwB@s)Zxb+-OKs(O@BH@XK1RGU+KjXm)yi!Fx4mWVvo@yAtpCL)<#ojm` z+HS_sb{z$81|YKfl~@&_8viv8PfimOhbK?PUs*yTt3ZqwL-B&uMj4LT9$sf5@$lk8 z`uC;eV#4=J$&}UwC@B|h(YDOq#CS93aSi#7a%2$w4XnOk94@I`!N{WE1>@@!e=Qi_ zOP-JaCXO~>cMN7BQ8s|hB*p;bj5cws9Hf57ETr&Gq_9qCvRn2`2{E*w*<#izoNQHf zAU|!cCx$0qTlN|(&4#!fjDNsxP~my^wGe$aOrD`Vf1Cj~;e7kLsx*#r0No_I+YfyO zE!}opP=`f#x9|GI=;p~vax(dg&M-5+e~aW_=kW5kZ>o&bg$bib`@>6}Z#lh==@z5> zopo#C{*j?4d7wfQs|I^e;3*tQO2V3O?ab@Ih}zb|Qgn7l+e>i@-lqs=wm z1LC|!a^>i_Qg#@-<)BY)mt1!PZ#ZoAZ}a^cG&@kI*b}Yz6MmC^oko8~*e08MJZKBg z*MY|1IS*{hrX2De!hWy+2P#hDhG2Z$W%2njW{7ctbrB1RA+Mk(wdaP^C!d8Uozv2y z@}lrm?zD_x0Wp}1(ZBvJ`*2Q0h(3E;#eb~N?*B#AXHS-^`t0HI$olMt@=NKn|NMn< zRb^hdKKoXAh(0^FoawXG>%#Tfr^`e1*|Fse;_dTrTE2tFL+i=Z=@^q%vqoYT660X7 zsNQ21QeO}7q4}II&EtFE6g-$i%n4Q%xVRRvGamYLWL_Am7Yc78?mrp>Kw`V^WCkUK z!VOBoI&RAQmL;k|-aHjdi)I#A3ygF^kVl}KEk?&HEs~3kZM=CG6jpu)S=KzxvZ%i) zYX67hfg*miXeg_*^m7Vz{%hiRvipV$%CA}P*v48%SNMLeK)P{`vFJg!&m^gy}2Ldv+2xVROVmaj7_S)N{uC9Pr^ zC@{sNKN-x?Nt)1`S*wspLX&FGRa6u2e40*iHQ$Ny3U8?0tF@PnVTI%t5eJ6B>X;sr z<{5Z_Ip1G(BatTj64xMKE3D_SM%<%MlfebXYmT2T$YOIy|#R)#My zabfa4g9bT1 z1r$CI09T2wr;UT$F*7A)9jJFDpx$}r*(`?zXBtJyGffFEf2W#qtSZ{)TNpFS3NoYFm7E#1BB*KXz=tAI%CDptRVR|1t3B2gdcJ&< z@HmeVSrXP}2irQ!A|dO&Vf=&o`%hYY=b*o$`A*sQbi8gAGcqk# z!p{4J%(sYXsbRLq8)a8-j4))zRopXR3-&pcq69$ z%n%CtvZk9PcS1+eSpqY76-x+Okizc({lEwM!}92Plg{SqI#GC|7z-@CUSa^+S`FsW zGGoCS$G?znvLsjb#5y&)@tMsHs75a5RD-&&q(3g{VLO<@1H>5Z7**Oy3KW4b;%N(* zw3FjQ$MZ2G5R?}%6v|+cDP!MXB*FBYQFcEA{j8Ik;*l!PADa=!AibL zB|CMLs8=&PN2Hf5zv=pw0eUe8=p{)*FaIiK^x~cqMlYCK#wFxi^p4b_qQ8U=h`W27 zd6yCx4sqgJnxx}5fh3}&Ieuo5sL`^xbGhKaH$p;;AI+ z&>*k~J^}PL4fK;dU<$*4!w$*kxuIoR*Y>HUOmwd;p!{#8!TktRwu^L3*#?<05?RbR zTj3g^V4R-mvekrZnfau0eJz6WwNgs01dGWNvI5+y*#400j?r6%6+``no1Wck6&B~# zXXV!y&q#)!Q!i%a`-^8>nPrsAIrsHxa*94>e*-znR8_MMc)d`Wf9hxEDN8|z$OIN}N<7<5Z-5fY z1KeUy&x|AGd@gYirkqFf-wSl?KLl;Yhu-El=Bp2}n36^GHrQPewU~~9mk5728JPG5 zVTweDoY#{ktHzh*_l(oo`-=Wz$+F6El0}@mV`r3N2yCgf=vtZuaQm*uQknPv1UA&Q z_`aV`4e#@teqI)*TcEd3N7wY3?Lt0JC-n5X25xbwnA7yTMANI_saEhANr_3Ol==9n zhUI>LSRNM$u%VNK?$`y-hXmO8dIrM)HKBnlAaK>swC9tQ-w+4`j7s}Mp-OuZ*Wkka z>SKOpQ3aGbD72eZxNaMW-Yg?D z!(#C+5Aif=*?X31KiSFx7yPD|_&2VlZ$Mi)@}iCuBU)6%zSWK`!y>=BvxblSzKrgH zQpL=f_T^~KS(hrP5tjTXQ{|$fQ^L&>7W;5qkeK?DW=lAF2 zYx3WG&)V|x!}H(p8}~6_u4g#EI`SO@wv^w$BmWBW->g7>HGhScU-ezg^WWrC{+s1- zk?QY!^V1dhCv%G;`6q8#q4iJx_9OF8c3s}UKl#s@A^yo%moh4xJyZ2hQhYDikc7g4 z$So`4{iLZ3pe((hHx2>y$O`|9{+#q(Iq921^hNi5`hk}28|@t^ADVxSr0f(eWsbw? zo4ki~n6_n?_aM$cv^A$5V9T$#bd}B0naz?O)QO?>l4X;lCEGF8mVto-xtVu9>2G`M znPI%547=s)5@tW}m%@jQHh1@HU|UuXIwqL!>izcqHdk()WT|yr1y9&qY4Fp&+1GBK z?C!ZmM_*rMOTB<~HtP7@AH#2TPxgHxrS6oK&DbZqNp{8TkSsNhSb*q@7gIOOO3V(~ z)lu@7iK$gA16@aL+{2<>~T$s*aA5_J=`7_|3ip9uI_tgj~lu)+#a|4 z`w)BFhVL1~&!^M=cPWntAa#@lyE%JDIc$=%0(R;hVOQT_EYC5&1^jOYve&||nZ{s| zl9+$PH!I?zh)vyZu)&51%=tkBcNsl3`5Ow-z?vuJWYf*TE(g-f-_H9bP`{KVk@Eq7 z3Pa|)zeL$+_e$*5f%L$z?U5T*s}K&GigM+-JstvMuD#jmL*Z zqj-BMIfK86p)}U~8CkHx6XKA_o?ps?aF8R`h<<~k884Cj9v$L;j}!yRIl~OE%xVH3 zaX(^~Dss%Y1SR*36tH@yNv<)Vmn8gw!${x6>07jHw6_u6lMJ$@C$O?pj^k?a8n1#U z^)fp;5`o*Un}X}2A79>gBfH@1{nb)e-70rnLyy-N3MbY zn2IedVZNS5~mHKqp1ly;Op+aF?Skw=*akk=hT5C}_5M&y)O; zU8!Qp{y40zxwF<@$FngHjUuX6ICOR)(i9HN< z)~x}{%xuN-fT0hy4)bY%@(H#^@Whg71xu9RJPL&qW6^2IDbSUJi5u*9kDfid$n~THmbntyH;^*pV3)4AU zSlsubHNUQS#&z&>;04iH8raQPoz;DEnpA@63P$5R+|dWhXX!;~6|5!IY_C(H?ri8| z_ScXZ={UbK&>6b|;y&0e(sk^s|3+S0kW2}E+%E+lAITpZ#~y2I*Tx5`Y5RG6AO{u* z5oDSBmnF~Dv-5<&z%sv4BQo8u^Y%rwN<6dHT;%o_1-;3r{c|reUu^~CTE&TRD(AiB)1tFt~i;mmM-?1owT--8EMN6Q&^TK;+p)7g2o(vk}&|XYp%vlEZ;`OjT zKsAB&Av!Z*eT2#X5PPv5mZECL$<-Kmw_-94=M0R!PfivJM@8v){+tS{nJH~nTo?`! ziFy;ti_}d6mF^pDt_1MfmVlZfDLEN7H1fC@j~A6O6deyvOki@bvC)TmBV1D00t>gl zs_U&)!}XSY;)L-mhMFFQQXc+0W1^t3OaHcQYsZiW>otw7(theHZLVFVZ5myqKQ&yWp9dGIeJEd`jx1CW`-;jhHjJ9# z#7OcS_VHcNk@edbxE*;oIgQHzOi^WnEwQr0+Y7AxeBNZ2O~>YqTg|N?6K&*-tLA7c z)-gdqq^s~C16NRvZ39b`_iYluPg+ zfJJ?6|0f`!c|FZV`b3wv%cuBOA{d|;kBteO*}HqmJ&cpqiSQv7&>E?nMzWv$BD$Z2c{}H5xv~-a$;wOGPbw~JKdA_{pIjulAJKjiaw~%U zWGAeN7x zJHH?!5cNLFyoP^_y!JRoVW3ao3lfdplffxz_O%Ve2eiRv&WttEr^>FUsxiH%{TbQ) zNVV*m;gMaA8s^4wQ6@~V>aP8a9RllwVROZ*cju=N?@ou$fuDWC`oc;o%Ae6Ou{6Dd z6#%7UVp&uM)c3Tg{6Wvk6e5bjsCVyy(m0_svRQOvus~P&E*C+fmqgTjSoU!JozPJekW-1VA^LadKoM`StsM!fln8 zfO+my73PH9EMlelaWt3Qw?Mn%=)8N!_rlM+U)KILKh*v;|39~XeHyTT%@5eW<~L&h zntw_A*Qeb6^;iS@*ZffX*9YAG^?3vP*9W2YuMfEW>oKx_eIBO^iFek05r}s_xTrzA z^Y`_Up zb`L%BpP#pT<=v3;cD)zSdAqX@2hQ8Yy@Tv|!KZ=qc28Yk=j}fINv;@(05){(Tip9T#N9BqevEkU1~2u9}%l5&DH=vPVQ zjF(&!VL;m*dnM&5oz3#R(Gi1|X{llWMUq%62ACPMv?JZuH<^^gq6TRbiRH6)65pp_ zoT{1+Kad~)b;_KN8&VRP@LDDP`yLBjRTk0S%!Z4VDy~51C-s(HZ1*I)I?sRwkduBa zNWgyn29}7w^#^SY>L-Y?>S(c3TWCywy zUBLZyBtV1QF}=|N@2^19wc}UnRU47_3bdbSuE7GI{sfat%vyyjNh6zyKxYA$^FBm- zOVgMKa3TAF8~W5hB1SkZd621^mB}>heYS4{fpT><`24N4tM&G- z*-Et&gKC@mKZVXe6f;ZISNf~1`7pTa>?^z<>U2T>4Mj+NNPXTer&bHI@d%tve+Z*> zUyIzW>v*>ca#0_@2jL3WIR@jyc-98@>rW>8ZLrmWbxt|qP$M~khYMITA$wDaiQ*If zEmTgN?|OSC`?ruugi32ytE#j*=kCrY#=-m^gz2syhvMikQONAK9Q;)Q@TNyV z-iCd`bmx1F0;~^E=}J`T&~@fXr(}A2JgE<$_VMxiae;auYB1s{@*f1t(7SuYj*C-E zOkE4Jpp=jYqF{}^4{mh(gZ#RB9Ft$HjH{l@uM|z~ch~~=xHy)<0afp#f8cnK4Ml^* zw_im86Jl^rF%rW7Flm|=yM7IJ)#1Y+#=jdfd=$mQpvm_You6*_{A~@NzwTY8+gv@4 zr#?YlYjHG5K~McyMAg)PY4ROAk7l6n-#7%g+z2!BHgoWJP(?fnaEfGW#?iLn zWu8O;ird}Pe`(K?P=2WQLh=p5nw4FG3=33pmKb%lbpgzCZ6+>c1@apq%M z!qIkEopH2!dEg(_gNdbjFrD9yi(C&TLj9!2Uc+R~o8Q8}%ijyj?>ID=Y7P6F*9xv@29q?G7)G2tzSWB&EB2X(Z^rE-Js4t`z`a5rv zk2=zeGv97NwokszLdi#uX&8_AKhw?#6W|mV;eqw>J1!49*C3^p56C_ZV0n< z!zhZ39j1tXq^$8hltjn>-6unI-c#tUf5ZP^9dKT%3xqb2QgCUsnmnjo>hd>}Qn?_QdF*1SP~fGLD7(Q%pA4Q|5s_I)@ARVCKgx{(~@JU51x< zswxg3*_5Mz*IPf13oqt<)tfBJvFnnVa4iYT*E>%ZJ4>?EqLj)=BbXZ_p29E_fHz2q zfKGNDiL(QmP}wWAqty(|*PUz1M33E6MVXD=*P4fbnk3k4^0#>X_t%*Iq#t?FA9fy> zbryVGExYKV}{*VUZ<_AnU$JJU3SsW z%p>Sm3B2|r%b!7e+8Ut%Ra={Dynz(r@vstXuG^%N199Q!{VuUpvJd7k~jb0RtOT@r0Zz z(RnV`x{^+$3jNNd`^AzYcQ_u#)8??Y#HB$#yLHN7G|XZ0wbnFWI0wwqFDIuIF}Xki z@Q2Ysgba?y{vGfR*`$^C3f?_g#L5ySOhKe*i$$9;&DNs+gfx@bQtDhI`)sn*X% zJk!>-L|ppRm|wPb9qM~%46nDy?l-Ji5_&&#R*L_z^lPo+(j61N_-MkUcRvrgPdQ#i zR~B?2D`||sT5BJJ`;8yrpHb{LMLF3C{xsR`D3;wbfN0y-`lEFWzN|b_6+FN1HvKsa z=5I5e;XlY;e`4+>j_~vGQ_khH-^H*RtYiG0ch8Q~Y5O0n!Fm-_`>%qB^w2T*r-efQ zyf&NmhnIMM)=Tu@gLCMg%(=nmwKZGe*1WmF{nI7jb@~SZ`kwtWs<2Ubo;hLgoJYse z1HDDG+`2`e38d5FmVm&YiBH|VT~utHYR}gz}&-hJR?pOJNtGyBP zRk%8rz!-h4Ret0D&4rp>jAIzOoNfUloU9y?guYu>Mv+Xe_iq-_eYX|$h1PiPFSTUS z7)f6tDeK`4$9iBdeP9VW??tANQz^T1Vaq(#pmVhIT?=Btj0L+%5zySTQ=XHwYf!Ru zAg4+g+svW;NCkNt^m9-%>VVsh<3qyrU3Gp)eXqzl5S*L5s{j=TSd3z!c3RrxE1i{Eoi5{k0hwL1+$3$!5)jtth~;L`NTX>;Y3(&oy)Nt-MG1KMPw%XPEO z^$1A%F-Gtt<1zw?2vm1LO1&UOgNwof4)S`N&=)oaj^F6?&8C+ykJWCQ;xNM9yiO4a zYELWj{MOxrxQ&CSK&&^Qt>!!E_Em_>_ic^SQv_oA`3i~Y=f6ixKmUDV`k5i|cF7fo zNqH#YeA$!~HQ~G)&mn3n!r`#`1|&jX7w9oO?l-;ywS%4{-i?j+XuZhmO} zfWZBChSL3Mjop7vW^$#m`!}%nGaI}AIJ@7r;eBCo94JM4$2HEnZgv)x?5w-daZC9C zy?&v7Zv2=sylgM}!MfNN+`8vlN{CkJ=c${MM}+tbl867Zj8Wq={Q7zYMJjABDn<3EsoQG+}Ord>&?0;hoEdUy&s z{^B@9P%}2~h>{*EhJY-_l;!tkNRr%He#u$aLU3YwZb>OdL^TCAKLuJ7^JXe*bJEv1 z&o-TWdrtbM{=(vRS6SVoRyz0Zah5f;y8FRs&fg*QE3;JQ%?E$vCZ$-`gGyB*DWx_` zrDMG>ExkC14|u=jRe*;ot7Wa=d=ixf;oH(2WfOY|-vIW2!}Z=xcqz6jYv8--#n^*8 z=h-Y(_C3;>y~4cGzR;Cc+3q|*?IA#IdDCq7s4D0SV0O3F@{8cS3IG&ratz2;c1o~m z)K}$|`0i+sFQLl*3c#}p^U45V%T~}e?Aa#R3gr~+ax_&o@prc%?!7DO{r+(MPu1a5 zNcYT;G0`VG(vEx1Tr{ds?Uu#ltI643kyA}C6UQmfsn&x4toa#@%D@)gj_pelbhzjK z2k3{+8I^iRd)YOkih}5f>vA41hSZ zM-;5T;CKFL8KoPj34v%8DBl309U}yiojeS}Of<+&1bJ?|hTH!KMB>j({|8<$U}^*V zW61rt3L@W!jT(8HbW}VCc38~^EFh3JC z)o?G<+d0^m7EX2l8u)&MuN;_0;~wXUZi+(V=SrLiFmStnuEMzD=GRbbO`x?7TYrLQ zg~iS!7<g<|=FAq30E3=DcswuZli(fbrNFK9wHmWCSpq zs{=$)MU!{?vlv8Cww-|@y0Blx=pxYSdGIPm8aEL5PiDr2>D!k`V%VA|C=6<_{?5MX zfqYgt_=xEYE2cAt&repQ#{6)87Ky%NriRjYySNbgZXU-5@rYGJ-|Td_eW;rIe*hi{ zM`_oN65Y7FOB~D036nmZ?Ax#q%sgG!%%osgH4X`em!J+WRDv`nKPDO_JZZUSp1NK> zSJ%sp=W)Fp_8sDa;yUrMnoBL2*QP}zEbV$R+1$&L*@8Lj`Q;oE)P(?iQy6@|$vTY_ zR$3O${FgIA{7sFG2TgRDGMg4yM62e5Bxy5#o=V^aF_&9E!QozN9ewiLCD&2=7`Bea zhw+QRdiwR8x}Ji=4_#M%pX0+%?}NktYI=kHOMo7$8?3KtT3_27w7xu=_0_VOy1sa; zCyF!nwY@3-%kB-eP`w0mQy&jC8Jt%>-w+6e1 zIrWgNvv_v8EfR(?0x6f`!*u~#M*ZYlj+bPfhp)J?iD>(51RW(S0)M?TBnj!0w?Wsh z{_paShJ99(gfuabgmn5;UQaAM|7hlUP5#lry%6`6&xP7Yc?354+hCqGN|Zm3D^Xjq z+K*O=`t&RXNi&5QpI8J>glbZ=&*H*9xK@Sx6L zz69VWK-?nIbU(>C6Q&!`HIrr==y^cI$^MPkMJR_SwNw3@Z;@1TD0+~)du?M=oH3=r z6chdXha@;!ia?qb@rbhY;yD8hm?|*})}piA&>+MQKy{uJ7phMqZTmG9c0FYm@jwuD zwOue9VyF!Hd~%o!QHwsb(7xd}&790)lqP02h`(n1-`VG8hG$yGQ%3S~jnl>foG3Ca z`b~G>$6Wn#$&L#5rt%e$#WkQdbpMCB!~<$^r}Q%&3k*W2bCB*kpL2Ww>DieXfyhO8?`?Q*Oj%@m7^f#9W1(Of8!9G* zB6v*>+1kDN)UUU;mHulMo^UzUnts+v8XYUx3w_!u_?F4X48I?G31~ z5q=z+Vsp~@V2aIF+N_zlPQk8ar_9P@E|FX_!_LSk#iEHnf$!DE>xtI6`tTQVh!eCO z^LPF@Ho6c6(+Ar5o&qcjt`{Qgn%j|ED#(iq z>`RRBh>z#*@%&I5_PpOTGLMZ<%s`G*>QMJnJhUeAvbZkq(#s+`?{dpx@1!eR7E2~Y zP^q-`nk1_61`a`Gx99a&7X#<_V@C>cZpnr2X%9KECQWG8$HRf-I zSAF_SSd^3s$KUzIXBv&In)pnE*s9UbFjZT=?P3FaSfufE)r@D@(5%{WtOw?fy&EkR z;E>u_jYdbX6wZl9Nf6KH4TMAkX`oJTiziX7KJParI!M1R0B?QyfEc}R>6P^7z1(1b zBHf>!8-{=GZa}g(l=&0n)qHCBLmP-maMe}upeA`@bug-((`TTkTTrVW#_+rx6V6eY? zDmh_oZv&4mLN~VP{t=rzE9Oyz3R-yW!$kKO@Q2e4Ao#0s0H%5D$dBg@&4V|HPuQw* zMQ2Yi8dZz>N-AUo1Nu#LO*Lu;w9Quvb2A}Cq0{WY{3bJTrD(0jtFoQWPiwg;JtAln zr?{sXr`e5M%QW(tFnx=!=Lr}+!H_lrSor`WAZZ>)5}@L4^f)i%*F|t$9D+2&E8;Sz zl6ZpKG1oKG6jnCp4qJc|=K zdkYRSFE{QI`@c~8;fNcx`h3!r*bkFKWoAR=ZQ4_f>gSxltBJS*^?5~n1tlokPDUUZmLBsv&xWHZuy3+aAE^M!5ZAo-{0O ztXZXGH%=TQM zGI)K)!;$<64fc=ZaS!Yt?RW9LBd*BixLFo7uwR!FsE6Zy&mye{RoY;A;J&WxCTp zN|S#q|6I+aRMCA;jHrNb|DI^)-uRNeEhq)qzCPJaN}H@5QwC3GH(8_5uLNt8%50^y zVZ5R$YDEePu4PW%`JfOj2r5W-7b&(?%guF^YT&xNjFTeXzB zfhy|3@>B*gZE?LyZ1%&q;D-s_5t4Eg(jPGn*8GX1n#rB zXtKlC7A~UUA|boUTC1`#G@e^IC8ur@^=ot7cb>62&&3L}C0H?5=UKB*&?AJ0MB%s**2$ell?aM*~&2(A7}++2pfHGeLcQ<4qo-JUulk;;Jz-6-`|Z< z3M#g|Rd5Bm>?SW}aw1$}GWFCqGL}oWR?Ms9k^?=om^y{K?zW|fKu)NDkKlcHl?^M4e%zoOhj{jjo-8n+t zJvqu|Yl#m~cb-tU3sHBzm7_O4z))A}?L@DhhgX}iUuljGaG#^D)T{Rs>KH1#r!h`G z^^~k%E2gf6Jr3``#?Y(IK<+6ET?`%LY zz@2=zmG{d+AG7Bx+!}*Sdc8y}+>|A}UY=!GZ|{&l&8l}SOfUAeEbnL4i>_w;T|CsJ zuMC8%F#ZJ=>9WZFEOruGbe=U#x=$?eg8hDjRB||epu2k?`LVs#@cck`%Px|#&a;Yk z=s8s&%6boSx4fRh^1PmJDCVhL((jS@v<&2q_7BD`9XWj@KDfhY0|1#7<3J50V?tiqe6 z@T?V{$T4rs&RFByssP9kg%~d;I5xL_F8}0a;|05m0B)ZuM~uVsUT+r5 zmLcPyE9O$0kW(rw21{T~G$?0l@=xmFZ^_Y40VwMBwrF0^8b=cTG+KXf@klaCMT94ScXKG?(NJ z_B|oGETSbtc(p9}1iUb%RlzQM3uw|lZT9uThlK2nz|l%-;HF0a=;4~o-3kpUF#({9zKMR_Ms`*(G`;UXm z+))ke2Za40X_NqOjhGp46<#Z&uVM!CA!hhl3|Na9=#CLUyu-f<9kZ1(_$9krc9fi@ zW-H*?itaSm=#J*WuI}-JUF|yBEW2Ul*o40424=PsWT7vht8eLGcT7C|-iUXFewA>$ z%I1o)Wyaf-I=FzD>$?qylNe>CfBIt8g(&#fjKfImo5rYNNUqx30a>Bl9jEQC=q%1s zyDU0OvO>B&PTTEqgI)IctikXrOWX0$LYCTd-s^$x>G4^j&~F1=gZ<_XDYFl_AmD*> z*mc?6H;eT<3#TZt?@-?Tajg5fqN{HfCWYK2W=09Gl^~JH7=%qP#fh%xa%I$M6TsHE(MexKy1NrP_+Hdj|8erE;4 z@K*e&h@aaa>8t2-XQ7vs3^!T$RZxb|nl9_X^-~P$PKD!!oVhy@`!@YX*qO&jnE!`v zl~C<>Ewl5R-Wk|v{1KKIh{2)PM+vh#VnTI5(MIsZ)*FP`9S=3wPYpc?@O zR*Zxrx(A4|dq|p?IU;R{yX9R2-R-swamQrI%344caP))<7)1%P5m(Y+S4@S?0?1eo zWOHh8X2LckA4IB1gk1(SU5T%Wt|%!p4s}i-dOVYb`kJg1rk%&MzR^Nzp&6sQTv^yC zQX|ZLVFr1sF;`*XIBJZ7Cx^l>V78QjQiLAL?u6E|E4wvjzG@8v+C+32(;7xpN;K(? zX)QU6VN~7W-*OmPc54_~yHPkinCXqsE$C7)%xAgHl{UoH5_-PXrd*U1Tn%-y%M3HW z14v{CJObKc-%4cLFp@HO4j9gMd|OujHI;^-1HJ=uj76kzwi62{;6Y=dZ-q@cVRKnw zfCVNTwv`B>z+|R@(N8v935NTUDS(6m(@<&_sd*en7&K3y=0VhqpQdA3prqSU>t)Ni zNyEHd*gV4nZieT0j%S!ej=cm)bPWeKue{!zJrW}T=;rtkO9-oi6P!DAxYZu0cPDHK zyzBm#nNCqx`MS)Ll$|!EsgRNbWR%#~V6)U=zFFr+Ai|O)xDuRiAwV!l0p7Dk9<4iMJYAf)CLOUhc1?*m;0rX+lkzXRY3 z=-~iJ$$2h`?XPX_`#cD%hGN`yPAapxTiz(mD#fR~{ry^u#K5Q$Qp8y$M39zKf^!kJ z>+5jr+3pw`JT3@dT3EhhWvzDn@T#P2#PI{|CBaqRL||gkG7_w^7RPRcj>aSocF9KL zU`0*@ZkdocI8#pa|V$+;>d^E8uagR%uhlabQ5HZP2W1DYGtP4D>fj z+hr*eWA_T;EFT&q0@q2<|!e2y>B{Xrj*7RrQxB=YTkBphHmumEl6oU?p3q6Ww>3 zfx(+4P^T@Y?1R8oAi0L7Ntr{9dHazoq~_GvTv-`-rUuVEX0OL_)yS z&YA7=ZSFg(2WAczswQoL#o~J{qCcfU|ITXrXH%$a9_%MT&IU(ypnq$yf1{{>ccw_0 zcN+5c12+Rb&S*`;UP2GU&L3U6zw^}oRP?FkN?CEqA?h2^+!$3CoGmDwSjFaN0{2^yX=WUl=!%}3|pbX@r#z972>>1#R zmh<+nFrQmnTn|K-Myj1X2>(Qj&a!IzT-n{OBZv}E_R6cp%;6ntCT$Vs;Ci!V#!Xu5 zo#5y3j^XlHXVe8UKr(OeW-L~-(Tk^%QY*z-_4BHtbxZIM2#)olr9>3^gMsF3x^-om zj(o&t#aU-DUL-Fa)lz4@71dJF{YK>pzkf+S;bey=rlk(^045nj$l0dUqp4r@E{i3e zOrda=jvf3Ki|Y8tDqy2^CIhr zYepq3YpP#%7JKsC)q!k3hjA%~cgo+n#zyHq^(GcrOg`=Gfh_$>@I}9=(#8_06txJA z0A@g$zc>4P_%(kRuUmqDE`?vcz7hQD^bEhRU(+~#V>I~fc^UkUAKe&!?-+7r_-%U4 z(Ra0)q6G}ON)9>#koWf>; zut_zv5Bp6DkdL*94fq5YbwFmKyS^Qu=K4gGldwZOHD)(whV%t7<^I!kj{)*3*FN{v%luv1OF3DnPvL2QlIuD=DjGWjTHtc1KnCPemb4wvO-% z-8&zkYEjwEs9JW}sysim4UqMT$Ygylg#no!7vcgG{O@d*=GjeO^z`|IMRav(9(o>0 zgKqiDQQH^ZFkXFb1yld6PaY{@DgWS0+mIDa(mK5ctob#Ee25K(SgX?bCe&Wk; z2Lu1yxgr3`hks$;^CQ*jcIQGTenim?`a?B*cqF=oC@B|A8kmG+SI&G}YW0*GH2Jk^ zi&%ES!dy~I&qfJOOgHOY5>56;%*%@QK$inP*)z@tiy$+nGEdB(@siH|Ad-aB&$KXF zysn&um=P9`4U;D;zraWRrn-R`xw=CgLN=yw?w&)jed+KzeDTd_w7PbmL2d0r{I!@> z0={CY5D~r}T-P4L*^k&?apUnp?w-kFY6Y0I#)~crmK23=>*4=$F}-fZOhV}L8fR@E z8r$rB?3fgoMPdn!`Z^f;P<$(T`AAaGmy2xI@wTjdnt|@PzBc88tgM$({~|Iv;x}!h z34zIg5dksI1MIvF6uLlmcb&m9CDWVmMZNIC`N~qpea9l@yICV<0v^0D@Q+4 zY^|+;{kd(PtUR^A@hBBEsMO2C@?tRF^~urWKhLWZ!gw4_3rxtP5@penT~95*uCpPq z$)SwGW-KC+H_6*Ig1-^&JE{rX8APJ2KTHHDUJ3dc+t|!|WgN zNU7ztP5BF~6h7JF6=r`#9>^IBY+wL_uiEs7CChGL$C5Ar?C;-XA+}2n#!^x=n4sJ6 zW56YB`gQQ!&j{uz|wI zDkNt`HGEdm!&I!Uwpk7f1&1%PWoEOibA0LDL08MMA3C96{Y8vtS}(hZvclsJB-aoF z?)b#afd=&afzgpn;(h(xbPZa%j3spwW0GmxuoZ*mWXo}(U@8EfTM2!V^kA{7aD3+- ze~~^AoF9sr9jts!5{IH|r|R`w8&&{qIsm_W3XPkTCJ z{~DO18gLiD{{w2!a%u!?(^Z&w4(mz+rAYot$2MSRV+i^n#1pQXn}P1Ucg;TklX{*W`Op<8=u*`s1stk&y^|FGBqD|RA zXdd4iCDV4b^T2q)%)}&9cQxJ(CE{oB$-(Xf8{KIWCZDRnu8m)@>DRC|1)pJp={6>q zCSOi4!O&)(#d?|Un7;@p_#-bRonXR2I{lbIEhGqik_}TvG9h(_c;GGl0zwKby*cv$ zxgeyN*bI?XKQdWW2eRsECaYqZtQt?Us&cUFlhsUC9R}ljKvs1`S!K>vs=2H(sj{jL zWffNXMEeJdrPMkyS-CL1U-xn}dC5u+6IC zFpoxn*^@&g7)t>I;tRcNus{;B;N!o73<29|0(9ibbsn4LPoZEflVBc{U<|0ZAyRmDELUhTL%VW;ICWB&WV!iA(C83 z2hf>SHp{P$AH74MjmZv>SF5?aie>W30rKiAl2@QcR+6A9w<+s5hY;q(psd<+zJY!s zyTFSw7A*CfVU6b{^lqCP*VllFNV>}p^oWCAmR=Vqe| z#RvF28)&&6`)=8smlR0-oYw|;6%$~EWDjSI%R7~gQUbTdMlVPq&QZDp7g|1!&Jwk} zofwR}d%YM<>{zQmfWaPw+F-Qs4g?9;zXlw+*kdJ1RC-HjX?B)-K!bH`fe{5h8vUOL zIZs9;A$N)RjfV2BlF7Tz{|k9nd}aHwqM*F1&J66wis_CE&m`pz{k!`yF7NhUYCncj zZy#d#Z1{exlI_RVgVZZh_hXW?KH_GKNj*aPyEk!>H-q}G-HhE%=g$G3&aH&yT0|*V zl0fS5^HkdaZV~b^OL?PPvX-zVD-GR}ZDo?LN-OyQrA+v>i`MSSDzAK3R<7BVS$mSe zD`va0oW^%$DCs^4k#z5=l5W}R#&%`b2X|#{LnPgO@UDhG2KHx_Y=4&XAMDT0bPd}p z<*0k5;*kB>wf}?rGiT%9Wc#xp1N*bD8t%{D{(JkgH}60pmjnB=)wn;KqS>Ee!9v($ zNv@eSxa;~(kBP7?^^>lVTmlQ1wCOxyqys!~M?!aO!s3mAm?lZTp=2NY-9kII zUjjR})sDBl%R}Vd_ayJifkifucNhUQ7-P}$uBN4lDb>#TQUm7+;wUC69*k7xN~Hw8 zT~LghJRxTrbV68M%)6)E)M2#M`oN~n0^ep^I?3X9yzEWIEnQ$f8%F>{1*QZr0>GvzKZ^Y%QOl@4!bE!GnQpyE-$G+>VMC4I5a zq{+8ZikmE(WvhK6dWKy_*|K($cgiC+msn-9h&7Y`@ZF0r98DR>^je=Bgv8o>N#XE7 z*FcbMf*_j#z?v!5lI3LHE`SjW9#X7Uwq4G=8@SI-VRlm(SXM!;{TaTcI|r0Gh?47U z5;q>v?&P+G?&Lz&%a!csME_a`(Ct?Etk-)Ezp&N2_uStSc$KuqI;LJu;5CqUbx|Sm zu87IIcmE4{S9xXft~e;~YPtvHT_xRd;i=_ZbGW>77T0jO6+y^N?&Rx->zn9xLIir9 zk{pzM69TgDTNuB0Ol+VY7L$K5fb=3J|2Ba9E6y89@^8{5?2#G~n02GN>!TrQM4}l{7bgALj*(@6n|Mn1nwVbfn;9^w z{6OE_i1mC$mzyh|dSC%^G?56{_LtN%>J`HEPxxaX{S)IJB+zBkf00V|V<=q|xZx8z zKyy>{!FK?Xi^3>N7)LcmmzC6(>g^qHC7jtrWKyy(Mli;JRV|^FkeCn;@3bN+X5$pO zjV2_21lMII{B83xDl$I=%*!#fN=T6z$rPDfrpOEpDl%E5$VkfXp^D7ZTS<|ryo4f? z6;Na{xgv9s6q#F@A~VqS-f9n>;oJ?1j7>QK8+RB`=O=V6%s z5(D~6QEgdJeHr<8)R*cmjj0lqq`oAQ`tlH&mx+g-2`iZ!t7O;W6yF1^c9=X_XO!H-*J6K1}7DUz3TVdEcIB`Mi_7!^c9imD>16Rawt8Z zufTJYM~Td`i}Bg+L9j!*yC%Ih-7jVitAVXKp2;Z3jW}3#E7&F+$w7Z!be7d%IHdkB z&~R#G%YLCiSI_t+>LiQ2r0_nEAMA(0UA?JI}V>Xfuvs zHe(~H7awz*F*KIRmNLh3?>{aE?Fm8s!o&58dR4!eGxYDtxFVXD{hdk1q1@8SxW@d& z|G(g0Gu{-@zc%#$6#v?G^Z#Z3wJA6KpY2~8(D8rYzqYx<|Du0wYu79AuhppjwVMBR z|C*8e*Np!s_}5^6IVJ7?^{@S}`qw^fdxicrs+$b*iEW%V;{gPv9)wgU!Pz8=&4)0% zR}(bMgQ38ZQz^`LHbFFBkTxELyYaH(s1jZnifLlQ~*O!A?^)3{5Lf>tJ+}+p1zjdN33QXHWTnVsGUMnf5Vdd@|lo?YF z|L%bMYf114eYe70VB}};RXVKz29oXSjt-WA z*|CFK;2Bk7W{ia&Jt#*Xm+T&$A>t3@=+5Fad`8ZcEonpCT_+E5cfV_hJK;}^??vZ_ z(09A!YBtCf^QUMj0m6dDQ#M!Bkj$8)L)^(nv5W}(zt4uw3QGy&^i~kF{fu;kAeve6 zs3nD3`X#aR6aBJ)eb|J4zd%zOehNdmp?Rc4Co_Op*eQroxG&o1fQF+=qT=6*oQa{- zAUj=;RKn8F6pXO=vfxH`W{QxQotcE&3yD6HotcF#X&8DfQ9rUXM`DXerxWnNU+N** zvQLpgo^`OfSq%gU7O!r;6}kQHeJiSoZmqv$%ZCG!av`E(-qNNT@OIc|(qU9`dv$T`4kaMJ<*e2v0_X+dJJ$Br4 za1|>1t8I!Gydx5xY%KcfOZJ~Ed|N5Ga_IDlpAKx~=g%HYqVLL( zGH2*8{g|Xw0yUHYam*Z~Os|Cb)%649gNnWl9xYCS*Czc6n6!5Rqw!49h02zFV;vnC z$p(Ib(D2}avd{MheGlkYJu;KUa{bB5-Bo^5_Vp-{##Bj5`KGcX;95>SD-^t=BQNnx z$sGfWZG>L3{N`wq?)N>&?b&NZ=RVk?IzVjBn2$~oNkJYFu5|y1~sBk@1l%sfLH#z0}rUf12h|xIx zz>Qu5LFIi)b%+J`vow`8F$DKvEZ+t5SO!yy>m0MZgyqM8X^;RJRnXn7qNOUYZui?2_7r>vU{B^#yqQ0_S@M_T zgEnQauYmcB?=B9y!C{VFPgPO*%H4j`xMUpfVO#1Ma9&1p-@iLyHH}m6mE8B>pfNcOjc!w8r7>AhBrbkNy|)jT$3PcuO|n-C@F~pN8R1-$)aF8V0-( zU9Ynr#9a?y8IPM3F|{RUA)Ch)D9=A-xrBpL&uas@Y(~$yKj491qDY<)&t#|fqJx}0 zCJR_z9J0J<`Yzm!iRMK}i@C!*jg?lq^ub~ zZ=fr?S=~S-yBVDaYDVXQnt?u^WG|H5R?pzf>}G)8l1bY{{dPJJq!nP$=}Zw1H+@bN zaE1_0atUJqS9z zCvP=~K27&+N-3S+%1*@oCsO|tssD+1WDEP>7tb>#LjOy#|CQ8#77UP3&dxFoFM~f; z5F2~I9OWA}eqQ#AV~X)q-#~Z5j_eojF2d7&)}KjpyJpuwch7Bf4$E~9(BGZG15DlV z0MjY>cNC1H=Kn+9pMXbEWqrVSchX5Z5U6H}21N}{(8P^I(IEyk4QZ%?YQRwx7hFb( zIxZmT1{{qBI+4_r)pz!R`P_K!pIxsu)}#WxE7a2wVDpe&<$i zNl<*>_xnHJ^L##%?ykD)x%ZxX_9GmaX0#}gw|qC?l2`Sjm;;kq@T4@sqmc*DcT0O|9bVCso81l zqKtMY8xDnr-^_|=BkKUw@ZT79T$)6r7znMTykKd6`YGqs#NVWf%Z4M%MzS+=MNqq8dyhvJb*KN9 zS@fTxy&Wb0jtlayI7a@}S>&HmyiQthl&QZH%I41n^*4j4zdtecSC*F#QsiC_oSca- zD$64wC;K@Eiy}&inkO@#MBE1r&jDwAx_z^>POu}!NCzRB(!k+Vut|EEL-y*|k9HC! z%5pM6_$C2;&%}~4hf@`PtJ@GjlkU9H^!?X2?u;m3L zgrIRxGKRX8z?xEb;83cYcr8W0K1H6WtEV|9>SftZrVigGIxRf0=In4!9Q*xarxgK&U`dFHj#|d&$aupH#MQyB+ zT#vY@o%iV;X(^+e-OCkK2jK7ie$>hRg*fHH+g)Z!)(k)?$suJJThuP2@4+VGI>@sdft(A56P ztH8%0Qo|7Om=+D1P{4!+;k(ipu{e;xOT?n$luKl%6o9@2o{I}oGtkyvul6;>CzFi9 zKTt(%4Gzx}bQ0xAM~HNDf_U5*zh5jd$CpIkRunH%b+?nyLYr4RqR(&ufUAPWTG}U`ui8H5C0_bzHAiq28`|e zEu`lqQPQ%aNP>RDkw<@sB@ry{xHj3CoT3&r0}Ob3CEi}iu`33U-r33(Eo+Grst&}&2}%SZA}+n!XSDT~g1+pM7UZOHOuiOKm15*2 z(Sf^E%`798nun%q7^RF!#}EkUw-7-RzWXr<%)ZCE$y<2wLAJ&he?l*d|GCVLB2%&S z>^=-7) zw~0`lKM4HiwZFx8E6Mgk^5M-`T>ul6ov7?&36_H;SPs6L7t*Mc=t!)287ZKoz#l+Q zUeEO8{@7Y4kduAiruSc@blaKmCryO}%jy@pH|mkPO?4$xlZ@B`4NQ@Zv1^+#SfV3G z#Pk(JKe{GqWoNd7n}$E`nWXyolEYLn4M_r}FDo8Z=p4dF`NK5O*@NkiI+&Mz5O%;I z*Cf4ckdvsvLG2YGx?ct>_FZ0mAW=HBiCdEF8wgXBrM6N1)Q;G2ZmkvfakwbXAAp|BnWU*j?Lr+npsa{k^MkV1iuowQ zaToL1N~nOemT7R3KL_5!=kR=nU_L`=KI#xByxnO&2o<8(-}LHdk}i{|&S27fnrJ?D z%*T%T*fAe_;(W%@eAFVIPm47l1k9wXJj+4wY2%d5#`URm#@bZlPWt^p_=ebgKyQkj zGbHGy(W-VPJKeyEb`YDnEP-SHVFiEe@Bt%nh0IdYwdetND`Ixu3ZjAJHqIEaDVL0Q zCQ+O5#$=ZuH-F+(IJtT8x_HPD2%bSp-EL8wH?pvQZ7!dR%OKk&z9a4}PuIgH;U(`< z;!U$?_b?-&5ETcz<-Zw678K{TL~$;h86Y}0r&&a&Ye$;pl@`f2=ZW7oZfUL z)0eF!->(GuKx+W`TR@YliqX@z3Do2deiki=uOv2=uIXl#xgPW z|2Vx_GvNR8^ya{n|0{aa^?m3~*Z=?N%_Y+Rhw05@@BcqSZ(b6oH$_M)8)(jsN!s;i zcJ?GUA3GVjNt7lNogg<|AU8V_$ju++Fs<1wUec-2o2}oA-YiU{H$|8{8)#0N&#gtB zJ;}|-PDXC3Lj=(Ya?=HJvm=4ryd{Te&2IBKHF~r4|3&nsE0NxGeHXpy0%hd-e+9ky z#@nY%Z~pb|1bTDki8P`&?>v?!=*^{X$LYx1$_m*>3*vhdehQx2NUQ`R&Q7M z1g#lKq&3w(37Tz5da^A|(4L`B9E6`Pv~q8~`Y-H>eKJS>8-0ar--DO({6-wm_TSOl zS4G^0qiVs2YVlrDhtOqi?#qA{buCdU9dSwp8V(RDN8|d`&xl?b&lkYvIIWUSyH&n_ z^DNe*9wp7-)Rr=BMg#Pz{bju{My;fL8?n+9b}iyLG__A%h9G!TTNG`rx8Q4`wsp{* zQpZ|j(x1|z1S*3zUq9AW7u%)4>=fKi?@9~K1IR?|$w90zrTHAeQqZUtDcT8KIDs!y zdH1odo&crVp+S`bFWGw77mrd6H)-qEBU~g16E}N5L}ZTlI9O8kX)g3OxnwAjrKI<` zsf|kQ2Cg1O+6tFHgGd{jOD(nb-V&9}5vu?}V)|dIn{|)`~XkmSs&aLj2C&!X!-bL0}T`_wRtCY3hnU*ScGA%`vRcj(GC5g0%f{xnYPbWHR67)lf^iwP7 zC*8Y9P4zMjRcaHL$+(U<(S)n1>?#gP8feND7>{YCcZgOxhwp0`D_XRYLl&V&%d%}2 zg~a5M>@7GdE%aw}Ur!#>~0N+l9V=*h(-RVv3Gq#7eObtGaWbaCYaiX74gP`EvcL)kjE^hKm zUhSizAeIi+apCC}5l2rELtch-M<<#zb?P#YC>A5+BvcUb+7J`BLorHIlp;PfpipQJ zrpRpQ-q@ySL6C0mdhL7og35`JZ4T@JkWZO7r|B?hTku;)oKy=&Ni`|(r=zrqh8(rj z%-ed9X+DSrQyeUE$dH~~4AVA!65X9Q6c(}gpue~en_9T@3%7Vn99LV0Lo|%(btHbc0=9w*q8E+b z$h15p3^4LZ!A7@SGKt~dV%;=e!*PXISFeEO-+FIJ7XK)uF>>@{>Os8%(V80xNIbyN zHYi3t+Pfq`AUryhbopy?-GPJ1yFkOdJ3n`_eo@K<-C?7fkM#RAyf-J6OJ~x#ExPuset*@T zbi)QX7q0P$U1LLVZDTku7JqQ3q7{2JH>r*GfjPF&G5xBzQ2_?&itfR59NW|h`smaN zC6A?cRBTl2JG^?S6EPEG=LK5uK^;s((?#s^{n2Yo=%Dh0h#cH7d#_^O8UDGoWTdLT zjA$b%@Dvlkhv;^)Ynx~nh0jl2o|H0=5=XOU@=rwvH&-22ipGWY`hnE+QG<7hZh^9n%XCr};HO#BN1` z4*IQV#2??oxY9J4o+YHiXyO7E1IoqQEEyn)Uuc_d6c=2En2clZ=t)EB5y+ zd(8&v$=^V5L9}e;(x@R$`)vB^UX3$o{)G+xnk=DO9Sp>yLbavD4JGGi`GV-x3%I$E zpjRP~Alcf!xNMDsrUW`m%c$>)i@o~bJg0rRncz?LtDsWcNLa8eH)J(}CeHP0`;cS=mHbzRry+a@eVsd* zz92`*`C$)LT|-|*u>W23ylm8FE`DKR`!Czo;!U&rmrB2CR*O0IwmbJ|S>a})st+RW zGD&m_+LTaxS}YQ24>2E+(Rpml#H6&_HTyJa;Yc=cN{><3c}!iuFD=;2fs!93?`?MnL4|!?@8)V^)isEB=W#-VlMNcZ7r8?C*B@F0_Pxv0Mb| z0LTdkKt|Xmv-j&R^EzQa--~?EyCjl5gE&4Bh-7+ef^?AN=>?sM^1(MxE+1SPmk-u` zANgQ0-WLClt?0+3K%ezI=jSvIK*6v=NRpW zL$r5btZS_vgeoIgs4_zAhi^cO=0GN{&|#H}4~zW(^U6(OIzT&o7vi@i2#oK6L9RIM zNpiy-ChV&gsVuYfws^HKSnvUHIo&u1BiTPDb{{uNl{lc=td zEG-n&W*rcJOk|ksZ^HIj?2sX(hjGG_MPqh|#_Y+`!^WURf;M{XU!P2Jn2EK|Oq3iF zIg0g^7PxvLNta21S3#1FW0Dj)f*vI4f!FB$Jh)9oGkmbrFfqb$)UCt4TF^h8Y5`2L zTVNUr!DZkmu59fPWHktU3|r=o@Teqw@c{!(lT__?r>c!7ee8`nbPr;N90tCLB#7-& zppFYSv-knNPDH)aS+R}^>1?2~VG$n-tjbDYNLZqll$CVM&Y1fjwIs9RAF`eLLUzd; zb7JD;3~9h*&dgf8Q>vcB_xMygYzM-*;{HomFF+sz%}dqe_?jKvS2YIr1&cua^zE3v zRa#gGL&cIlvs=vb&{m0`Ll{YcgGq1*Us)dK58H$r+$dF(ow7EC=3knF6AlTrc2Ev% zVHhCHXW(DVAQ771hNA`=Y`_>k@j#k`8EFnC+Ile2)@>7YXx#MCgQ0o@4F0KQ`49^k4upr6FG`p{I}pX^PrAn}QYU6Hi&S!b zR&4%C$(7Oh3rVH0Zyue_zWwm`v+sbX5kf1`?_J^R%aiiw?Q~ZiutQeqwZDgCe$bR6 z5gkFH`)bhZAOyG~7e<>}5EA|>Z~Nx*jjrmmUG6%&o33%~LvQg{v(HfVKH{Fu%7ZwD z9(!_k`coBcOG4Y6$p(TRRe#up2>r!hkpLIGKnOmIh|2fs1H8q%DhA64JrT+Qv1^7Wp_re8 zu8*~Rh-7J1OW?pY_Vs}Sj~8v3ZqDZ{joeJ4e86gN_S(eu(DPL??9(@YK_5hA1Utb8 zERtOCX_5)m!pEt!11ZsUI`F5<8tHeMb2u_yWTSuk^fi`$0=ux1EWY}XO_0Ay`BFK3 zE5hQ*krv$b1qUmxU|ViZ**vv_(`6vt-u0V^32|%!%FyVQK9yJ*Jj?gA(J|dbJV$X8 za2&A&s^OT*)J$j)prO+)+fSFILY}o8K-GMKOO5cZ= z-P%s3(vd-fPeNPFL+3*(TUv27BA}hJNO`SV(B`c<gwx3IjD zUV8PL@|EIib5vs_wfH~>w}@B|gca{|k&3GW4WbdzVh6&GVQ&?0_rGDDog81o-qsT! zNHar(Rx&g=Bpv~Sy*gBY;`(GzIHI5^je}xj9{U*p6hU4;WP>SzqaG4sg?Qv43l=wZ z(!?{wj7m;ReT@J9-;Z_71plwbXk1_=7_B6DQV^{3Y%%>5Pf=9Rw`JAcQ12n<| z2_qbQz#8EJC#EYG@2GeH_zbHBgqAq6>)+y$y=9FI1xUC?U*3w1>@6`ID*z%%R}Ptd zj$0IFHzW}mKJQE1M7`y2zlPp!`7kYd-|!XVly!wB+&n$9H(sTOe$C1G7Pc$e*GS`B zyip3wv z;Y;J+q@!{r31?#avv^&_)su|TBb4I9QsC#LxbPa4_VH4E-UZ{Y%*!XqjPE_Q;4tyv z;Z)h)Oln;Wf+?2+v;Syb!li+A}2E_)K1Uj#J|A&^oPIz{YNb9UnH{-S6-O?gHY{dsT^ z{aM}tJ&p9lDjU6~kv!oE;;(@W+wDsB2|Sz0zwm`#N;5@KX{J?mCfb>a7H1M9b%1o{ z)H=5oG|y&U!tVktud+6c2T`VlPCkV8cLyVZ(y4Uw`I$d9_A*RCc<^Ss!S-#*^7X zZ#rfVlj?n^rv}PB?YqK56g!DwzqAlGEFI7?B+`5_ z!2MSG%chE*q@dGUA>bm3g-r6(^Qaxt1kru)E0##r=P1VGb|n&&BcZWZ4jrjzUB0d1 zWi-|is_tKkKum~P<-1fVZk7W7VMgzOu%n{NS5rko&$4k-r1Z+sedtp3ZB|ns46=L; z%r`B58Og8auf^S*z|7)Bc&}_H!6p&#T*$W zlBgKT9!|gG`PdNi2`RMax|rS=KAGQEMfsuj@qKMJk@P&y9})EdeF#Z@GgSQv7s-j` z;>Nk>l8n+xmn(@mBH6C}G!**>UhQ$xngS3E238$fVmGK$zJ`^nwyS;1fD1J=@l#Tg0R%FcLM*kN;JO#}~ zTa>_Yrxf^%-kA9~tokI9yv-q!aa_)!bi3S~&Lm&;LT0MhOVyV^;{X6`RP-n71gq`y zzQ!XkhFAabgis6}>0v*olAe`XSUnFDl*+#1EH&=PJ61EI7BUNMC3$!Q+KU$LSQ$%@ z^ZUKDHq9Px(|nfiLMTWcM=;VHYTf4(kqZb6b#?&;AurJ1NSHin4L7KWeRae+d#v^T z=Q#{`?UX-W<&QvPr@xV)B%)b8?qsnJ;`S3`6kojsV-O7oW_g-FXu;~@X@7|4i&FJB z00b{~Kn1_P!(Jw>SmClWfV%_jU82883RvzbS%EGpf*eI2_J7visQH*<0UZh7Nb4*X zdA6FgAL#!oF_BaFsO1l_frw}8^uHl%lbmw%IF}F(-#~m z(IY+-ZK6}241cJ4otR9B*3T?L4>iGFc3mX9-~-^GtNOeEocHV=A(gvo5dW+JenR4; z%I%TtS#4>YpQ__8bZch+gm&u566{$E*DD?f4+Nddc`e!0KZ8 zw@LT_K)p!Uw5;#!vsQ1blGEdjcP{{So-!=J$KxgBz}s5e7HVX5FHL zI^>Ac-%mDPYvZ04ZbMJ6wbPIGH}B`Loe|&JRA{2pfBI^WX)8tk!w-;?G&1}N>YcNb zDlozj^`4=6;mk<(?)RWPXyPW$5KRn9Y9f+dx{HHCv=`EN6UJve>S}-SzV5x3+Pe2{ zPwYLZo5Zq_?43JBH|zg!Jd#8&T{nfnK}us1|C0Fs(Oh1nKQT0a&f8Is1O-CL8orZjZt%~l;bE2>QEJfoSgQL+1Qp!>( z7cWO20zfX&r#q}MoGZp~=IZ<;2;6E3%Z}|xv&Cpef<$;EVr%r$)0Q14>1p$JtEU+J z@{{2An;imv+H=@esk_sn@v$xVJxcJ4_)aH4<~C*6&}&}{j<@eP6*v~}h{LhR{Y8Cf z$L4oc(W8nhRK3EbmR#l^Li(=D{>Yo%&359EYzM)y3{>`5=a|}&g-V2!q!ljnRjSwQ z`4}x~9rL@uid75^wWntVYds&AR_!A;aAQ?zt^X4@^J?KAQyJpXD)K|^Sy^pVM(d!` zdDmoB)p|ZjD8J9WIu+$F4Yd!<>afaXS>+Py>`SP#Usx^4dMa;^f=;9tJ&)kWjDX?) zn9U0SU$336qDNf}lpf4LRCIQ*y(NwAI%+EXT73WEt{=sEm@cTa3`ZuRtTguYB#I{q9U|9$IG^t-2EJC!LM+uUsmpKk7r-a3Wx%W?RZCy)Q$ z==g{5_(OY1|CP1=yC-l>>M2a%%I*^=zy$sWQr>)YU; z5`%wAclhH$`lR}DwX+jHCrhV9cCi`p|mLl~Ip;i?!;g4J*RnHXFMxJ9l9tlJobFU%U z?|a)*ZOUCE8&rE!WFIkJU09vDi%H&_z9ZEp-<9<<*}gfl7di{g(`r5vNyz^*zssHr z{leWWh8Jd3+G3GP!n?%ua>obka^Rp#&fFl?jHU;=Q=gKmO??gPr^^`#-YV6XO7N;= zdz$DFq=o(2Dl7Y*?LCIkVjk>DEctO4mmJ=+WYBD(cbcfQD*82Oz8wA9YW@xWdMiYU z-*qv^Db@ax)tmH0i@gn+m9g)w=EKpF_llB1^Y-YI8^n`V(~B>N5TUu9vUaUYZnk4b zglEh8)J1aO=q0|N>Ymq7LUT{lJq?;$mNf*tt>qfJhc2oQ4PNvUgweA~9p@7YsWF2?a<sY7aZOVt4;DJz$i8Ka-$jcTNQ3ZA^)#>bIa zt!AKW9F>dMl4*J!XQ#8yLD3e~IP2YCg44$FdW(4zn8i$A#GRK5nsupcOt90IsfAB< zg!Hb-@&?kZm1WxkN3QYraaVQPrG7c{7_m)$1Q|1wt7xi7S4` zzrj3ahl)Du0@COxT7MYjAKs?g_bJ*Or!pTZINNIcQKT`4ks3e=MC{VDp6yVpN8qwj zeHjzqdr4TL8rODBG8`8ufnbVPOZRFwIH`X%o0K{m1N)w!uICN)A{6pFn!lCp-b=i7 zQuV)S@FoBO%bqT!xK*lto3ZpU*?8oH)nF<$sE{y=8%*(N8{B~ppKymrs`sh zO#+{Figp}r6Dw&o@4GI1FX`w{&}60RDj{w?Znf#)HYYhrHFbSmTIt>;BOsf$wRcdbZixB*%leflDpjnxdLQxd3r%Z?lh{;6XBj(15ePn|R%!(0JG+&tbn z2!Hz%&K=)J;LY(anXxbZN5>??d|F`8It!DEd%@aWP2-*8!{bSfOG`|uzjXQV7I-+( z;?$*w2YKzEc(qHE=5e_CY;}VWM1#gsJKoteKC^qbbCbKJtD_Fg{UD?mkqPIsX(!R; zEzG`8OE_@6!vdj{u+#dMS~sX@OJYyjjeVNOXNi6$yTZS!OV_8ihTkX5_LrZh+1?N* zsf*;@YlVF4Bz<=^3yIekPbFHT#`0C(a9!wAr?eteW|W?A2Ret(9ZRS6(k-dBNq0Fo z3tFU2)=z`PS>_ZLk7e+VA&ui0x^>ebVk8-8idqno0_P%x&x@I)&rLbUX7k;8)v$AL zA2b0vN1am5S$rR*Ta9H%Pv$s5K24^jY;(~?cga6seV>^XrC){8wo)}`||0M zcgmR^vh=SOr+JuVgXstj$|&Swmaz}E5*{c8Arc|Ox3VWbm=dwj!BIj7@1*gwEgo&F zJMa;qgOAkA9iHkflJ*`=l2C#YK}*QE;a_9olBJ!KRjy6$W4?od!(E?7fMiNfzQl6M z;0f8dHkD^Gj(}>H>aR^f*bi4`C}cXr7sV%^Dn0poA=*4nlXqB?*KHaKYK@^!UG7)U z0wz3U4s|9%%_S|ED4+%(KbKXJtHGw0D$4Aw4`N9k*5tONB9H-_Td;QeX)28x;fIw- zOVN6wqN4c$li*-sL_na0Ve(`;XSOEUcZhdhf0gD);JcPVx<&~ceZsfOQ?td_P?urW zIO1c5LShb(d}KY1*lvxuYLrb{9CW{$iGiu9i3{qxqu0e;)P4O1J5IKK!So*MhidSsAmkZU{MXz7VR#!2-<2O?jH^voLChHmNECU^B7spdS6 zNVc1{puF`X1zT{pq-hRo3pRR5d9oIOu(sbzgUmij8->7oTgrFf0*Al_uB3D2JGYma zG1gd*#2w~`snOfg{9|;l4@>E`fu2qIpW$G;)!@MH4UYYvHP~+N29sm6_(v`zIRVrVX-utzEqstta%IJJh(|8GQ`{8Y7^s+U-PKo`F7ckj;Cvk|=zUL6n zU}T3Ryv?3AaEu@FUA)4(*CJ}@Zn5rs^TFPR5FSv@&+w!frZi#_Jfl)>x0ko(xoFDM z&c8ihp!3gQ=j8pgc5+`)L-&SJQk$G*ev`ZobLM`Z37(CS-`}l;%fC+xSRu2(ev-v8 zZ$#V8ja+=|hee0zCMZR`g}@Q|@NSbcTfe1ksL9Q@ZHYVNTS_xJ`D2XWG#gmM+4|C; z@FZ1aZM1Kg0Qp5EB!f@5;oBNJ2lviYLM{W5N*&#A@!E;-y}|iXdhO(%do=v;DUC6M zCnJUS(h&=0wuC-(5l5QYibJK1XO}?M{>A%6B%;HcCmBOCRqZyXw|EU{_IP?05#5{t zo|G$j3qq=Wz1QBT+P4rXV9G}$k#EWW8u;v9*x9l8quzFM@kdM1?r?vh&lmCw-(4}; z#k{!e;`VOelJDq z;lJZ8_+ZYU&}?HKdkE*KB&i2iUK)E1N2ay+CiB7mYVg6=yq+vQ?C#I6>StT`hVNEc zYnf;a?Hj!|qLs!=^&eug7Hm=i&8c()PB!wW_}Wyi7HLxK8$EOZuBXvnpBJ%)f7CvAWHPPj&D=?};v?gE z_{~aWEf{(KhJ-25__I{)Jmv5Q=)3nZtHc7D1{;n<3$k^|c$wDV9C6t=#mO3d$nO(wH`A_3lSr^wxYXRUhk*iG-+pm)E!>g@c7?=c(F5kQ9{K zwKW9N&_@~6am1bZ0g{ThNZL$VNv^$$Yd6V(<`YyqmBUVHxw1BoYp0Y4I!VlsGY}VH zFx1vxw9?Gc$2!acSi;U<8)>7D!0}vZ;jAnOl=^L7n`)bI*Wf=95{`Tb>jup0v@BTV zWRMDXmvss_`3N0|RZshNGDXp0TvlM2tN`*mx`vJQE%05^kz4cV>$| zNC~wO&GVs?x*?jU(P=KXiOLxJ&3(UR?2Lc9kAK9;#-G#6_`m2A9sd)36UYCr0ZHRG zA7|<C zRcoa-+$%wvnO)9kwSS*twSK79?2Iq=gPA8^?C#4fXP#u4Ls>nSIU_T+O*0dhd7YHJ z%nzqUf&5SDe+Oi9b{02f7vdbz6ftOHQWk`3O!PtOg0Ub;1qf2Mxh zdS{9CzE*5=5}G}3k1ig`&BnSC%4<6rOYG>5C3c9hyI+OuOxtDlNdwcgA+jD^?!rlZ zMSDitFB)0TREt=uT1R9rkFKDv1*YypV?@kF_Vb1fLJ?{VE@9%4s1{k<13AMWA!i5@ zn51XdRIib0_GUoJutRJgB{RfQhBGqbQig4$I`s$56XH&p|DlbP6!VYT91y{p=oE3^ zR!ngQ8oL5V=SmCT?ZcXxgKuE?gBQv6#>j^Pt&L*@_Z>Km8MUui9uslQK39~#&XKq& z^uB7rCMm%3AZ@GMT*`cg3D7YFK5=|62z-#<3j}U=c87q_fw|C~P4FS+0*BS(9Q(Iz znto!_K*$sW9~_fvhV>EEEC}M{T0qPYKz#f47!a`sJ`~7pN*{*f{}8iX6CHHOc9KC? zm5>azF?yEGyHldL{{}}Q?q8qzzaUXArl!gRm8*wIHRBvHD9F0Yyok-7BfjA$2dI!m znaI;w&Z}=WJECK>CyjCV|7MIk1S)W2!_<6(=(uuB9y(PK~3c1NKu# zO>fyxf|@3!_e4#)JxUk+%64jWfnwe=E4Z_En)J@WgIZhTmY{}d}izBVrkQq`lLtgDPC=tEd zBv-jxo0DVSo5Aa!Df(?L6_P1*JT@b`F23pCxhCmYlewdNU60Qk-PfZ9w`WY^PuDTn zIbyDr!@C6Y?5-W>bT^G7hR)qQjwojO+eaXbNiOquDG<~WN-{|rfU#x~gEg;@`76HK zn;<2QULPkXGFgVbwTmO($=a?4#(u>~1op-0-~#z=UCwh0UVG;y0vkA=qpPj740^cxzL_C@`~@@CyPJVkQj~NshAVf5}V8W{>`zl z(RTuQg6lWO&U@2DoPSSn^kjcN;_-Y-1O3s!Wz>M~4e3+Yy0sg!+}fl}PGU-%L%~M) zrOnz1#9MPjua^eZ%Fd=z$N@?r2PoxDV?F|O)*KXq$+nnavPlRgn~2`~mVvNf@*l@J zW9VrR^N6FzqMn1QcCE7^Jt|Sdux@ZE&FPmgamrU~bWeXv4@{TJ@Ekss(#(gQaa@FI z)LJ+&MJLHR`?3g$cK(=eqngeU^wKUQJ8z<`M4O0_4*ih$u=TSx)D@9a91qNC&7U1R z#nQ}T+xP?F}Ew~#IKMLMd?K{1Y=!z8}Wxh7q zX`X%jl$$y0~EkFopEwV%tf`y6|*H{_}dr{NZbG zP0zXc|DFv8dj0Q_NaUqKMO(sYbd9_;gwB>WB{P0KnZpR_yhKXGj_9c?)28%kE)_Zw z2d?M&A9WF_R?fG7b;&nkwsS7{&I=JLHS<#HK57=?X@Y8GEu)V{LI8cs#m?0|Ys5a* z#%1xoef&6NQi)N$ieXICt>myRx44+7GxRdm9+$@1)|b-o_%mBPkUbTBjLI zh2`YuzCnl=x!|X8v$KE3GDed6Y9CQ!C#Y=h+@H$ESslw^osy+1_MOxwyW_c-G~M8S z9X)#sjw?ir(pZ!EVX1x^(-E0f$B49p{+*WN%`)xHsOI*4PxX39gNBqziM22f3LLll zo6J9hC0GL?B$hic+`&ORyZg6sWUh-jOAf2PF?c1i#$9zKVnfgSK+)FHpv?DEEGNRH zn6zUZhhF|+9JI3}A zNyy8z2j8MM?|O_0yb{vFT}=9BUq%3=MfsW6zBvlO?B0hWdZ2dQ+WU|EodLg$ARsSD9P)kC~O$bUcgWWMdyj+!H}{RKtM(K4E`unr5d z9{oZBsQGg{Lz6?8SD(*PkS#)9I<{)`Ae--DOF41C>?5+$ktC-`wAQ5n*;%bgE4aB* zyR|qo*fo6-e>1HtPB1jB$HGF$-k8T4Lncjfq zhy0jf(qaErm>jbA3X|L}#HV@>ExmX=_O%N4tFeH0XeY^XZUb2~zfqjAqqJoo;BCQW zjaW4{iwlppe&8w!UnzbR1;d5bV|L>Df%OBjknm~ZhfdnIzT&Hfd;mn3b5xBTr0;bp z+8P9#tJ!~ywE(z0eI=GwSS>IshBsvl!tEJGNZ!`+W*bcUO4EVTFes9JO>>6(aj0H4 zA!*8(oT#RYfxj-DwHNyIV0f_CeoRf&p5aZcy~%B-rrl`TZ8d$9GyJkV+{X6BErVcf z&N2fhce(^WnrwskhmJO2nHQcS#)kx1qP|pDOGQVkzOCmu!di~ z5q(w9U;0QjVKy@v2gMbsP%}sjFI2*?K!scRp>~%O<2@v6A1tF5UULXVm-zyHxvB_b ztIosMOZn?&s(;mG_*(M|ba6FxQJdUF-&hwkstBoSJ4wcNw}U5i$16z_8s{`i9Ksq_ zjHNmwaV#UOu~4HIC5&4^fy3?7s4SJLd5+}r1keW2m z)1qzi%f{rFr}qTZ{`ADb{W3K+xbu4s?zMCtT=f7hbsd#L>cE8Vu1oGNyJvUvV%^Ck zyrNwx{W4VDB2^Eenzh{Txk)YBlUp3xv&HjH(qeN;w8bCvtaKo)_e#HvRVwIN>GhLT znjWh(JZbEnl%%n{dbaqJleE}3*5ZXdD_wq)O55zwO1VkHSZz-l#^9bUe&k4Ok(#tx ztcF}n?1uA_n!G=`$$>qaT;%9|kVUaU=Jl*}%SkH1Mov_^pqKSONu}mkrTkvjKlLQ* zAFDL1m-SDL9~IyI)-ky_S}t~4={o+v*Prp!g-GCc9sQA9LkwE!ERs ziBP69oN1Yt&U0B{jh!w0F(10#X6wa1I?=v`h~r!@B%XoCWx^q_a-r*tqzvPx$gqF@ zH%(LsdD5*Y9c+U554&X_InG6bv#NQDQ`O~Bh~}qWC>KsP93jQts$N)14c(RlD}2=$ z+9zuMx}G>s4@6^wJ!Cip(J}_NkiLe$EF(nQ*O3r0N|!hUpEeM&f!j z8EA^k4yro!tgNm6lFm4N)RHzzj2zBis)ssj0U(*_GZhTB6BR35h|5sy*Rkvokcw0wSvm^A+4e`Yk!H4rH2e zw^UuqPFlC*62bS%rHqLDt={{;n58r~p{A!Ol9cbsYd`MGpIq|nS8b51OTS+0u6oY~ z8<;@zBG~NscC*b+&By-qa1PS^$$>EOD7$E$ll9+!g-{ydXT1f-l)#!rMeE&FkN(6i zJxd~`^$l&sdFw@5s=52Kuo{e zQKk>@u*rcRW}msmpm!B>>fC%H=C zZ6XYjR8I+g<}A}pV$C@(!ly*qwkq@6z#W@FZSGebUTvGV-~f{RaB24{95xbeyvJN2 zjAHYc^P2EA4K9n$@lAcD6*oa^`bZylXg^54b||6!`ATS?)0^4lmHxHI>3+pY z&CdQiN#1A;`eWxQfiC-;pD4zpF4dTqBCW`AYwx)OYrBYNIG!p6;7v#q?T{9H#(`SyK+fDu0@-)v%nj5i>=M(g*G{iQ_;^k;7GE%1ukC!V5@k&uscc?BEj9AKD& zK8H!=J)C6$N_Uz?F3p0D$jm}jn@dOJiPGB1a#`)|O1XCX1aml;U+s9}jwo7BNX=|! z&%rfrZLOQ%fxbp`R=6QXCq)AYKSs-y8XNN52itgY^u1E7VzE_ukrYCEcfg? zMCvn{m-_Lq35&N-fq8xDOOV$44jT7^P^8@3halr1$Yi-gpU~QWLR;Nh_b*lbLE@uk z1ZnH-cZTz=g{EDc(-q~y+Znu%cXIopAtwRL9U+0mi8N{9#cX|D8B~p{KKdJE3>W=} zzV4u}Ui%4m`B6^e>XdQ7zNpW`hp%!sAwM&A?IW;w&C?W2Y(_yf*{QJIc5p8g!ZN0zjVNuhg14XM)xE*JuT$c(<}(FFZ^XIluQJX*{y24Ge~>q3a;1 znfD%zoFpGt3#*(CbJVvnrLz9?4sPH)Ri7gWH-rOK^c95aA=}gt)enA_2#C?#EUx2V zQa+zX--U8X^^qWBn_rXQZ?{d3G%ElF$sB!q=rVrOQ?uUh44=mNeKyH~FYL34?tAJ8 zqTGdlGp6b>d&gw|ofGsjduN9nu}M##PdwQq{cd|__{W^c1d*@Ys~Jh`c4zL9Lt!V8 zgOhz_o?5@ttxeAqN|{1;tw*AlxunON-p{Mea3LfcyS)?+MvFds2REx~Uq##SzpiR8 z3ODhex(FtO@m5LYeJz^U@SVu8L_I4!RocLh4AW%4nWQrf1+r;0`b!? zLr4u-P;&>XY*x)WCLF>!ZtG8F{YT6Or4fvt2?|3CPtkf|Ye7_Thy-4#ig7L7b)hUG zecja^id446E0qy4UbT#SeZKWL=kVBZ9Im*ySZdniUpu2;wZ*m*T+VqyJW(~n#X;AM z9PuJZ&5huqMx7XC15dW5Rva9cG@zz|{mHG#)UyxU0Wz;9%S#C7CE!kivKGd%O8Pbd5R!J0VRa7l4|}!cZ~Uq0W4&fs?UN2 zj{aO5d!(;I@Zv~z(?SFzBPr#J9qj1v9QUTx*hFY=Cr^91i{08ucsZIa7?(F3Wix#X zb}};sKV`sK_Wm4^SZ?-IG5C!a>rlaXZV@-`SsE>cs088B452UD2Yt?siZY@Bqh<-< z<+9PPnsrpb6TJ|j8<7G-`f#?PvOMBHL^ZvJM;hfqzLbsSVp==f7jF?mX1!P^aU;tz zMQ%z0V+*Hrdfvv9U4=PQgG*W8#ueO1rK@oI1Z^m zr_0};<{+9g?mYofFyaMNF)JxcWklF}s?2q~9m`^Zy0Fa>)cLNkgmi!5CFc%m!_o2f zm1^{^#PQ-xne*aBr^kw(F4f$TR1}9z#6J*4FHIOWZGxoLy#uMWhQ-UKCzcgS8e{Fw zLc8Cbh?U*-X>`!e*(rP7K>=3%W8tz;7Ua>A=^43DB_PT-!ZzS6}r$Sh}N#%(T8j@%3VYdlV; zC)Czo_fjM4GeeqpX?dV>DQ(8;{+4oNL4U5EKALnFmGr%q@ql$dfy0e#0J61!+FX+p z2YPPoVSfB!VeH|k_`}lJLpi!S1vQMA2h&SXfvD+O z3Wt6HEfAg|*F@q!rRv>TT#1xSlTxVC96QnsQ$14uk}fz{mKntAjbNL!|71ZuX~C+0 ze~t{F3YZdjNc{t+t`=20plaL8p|`!;ZkYzoWrv5!gmfRa6X``txF(J(5uBGvcN`yCy+g?Ki6$iw2gE%qh@)aYnX2!QA=NVaMAoT3wQhHVLup}!>Z2b7Z1)P`p1e{ zp=|w-h$L_3yR?s?^ZbDlXeSxP)tRiHm2d#wB_{d_-zFlRd>hPb`y{#mx~pJdGiIx> zv)QU-zN;YeA9qAorFR%EsB>N=>@QWgmOC?DO zjRtX1w6HxJ?f&Xl`thiOJjdm&JjZm-#p?=yY2$namSp+~Ru$#lobiUc;pfgDF(aJ%wP<%2>b+aBy$=qPKj}TfXRR zz)b{>YY7}kNoS`i*NRc2k4X0G^V4kALE!tEeOW+jhoqV_al0)A3BT$R=K4Qo3TP$% zxDSoXx2rm5obwN5tt2BO<-&BOd7LEz9ajkFDr=1_+9YuF651)u5fI(BgOdg=Z#y2P zZ+^$J%NiFJC!gT~N)JPmLiQ-I8YM2#mWp&&R$S!}ms&0-v@<2Soj;0p?hx%DzPYy3HRQX&{{S5)(h@_{w&c%DIf3of*H0VZPm!4 zqzJZEGetB(YLc31;>9Ayg6^eMzlw+8UWC=-wXc~c%2bJ2R*7G-XsTBHDirS)iC_1M zUrWTVeDQ0k_;rV9a~XqVah+8}G}b`B%4(MfkK>Sew%68#=o@hXW^As2@s7O_LVxMWfAe-WLNefsvc7zW5osgxz!GUpLM^TrK8!4RWwSSE-b%SbafOVQ`Lcm1j%{5I- zA~x4FTBM>XkRaqI^FOkQD-Q^yeQ0^ZB``w!99B&K-I45u zN=OHGdo#nZ@6i}E)t!p|b<2z<|@i3prabVJ>*qs08R5SJ!sYLd1UQLN@)VRH7yAf{3p&8z8` z*LakO;wdm_>vTv@&W_qWKFf;!FX*JoDOB0LVu+hnGO+ww2^B|~^p_1%Kv?M=BaP1v zA&*Zrm!60cj?87#5nRL{&o5y*v1X}|*l=nn-KY~-fpw}#`n^+{zlAq+^u(G|k2BM* zMAn+WfIf($QNeqs&S@^N!-k9wOgN>k&vzq($`bH?g6b2?x05&N7gXvdn9 z#jlJx`KJ;KXBd@!)zTpzqnm`y|8aVUh0C-r=I;ZG>7M@yB&X)ZjG?Vb8cXhgI)pjyQ!Gi{8EUw~@=U6N}U>Z@xQ*y10*Y5hsj0k}NtCyMt@Eh?5q#mFiSep_)i#Ew|5`8SG znwM(x$?g?pW-}}1@jA697H+fvzcvx@4kff#9k2{Fk`wJA{O>ka^MP zaJiS(R&J-|$mJ*AWyGkmtV>(YG=eeC-sEW}{+{k}oTk~utf5$RG)@i}au<5Es0zeo zsP#0X^K-A=?&L(TV&cDsPg$|D$@OD2&)ps5QHG^OeqzUXJ! zOKbhhWn)&Vf&`)dMf50z9@P{7?0cwsi?rCYLhy*!F-WdGPNOFX&q{?23kqFJm1${~ zGs&g{yo~x-#Z*_p(TY(CQv#z8dcPQQ-4$nwzuUx-v_cZXa`q?tCPus@*&b()su zuaynQX*3v&y5=5W%->=&38qap{EOPR|DAWBVB-zJ6&e+QJHB77G~H7|gfe2obkf30~=x2~T$jU`0b=YCxXIFNB0{nIbu7YbF0m4`EUe-wIuyRxt35EZ!>c_uw3Eo# z21Uyn$|*CJi(K_*Elsqtf@jP+=OksZ0Q`^3!o~b3~boEui1d)g4X%GbT zRhVVTa$dM6qYGzTZX1nYM2!zaZ1Ox7&n#yh%W~k}H!yV0ioa{t5dnd?hKM-k@O+4Mud;i-?HqCdx4MNv>W4N{7fqw56>fGM1XkiNV%G zTk}wSr3Cd6=|O!gz@`guNNSt(Y|!m&@}ET~iT6d60+Gdrh-6Q#z$6Lt=~HXXzaHY7 zt9McQlK9i;f`xy2k{x9(B&~ZQ2uK%IYgPXC)^TXlD$b?x18tLRdQ6It-WSxA0;}Qp zh`0y|d$Q$)UXFvsFwX0K92y?Jg0{n~?>Y`FRKjt11cu2!OHJSAIWbk990gj94k9v`d{$77kF8#grqC)7W;Tb1%Ac1w$5WKdy24j<| z$ES8XO1BC~&Jstdp?&V3ne6NBDAiz8N}!8Q)62XpH9~r5lU&HLPE?7DsFMO78;K2h zqy=K!Lh3JAd?q6?>?P&? zrfFX7A_pN?hf^R|)#0MORL9~%(OkZ0JfFKF#cP=(hyJRLeENI6V-)?p)gcRvyo858 zb&&{;KDB}74@lw6Y@k=+bQqh4ZQq6+XT`8%0=VOckNF}DJ%KO!>qCs)=2_US%-O-% zZC*F*HjA;_+=tRcix3!*+$rIf!)(oWkDe3@SOXEt(uPEYz={gQ;7^=|Y$YOy(uHVXC#oqofi7CQE=mnCbeSK6sycM#G z>}?NP;mdoIiM&+KU2t1(e=VvF=W2g^u-EvEiVi`+KG+{i3qJsXYxKLL3OOwt^Hms5 zD6mb_C*2|ISgv% z#Atj!F4~gpUn<7)sVzR9@YU3p9B8=2qR6?8>~s8O~DJAQu;=?n(go>>O)M zuA(g%knb#OFb5L`vjG8ZMgQ7l9*XrdDgG#I!ArY2X+S2d(`&tdIh}1N{(ODP8)&Np zj->f-gXMOh?YKe=wBJMQr-Kf7qdi=e2v*7tn+UTA$EC4xJa(xXXu zw1%2;`Ug={&hY8diV)3V09HDD1-;1fUrjHvtQ;>*o{g}kev1jO4YlK=k#{|Ba^&6d zS;!{Pl+hN4O1dgkx#FgCHoc+cRw`sm`=?uQAiX?zF~Fj>8gg>t}Ab<<)S2 zXe%jBLXw;%*5@MYvsT>QBt-cX;)Zr+aw}Wu`}e5K7U1hyArab}A{US}@?TuSnmN0R zk}g68M&wObk&-YcrxYlpZRLI)!MNPgU*3`exo}c6etaDEw-^rzk{mFVR$$qh;&7&C zB+eC~R=(eeiTokb0O>TmttM`IY8;lZt%`jU`jLw_RAeWNpVMlXPk~|%eKJa_pSlcI zg=*%fUTr@e?HNniXgBj6db5Py5MXTMOqiS<=EsOblI?;vn9cOwJeJ?H3#>-{eWVKAYaZ0&1{(AEmD@kY65fMsz z<#a(22g~$=*nat|L#(OSxW`Gmq!W;PBf5Q*tzTm5ZrGvL^#2}vMr;@uO4FR`2y_i* z=Lsm}Ds<5C4o+@%twI^KWAK0c9P@Tyq@S;3x20Y@0UiR$2CyPM(buS>TWhZ9vtL?pBh#M@GiMBDlA|Zgj-@ipzP4bN)eFq5QT*)GU}kRWica~llwPKM za|%z{MN{tRWy*_KaZ&S!Z<(^W?nL5LALxorH7hpNywsjkb&08VSW|WNGF7YhmT#Y` z`Pqr+6n|syWr}mzC*+>NG{w()nc@=aB+Z}Qy>;`8HxVzBs~xLPZcI+z{rV5rr>+)KJOel|cA1)Bhw)i@_+BY1fkUf+=P zPsFPM@hK;ymzZC|&fsKN2yZbyB|cJiR^5RdJxv+ui9c1Ms2LhOUa7wEr86QetSo|HZ;{ zfGJz8M68-N*&bg#0ji$)DfRxUeuGniTj|AK(QQuMj@W~tc87aD(rQYx zCkHwszB@%=l%br~1K06BT*n{d2L6aflq-2r(x5VGC(~b|EZaxbj+f++nP09= z?x)?DX&%90sUv`el!7-aZj`aMh^B30ML02FAMv-wuW3M8JfIukMC$Ha26s}a{-!>m zk6dM$yLH7Ohd#=e*&B1GD*Y?ubk{k(+E!|I_TRn6;7nCJ4YT1DxRX?%MQ-h&JMba= zNRJXpQp;Q6+O9xnhqPcJcM3GbUpr{%`#)^AFI8!L5B zyx=hvb{yf`2o^iwMGA`$#2DNucC9u(rFpy+`UE*J3Q})Luq_}0oUwwmqNyok0LO}X zkC)^s8p2WTC=g2bY8$*YyM5z4@b0WXM(}D)G}Mp z;T&&_%tWBdLx-gLweI{TBGIdZL>)J|rLty3$|+b=kw)VPuTT&(_H-hZor2AsoI@mY zF7=mRRy)3+T$_7=`AJt4AI4Z+(z~kqoP4$_{xpj=+PFe3bZBRAZ)(go`cuR!kgtMd zU#h=tBzz4>$*Tl*5ea!i4yP}B+zIzAlrGqgjE$rtu+nz2@|iew&C9U>ME*POx} zqz#=3rr0Z|An<;Ey&}EmZkM(8ui!N#-1#O_VNMW_TFB>eO zh2zwMBi_P_8&f#zqrx^*uZk8rsRd_33r=alViEU$GE5h4gz3T)>2&xqx67gZxx|7h znJ3`LsYw5Nn^0I2VCYI1=41)gV21TXf3D`%sRKT;u(LZV#5X1EYW?I$F^J5&_8|96@ydt+e*nNZK_hI*lp5Ui`!@uVuX?@tGP(*->t@l`|{xQk!W@DO! zZG;qb$=k@A`95!>Pok0FLTd2_f6)AWrlr4sKJ$CDf740ZcXexjbhLd>wEf+u(Ebr8 zj^4X&Z5Mjcjzy!{?dCp^d@euU73Hkv6$_>N2Uio&8?x2bu33hjB)HmR{{EZ^4_2F_xhn zo8|c&?`rB2TJgk*F6utNnvCA&_f~51{9erH4%&kVdti)7?)2sKq)usTTHrl7d{0mA zpLQhr-`%Z$iDOS6CCoUPGfZ~hM=SVXn`|=9L`c3Uc9@D~CgL?G%BBIYWkm6sy*pk* zOLLAzWp;bgxTRy%Qd$B6f3!!+I><1xX>nBa{WY^nyaoJXhL zGvBok{yHH1FKHwL5&$#ag?jw}7zu#cL{rR6227*VTwse1q{SiNOM}gf4mJwkC(`IV zj?ai0?NaA#w2Qa_>-feYi8{j;A@^xI$7nif3DcoB_abel&Ol3EL;c1yK>oL4BvkTh zF%oLy#9H&;-rw0+&$2`bA@1qebf#8YBM%MXok~|rjI4ez{303;f z4kY7}VoLOcJ$dA3|S2CCt%>g-NgUj*Q%F0Z?(U?W z0A)Go>%XUP->JMawW+mq0WOlYM)O*h!2%HPrf>j@3&K|kD6C_{_c0l;e3j~dDnL-C zUm$b*A;Kg?K}H9P`7cI&dQII$PlNf@i6|@zxc?QY;U5WD3`sc|jQa{0gDE{CgDH&< z*-Jy-VE#o|NmG~aKoY3;n9~A?@|qoa%&a?TG1`3eD4Kt@o=gq$&&B)`Uu77+L1gMBl?|P^gfW1gM&XO75qisk zPH#(?=uUpyU%W-8b=7`^v2L^kUVqsofX6sfdmzuLXxHbt!ee2R0z@HiR1*tbj)P^t$jg>qmHU?CEo0IK$T@ z|HgR37sdz1G$ggKD14e#kZ7ZDAM3lKZIv@ail*k#1%GRvi+OfS9;Y3Yb<&aRbBXh4 zo*o%~kB7Kn5wDKl2R@@0geogZwnUt_k^Rsh*dq+igWb}=R0zaI(-YP3cCy(6wGzqx zQ09E@u5XF2O%0DiJUTGKzxcBkU=82!bxn6C|*Y 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

)6Nn3YW3;*&>VS>3A*nTyjp^AXl9BQ=;D53 z57(A#*vNVzV*GO0%zBJx*O7s@nU~jFmUP0Vw*i~HSZZZ)y}8KLlAdv1vI08;+@>K7 zVQ&}usqn0SK;M~yP2<}<_Wwqvd_8mC0@2xZgElkq2}wxhtSNHm1c=zMY!&AzqeDXAZy1~b~ zSFFAEmtKZ*>xTvYc2}+feXxIbdv*WhX@dyp?b9EZc+>3IQ?iZt(2{y`Jb79^Eb1LO zRWK!+pK$h+dNt!k*CG7reRsfpT&=n@cVf5Q35WOe8M*+Rzg>2?zD(V3pFC{`QdKJ0 zwkMzc&%cL%|10?S@AW^szqkGR<{xyg|5pF^KkZ-te*gO4#lQdAzxr3p;rRdXPq$zH z{K@q3!$1E+{QF-Ueg9wm>GtdY;lIB5zCRfq|L^v%|9*e&;rQGC_V(+)|7Y9Z_b1yw zKGFF1UyZK+fBE0ve*K4kvVHx3Z|C(Z{QF;wj{mEFZ~K+~$>#e1!IS;_|EK-mhU5Pq z|7iR5fAl}y{{G$j|DW{7e>MF5f4%+s&!23L|92;jFHgEL`3J)V{nhsCf9J{eKYxGc z=YPI){6G4u?bkOupZ|wDuRrY^fBRS4um5o8_&?owz27%aPc|AWczAO88{ z?(zT8zrFRkGkx~%|6lgU56|z(U;W!#umAD?;>pqP{||SL|Bqk(>DKG}|H1L^|DW$1 z{|~SKbnDgqU$;NMJOBQpo#Vg#_RqFn|F>Tq|Nj3?fBe7I|KT70&;D%d^&dYu{{8>E z{&&OiZ~Ehg*Z<>*g_rLjMvp#l@KQ({;6a4$%8Xf=7`{Rb!KRt2$|K&-4|NYM& z`s0SzfBb6t_~D=b=aX*k4afhl{%?P__4=lNFn@pN_~E{mJKz7G|KI;?>-A6nohL`H z|Npgf{FDFBpKZPVr~lRI{-3@7dz0Tk{PXV|IR5|i zkNz9o=l|r%(c}M1P)h>@6aWAK2moxN(OUjQPqG66004IZ001BW003fXbY*yOVQyqC zFfK7JFfL?ib960fZf0*UQbj{gQbc{vyLN&w0D$4$X9)-aq7EIr1Qn56K`0A{2xt@| zN;rT|--)(M-Tvu2=O>isU6ry-kVILO#EjNlpscu$_t>AW=KdVi=M-w_qxEF#Xtt0< zOn^9d3mf4$anP+wuVtt$Xd|dwW-Kh%1yGyacVd6hj)OO3Zk+Dj9;caGth0Yp=b{;} zbANM`T{n2=_qz4h6>c%X-rQT8*o@}<+4NXtVb3QO!PRvKf<9lc(92i30iDuS8n&h)D;fX((5P$gI|8aJwJi&B!Fej0nPur&de01A~qU7=%hd z8U~g$f>^i%)Ymn{(Zw;u5#7A93OVN@pw4>8>Sy0pP83g5+AQuP>F8D+mqcpK6lNpt8-$+LU}i08RP$v;xCKYb3-D%T1L 1 else protein_ids_per[0] + n_proteins = sum(g["scores"].shape[0] for g in zarr_groups) + n_compounds = all_compound_ids.shape[0] + + # ---- Compound-axis indices (tiny) ---- + drug_mask_cmpd = np.array([s.startswith("drug") for s in all_compound_ids], dtype=bool) + if not drug_mask_cmpd.any(): + raise ValueError("No 'drug_*' compounds present in compound_ids") + drug_cols_idx = np.where(drug_mask_cmpd)[0] + drug0_search = np.where(all_compound_ids == 'drug_0')[0] + if drug0_search.size == 0: + raise ValueError("'drug_0' not found in compound_ids") + drug0_idx = int(drug0_search[0]) + + # ---- Stream the score matrix in protein chunks, writing significant_interactions + # incrementally and accumulating per-protein summary stats. Avoids both the + # full score matrix load and the giant in-memory above-threshold DataFrame. ---- + # Per chunk peak ≈ CHUNK_PROTEINS * n_compounds * 4 bytes; for 1000×38k ≈ 150 MB. + CHUNK_PROTEINS = 1000 + drug_position = np.zeros(n_proteins, dtype=np.int64) + drug_0_col_full = np.empty(n_proteins, dtype=np.float32) + prot_count = defaultdict(int) # protein_id -> count of above-threshold compounds + prot_sum = defaultdict(float) # protein_id -> sum of above-threshold scores + + # Open significant_interactions.tsv before the loop (round 2 only); write rows per chunk. + sig_path = workdir / f'{name_out}_significant_interactions.tsv' + sig_writer = None + smile_dict = None + if round == 2: + test_smiles = pd.read_csv(workdir / 'smiles.smi', sep='\t', header=None) + smile_dict = dict(zip(test_smiles[1], test_smiles[0])) + sig_writer = open(sig_path, 'w') + sig_writer.write("drug/metabolite\tsmile\ttranscipt\tconplex_score\n") + + cursor = 0 + for group in zarr_groups: + scores_arr = group["scores"] + n_this = scores_arr.shape[0] + for start in range(0, n_this, CHUNK_PROTEINS): + end = min(start + CHUNK_PROTEINS, n_this) + chunk = np.asarray(scores_arr[start:end]) # (chunk_size, n_compounds) + global_start = cursor + start + global_end = cursor + end + chunk_size = end - start + + # drug score columns + max-per-protein for this chunk + chunk_max_drug = chunk[:, drug_cols_idx].max(axis=1) + + # drug_position[i] = # compounds with score strictly > max_drug_score_i. + # Matches production's stable-sort + first-drug-position convention. + drug_position[global_start:global_end] = (chunk > chunk_max_drug[:, None]).sum(axis=1) + + # drug_0 column + drug_0_col_full[global_start:global_end] = chunk[:, drug0_idx].astype(np.float32, copy=False) + + # Above-threshold rows for this chunk + pi_local, ci = np.where(chunk > threshold) + if pi_local.size: + scores_vec = chunk[pi_local, ci].astype(np.float32, copy=False) + + # Per-protein aggregates accumulated via bincount on local indices. + counts_local = np.bincount(pi_local, minlength=chunk_size) + sums_local = np.bincount(pi_local, weights=scores_vec.astype(np.float64), minlength=chunk_size) + for pi in np.flatnonzero(counts_local): + pid = all_protein_ids[global_start + pi] + prot_count[pid] += int(counts_local[pi]) + prot_sum[pid] += float(sums_local[pi]) + + # Write significant_interactions rows for this chunk directly to the file. + if sig_writer is not None: + compound_ids_vec = all_compound_ids[ci] + protein_ids_vec = all_protein_ids[global_start + pi_local] + smiles_vec = np.array( + [smile_dict.get(c, "UNKNOWN") for c in compound_ids_vec] + ) + pd.DataFrame({ + "drug/metabolite": compound_ids_vec, + "smile": smiles_vec, + "transcipt": protein_ids_vec, + "conplex_score": scores_vec, + }).to_csv(sig_writer, sep='\t', index=False, header=False) + cursor += n_this + + if sig_writer is not None: + sig_writer.close() + + drug_0_score = pd.DataFrame({ + "Drug": "drug_0", + "Transcript": all_protein_ids, + "Score": drug_0_col_full, + }) + + if round == 2: + drug_0_score.to_csv(workdir / f'{name_out}_drug_scores.tsv', sep='\t', index=False) + + # ---- Per-protein summary (only proteins with any above-threshold compound) ---- + drug_pos_map = dict(zip(all_protein_ids, drug_position)) + + if round == 1 and not prot_count: + # Equivalent to old "transcipts_summary.empty" early-out for round 1. + pd.DataFrame().to_csv(workdir / 'round_1.csv', index=False) + with open(workdir / 'round_1.fasta', 'w') as f: + f.write("all_data_is_filtered_out\n") + return 'STOP NO TRANSCIPTS ABOVE THRESHOLD' + + if prot_count: + proteins_with_above = list(prot_count.keys()) + # mean dtype kept as float32 to match the precision of the previous + # groupby-on-float32 path (CSV output is bit-identical that way). + means = np.array( + [prot_sum[p] / prot_count[p] for p in proteins_with_above], + dtype=np.float32, + ) + summary = pd.DataFrame({ + 'transcipt_name': proteins_with_above, + 'number_of_iteracting_compounds': [prot_count[p] for p in proteins_with_above], + 'mean_binding_above_threshold': means, + }) + else: + summary = pd.DataFrame(columns=[ + 'transcipt_name', 'number_of_iteracting_compounds', 'mean_binding_above_threshold' + ]) + summary['drug_position'] = summary['transcipt_name'].map(drug_pos_map) + + path_out = workdir / f'round_{round}.csv' + if len(summary) == 0: + with path_out.open("w") as f: + f.write("NO TRANSCIPTS ABOVE THRESHOLD") + return 'STOP NO TRANSCIPTS ABOVE THRESHOLD' + + summary['if_drug_above_threshold'] = ( + summary['number_of_iteracting_compounds'] > summary['drug_position'] + ) + + # MANE symbol lookup; strip mutated-protein "_2" suffix. + clean_transcript_names = [str(t).split('_')[0] for t in summary['transcipt_name']] + seq_lookup = seq_exist.set_index('transcipt')['symbol'] + summary['protein_name'] = [ + seq_lookup.get(t, "") for t in clean_transcript_names + ] + + summary.to_csv(path_out, index=False) + + # ---- Round 1 also writes the round-2 FASTA ---- + if round == 1: + name_2_filtered = list(summary['protein_name']) + transcipts_2 = list(chain.from_iterable( + list(seq_exist[seq_exist['symbol'] == sym]['transcipt']) + for sym in name_2_filtered + )) + transcipts_2 = list(np.unique(transcipts_2)) + existing = set(summary['transcipt_name']) + transcipts_2 = [t for t in transcipts_2 if t not in existing] + + fasta_new = [] + for t in transcipts_2: + row = seq_exist[seq_exist['transcipt'] == t] + if not row.empty: + fasta_new.append(f">{t}") + fasta_new.append(row['seq'].iloc[0]) + + with open(workdir / 'round_2.fasta', 'w') as f: + for line in fasta_new: + f.write(f"{line}\n") + + print(f"Round {round} processing complete.") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Process and screen fragments.") + parser.add_argument("--threshold", required=True, type=float, + help="Threshold for 1. round of conplex scores") + parser.add_argument("--workdir", required=True, type=Path, help="workdir") + parser.add_argument("--round", required=True, type=int, help="Round 1 or 2") + parser.add_argument("--drug-csv", required=True, type=Path, + help="csv file with drug smiles") + args = parser.parse_args() + + get_round_2(args.threshold, args.workdir, args.round, args.drug_csv) diff --git a/nf_metabol_screen_adaptive/app/old_get_round_20.py b/nf_metabol_screen_adaptive/app/old_get_round_20.py new file mode 100644 index 0000000..f2de4c3 --- /dev/null +++ b/nf_metabol_screen_adaptive/app/old_get_round_20.py @@ -0,0 +1,143 @@ +import argparse +import pandas as pd +import numpy as np +from itertools import chain +from pathlib import PosixPath as Path + +seq_exist = pd.read_csv('/app/MANE_all_transcipts.csv') + +def get_round_2(threshold, workdir, round, drug_csv : Path): + workdir = Path(workdir) + + # Get output names + # Get patient fasta name + # fasta_files = list(workdir.glob('*_variants_transcript_id_mutations.fasta')) + # if not fasta_files: + # raise FileNotFoundError("No variants transcript mutations fasta file found") + # fasta_name = fasta_files[0].stem.replace('_variants_transcript_id_mutations', '') + fasta_name = "patient_0" + + # Get test drug + drug_name = drug_csv.stem + + name_out = f"{drug_name}_{fasta_name}" + + # Get all work dir complex files + results_files = list(workdir.glob('*_results.tsv')) + if not results_files: + raise FileNotFoundError("No results TSV files found") + + round_1_score_list = [str(f) for f in results_files] + + # Read 1st round + transcipts_1 = [ + pd.read_csv(i, sep='\t', header=None).sort_values([2], ascending=False) + for i in round_1_score_list + ] + + # Get position of drug interaction vs all metabolites + drug_pos = [ + [ + n + for n, j in enumerate(list(i[0])) + if j[:4] == 'drug' + ] + for i in transcipts_1 + ] + + # Drug score + drug_0_score = pd.concat([i[i[0] =='drug_0'] for i in transcipts_1]).rename({0:'Drug', 1:'Transcript', 2:'Score'}, axis=1) + + # Filter all below threshold + transcipts_1 = [i[i[2] > threshold] for i in transcipts_1] + + # Save transcript_complex above threshold to one file + if round == 2: + inter_import = pd.concat(transcipts_1, ignore_index=True).rename({0:'drug/metabolite',1:'transcipt',2:'conplex_score'},axis=1) + # Add drug + test_smiles = pd.read_csv(workdir / 'smiles.smi', sep='\t', header=None) + smi_ = [test_smiles[test_smiles[1] == i].iloc[0][0] for i in list(inter_import['drug/metabolite'])] + inter_import['smile'] = smi_ + inter_import[['drug/metabolite','smile','transcipt','conplex_score']].to_csv( + workdir / f'{name_out}_significant_interactions.tsv', sep='\t', index=False + ) + drug_0_score.to_csv(workdir / f'{name_out}_drug_scores.tsv', sep='\t', index=False) + + transcipts_1 = pd.DataFrame([ + (Path(j).stem.replace('_results', ''), i.shape[0], i[2].mean(), k[0]) + for i, j, k in zip(transcipts_1, round_1_score_list, drug_pos) + if i.shape[0] != 0 + ]) + + # Check if any interaction is above threshold for first round + if round == 1: + if transcipts_1.shape == (0,0): + transcipts_1.to_csv(workdir / 'round_1.csv', index=False) + with open(workdir / 'round_1.fasta', 'w') as f: + f.write("all_data_is_filtered_out\n") + return 'STOP NO TRANSCIPTS ABOVE THRESHOLD' + + transcipts_1 = transcipts_1.rename({ + 0:'transcipt_name', + 1:'number_of_iteracting_compounds', + 2:'mean_binding_above_threshold', + 3:'drug_position' + }, axis='columns') + + path_out = workdir / f'round_{round}.csv' + + if len(transcipts_1) == 0: + with path_out.open("w") as f: + f.write("NO TRANSCIPTS ABOVE THRESHOLD") + return 'STOP NO TRANSCIPTS ABOVE THRESHOLD' + + + transcipts_1['if_drug_above_threshold'] = transcipts_1.iloc[:,1] > transcipts_1.iloc[:,3] + + # If protein is mutated it has _2 in name, removes it + transcipt_names = [i.split('_')[0] for i in list(transcipts_1['transcipt_name'])] + temp = [ + seq_exist[seq_exist['transcipt'] == i] + for i in transcipt_names + ] + transcipts_1['protein_name'] =[ + i.iloc[0]['symbol'] if len(i) > 0 else "" + for i in temp + ] + + # Save data on first round + transcipts_1.to_csv(path_out, index=False) + + # Get fasta for second round + if round == 1: + # Get all transcripts of proteins above threshold + name_2_filttered = list(transcipts_1['protein_name']) + transcipts_2 = [list(seq_exist[seq_exist['symbol'] == i]['transcipt']) for i in name_2_filttered] + transcipts_2 = list(chain(*transcipts_2)) + transcipts_2 = list(np.unique((transcipts_2))) + + # Filter out transcripts already ran through complex + transcipts_2 = list(np.array(transcipts_2)[ + [i not in list(transcipts_1['transcipt_name']) for i in transcipts_2] + ]) + + fasta_new = [ + ['>'+i, seq_exist[seq_exist['transcipt'] == i]['seq'].iloc[0]] + for i in transcipts_2 + ] + fasta_new = list(chain(*fasta_new)) + + # Write fasta to run + with open(workdir / 'round_2.fasta', 'w') as f: + for line in fasta_new: + f.write(f"{line}\n") + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Process and screen fragments.") + parser.add_argument("--threshold", required=True, type=float, help="Threshold for 1. round.of conplex scores") + parser.add_argument("--workdir", required=True, type=Path, help="workdir") + parser.add_argument("--round", required=True, type=int, help="Round 1 or 2") + parser.add_argument("--drug-csv", required=True, type=Path, help="csv file with drug smiles") + args = parser.parse_args() + + get_round_2(args.threshold, args.workdir, args.round, args.drug_csv) \ No newline at end of file diff --git a/nf_metabol_screen_adaptive/app/old_screen.py b/nf_metabol_screen_adaptive/app/old_screen.py new file mode 100644 index 0000000..7f95f8e --- /dev/null +++ b/nf_metabol_screen_adaptive/app/old_screen.py @@ -0,0 +1,127 @@ +# Custom Rust modules +import mol_fingerprint as mf +import bitexpand + +import pandas as pd +import numpy as np +from pathlib import Path +from argparse import ArgumentParser + +import zarr +from zarr.storage import LocalStore + +from sklearn.preprocessing import normalize +from parallelbar import progress_map + +import onnxruntime as ort +print('CUDA available:', 'CUDAExecutionProvider' in ort.get_available_providers()) + + + +def parse_args(): + parser = ArgumentParser() + parser.add_argument("-i","--input-tsv", type=Path, required=True, help="Input TSV file with molecules to screen. It must not have any labels and has only two columns, 1st molecule_label, 2nd molecule_smiles") + parser.add_argument("-z","--zarr-protein", type=Path, required=True, help="Input Zarr DB that holds the protein ids and their normalized projection vectors") + return parser + +parser = parse_args() + +args = parser.parse_args() + +# path_fp_basedir : Path = args.input_dir +# my_id :int = args.chunk_id + +path_metabolites : Path = args.input_tsv +if not path_metabolites.is_file(): + raise ValueError(f"{path_metabolites} IS MISSING OR NOT A FILE") + +df_metabolite = pd.read_csv( + path_metabolites, + sep="\t", + header=None, + names=["smiles" ,"compound_id"] +) + +path_zarr = args.zarr_protein +store_zarr = LocalStore(path_zarr , read_only=True) +group_zarr = zarr.open(store_zarr, mode="r") +protein_vecs = (group_zarr["normalized"][:]) + + +path_onnx = Path("/app/drug_projector.onnx") + +def load_model(model_path): + """Load ONNX model with GPU support""" + model_path = Path(model_path) + + # Set up providers for GPU execution + # providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] + providers = ['CPUExecutionProvider'] + + # Create inference session + session = ort.InferenceSession(str(model_path), providers=providers) + + # Verify GPU is being used + print(f"Available providers: {session.get_providers()}") + + return session + +session = load_model(path_onnx) + +def run_inference(input_vector): + """Run inference on the model""" + # Get input/output names + input_name = session.get_inputs()[0].name + output_name = session.get_outputs()[0].name + + # Ensure input is the correct shape and type + # if input_vector.shape != (2048,): + # raise ValueError(f"Input shape should be (2048,), got {input_vector.shape}") + + # Add batch dimension if needed + input_data = input_vector + + # Run inference + outputs = session.run([output_name], {input_name: input_data}) + + # Return the output vector (remove batch dimension) + return outputs[0] + +def normalize_vectors_sklearn(vectors): + """Normalize using sklearn - often fastest for large arrays""" + return normalize(vectors, norm='l2', axis=1) + +def project_drugs(smiles : list[str]) -> np.ndarray : + fps = bitexpand.expand_bits(np.array([ + np.frombuffer(fp,dtype=np.uint8) + for fp in mf.generate_fingerprints(smiles) + ])) + return normalize_vectors_sklearn(run_inference(fps)) + +pvecs = project_drugs(df_metabolite["smiles"].values.tolist()) + +my_results = np.dot(protein_vecs,pvecs.T) + +pids = group_zarr["ids"][:] + +path_outdir = Path("./") +def write_protein(i : int): + df_out = df_metabolite[["compound_id"]].copy() + df_out["protein_id"] = pids[i] + df_out["score"] = my_results[i] + # df_out["protein_sequence"] = group_zarr["sequences"][i] + path_out = path_outdir / f"{pids[i]}_results.tsv" + + df_out.to_csv( + path_out, + sep="\t", + index=False, + header=False + ) + +tasks = list(range(my_results.shape[0])) +progress_map( + write_protein, tasks +) + +print("PROCESS COMPLETED SUCCESSFULLY") diff --git a/nf_metabol_screen_adaptive/app/screen.py b/nf_metabol_screen_adaptive/app/screen.py new file mode 100644 index 0000000..139424b --- /dev/null +++ b/nf_metabol_screen_adaptive/app/screen.py @@ -0,0 +1,144 @@ +# Custom Rust modules +import mol_fingerprint as mf +import bitexpand + +import pandas as pd +import numpy as np +from pathlib import Path +from argparse import ArgumentParser + +import zarr +from zarr.storage import LocalStore +from zarr.codecs import ZstdCodec + +from sklearn.preprocessing import normalize +from parallelbar import progress_map + +import onnxruntime as ort +print('CUDA available:', 'CUDAExecutionProvider' in ort.get_available_providers()) + + +def parse_args(): + parser = ArgumentParser() + parser.add_argument("-i","--input-tsv", type=Path, required=True, help="Input TSV file with molecules to screen. It must not have any labels and has only two columns, 1st molecule_label, 2nd molecule_smiles") + parser.add_argument("-z","--zarr-protein", type=Path, required=True, help="Input Zarr DB that holds the protein ids and their normalized projection vectors") + return parser + +parser = parse_args() +args = parser.parse_args() + +path_metabolites : Path = args.input_tsv +if not path_metabolites.is_file(): + raise ValueError(f"{path_metabolites} IS MISSING OR NOT A FILE") + +df_metabolite = pd.read_csv( + path_metabolites, + sep="\t", + header=None, + names=["smiles" ,"compound_id"] +) + +path_zarr = args.zarr_protein +store_zarr = LocalStore(path_zarr, read_only=True) +group_zarr = zarr.open(store_zarr, mode="r") +protein_vecs = (group_zarr["normalized"][:]) + + +path_onnx = Path("/app/drug_projector.onnx") + +def load_model(model_path): + """Load ONNX model with GPU support""" + model_path = Path(model_path) + + # Set up providers for GPU execution + # providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] + providers = ['CPUExecutionProvider'] + + # Create inference session + session = ort.InferenceSession(str(model_path), providers=providers) + + # Verify GPU is being used + print(f"Available providers: {session.get_providers()}") + + return session + +session = load_model(path_onnx) + +def run_inference(input_vector): + """Run inference on the model""" + # Get input/output names + input_name = session.get_inputs()[0].name + output_name = session.get_outputs()[0].name + + # Run inference + outputs = session.run([output_name], {input_name: input_vector}) + + return outputs[0] + +def normalize_vectors_sklearn(vectors): + """Normalize using sklearn - often fastest for large arrays""" + return normalize(vectors, norm='l2', axis=1) + +def project_drugs(smiles : list[str]) -> np.ndarray : + fps = bitexpand.expand_bits(np.array([ + np.frombuffer(fp,dtype=np.uint8) + for fp in mf.generate_fingerprints(smiles) + ])) + return normalize_vectors_sklearn(run_inference(fps)) + +pvecs = project_drugs(df_metabolite["smiles"].values.tolist()) + +my_results = np.dot(protein_vecs, pvecs.T) + +pids = group_zarr["ids"][:] + +# Create output zarr store +path_outdir = Path("./") +zarr_name = path_zarr.stem + "_results.zarr" +path_output_zarr = path_outdir / zarr_name + +# Create zarr store +store_output = LocalStore(path_output_zarr, read_only=False) +group_output = zarr.open(store_output, mode="w") + +out_compress =[ + ZstdCodec( level=13 ) +] + +# Store the data +# Similarity matrix: (n_proteins, n_compounds) +z1 = group_output.create_array( + "scores", + dtype="float32", + shape=my_results.shape, + chunks=(min(1000, my_results.shape[0]), my_results.shape[1]), + compressors=out_compress +) +z1[:] = my_results + +# Compound IDs +z2 = group_output.create_array( + "compound_ids", + dtype="str", + shape=(len(df_metabolite),), + compressors=out_compress +) +z2[:] = df_metabolite["compound_id"].values + +# Protein IDs +z3 = group_output.create_array( + "protein_ids", + dtype="str", + shape=(len(pids),), + compressors=out_compress +) +z3[:] = pids + +# Store metadata +group_output.attrs['n_proteins'] = my_results.shape[0] +group_output.attrs['n_compounds'] = my_results.shape[1] +group_output.attrs['source_zarr'] = str(path_zarr) + +print(f"Results saved to {path_output_zarr}") +print(f"Shape: {my_results.shape[0]} proteins x {my_results.shape[1]} compounds") +print("PROCESS COMPLETED SUCCESSFULLY") \ No newline at end of file diff --git a/nf_metabol_screen_adaptive/docker-compose.yml b/nf_metabol_screen_adaptive/docker-compose.yml new file mode 100644 index 0000000..e8080bb --- /dev/null +++ b/nf_metabol_screen_adaptive/docker-compose.yml @@ -0,0 +1,14 @@ +version: '3.8' + +services: + metabolite-screen: + build: + context: . + dockerfile: Dockerfile + image: harbor.cluster.omic.ai/omic/metabolite-screen:adaptive-1.1.1 + command: bash + stdin_open: true + tty: true + volumes: + - /mnt/dreamdock-data/digital_trials/workdir/52/6cdef3797446aec540843481dae1ca:/workdir + - /mnt/dreamdock-data/digital_trials:/mnt/dreamdock-data/digital_trials diff --git a/nf_metabol_screen_adaptive/execution_timeline.html b/nf_metabol_screen_adaptive/execution_timeline.html new file mode 100644 index 0000000..47bf342 --- /dev/null +++ b/nf_metabol_screen_adaptive/execution_timeline.html @@ -0,0 +1,223 @@ + + + + + + + + + + + + + +

+ + + + + + + diff --git a/nf_metabol_screen_adaptive/execution_trace.txt b/nf_metabol_screen_adaptive/execution_trace.txt new file mode 100644 index 0000000..d5fa949 --- /dev/null +++ b/nf_metabol_screen_adaptive/execution_trace.txt @@ -0,0 +1,2 @@ +task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar +1 f9/21c381 3902375 METABOLITE_SCREEN FAILED 127 2025-07-21 03:07:11.554 35ms 18ms - - - - - diff --git a/nf_metabol_screen_adaptive/main.nf b/nf_metabol_screen_adaptive/main.nf new file mode 100644 index 0000000..7fe2e87 --- /dev/null +++ b/nf_metabol_screen_adaptive/main.nf @@ -0,0 +1,24 @@ +#!/usr/bin/env nextflow + +process METABOLITE_SCREEN { + + memory '10 GB' + + container "harbor.cluster.omic.ai/omic/metabolite-screen:adaptive" + // containerOptions "--rm --gpus all" + + // errorStrategy 'ignore' + + input: + path input_tsv // TSV file with the smiles + path input_zarr // ZARR DB holding all the protein vectors and their names + + output: + path "*_result.tsv" + + script: + """ + set -e + python /app/screen.py -i ${input_tsv} -z ${input_zarr} + """ +} diff --git a/nf_metabol_screen_adaptive/nextflow.config b/nf_metabol_screen_adaptive/nextflow.config new file mode 100644 index 0000000..c912c79 --- /dev/null +++ b/nf_metabol_screen_adaptive/nextflow.config @@ -0,0 +1,113 @@ +// Nextflow configuration file + +// Execution report +report { + enabled = true + file = "execution_report.html" + overwrite = true} + + +// Resource usage tracking +trace { + enabled = true + file = "execution_trace.txt" + overwrite = true +} + +// Error reporting +timeline { + enabled = true + file = "execution_timeline.html" + overwrite = true +} + +// // Max resources +// executor { +// $local { +// memory = '80 GB' +// cpus = 2 +// } +// } + +// Default parameters (overridden by test.nf) +params { + // Set defaults here + // input = '/mnt/ZINC-22/conplex/total.zarr' + nshards = 12 + outdir = "$launchDir" +} + +profiles { + k8s { + process.executor = 'k8s' + process.namespace = 'bioinformatics' + process.debug = true + + workDir = "/workdir/work" + + k8s { + serviceAccount = 'nextflow-sa' + namespace = 'bioinformatics' + storageClaimName = 'conplex-data' + storageMountPath = '/workdir' + + pullPolicy = 'IfNotPresent' + cleanup = true // delete pods after Ctrl+C or finished? + + + // RUN AS DIFFERENT USERS + // securityContext = [fsGroup: 1000] + // securityContext = [ + // runAsUser: 1000, + // fsGroup: 1000, + // runAsNonRoot: true + // ] + } + + // Use container image + // process.container = 'harbor.cluster.omic.ai/omic/faiss-indexer:latest' + + // Pod-level customization + process.pod = [ + [env: 'NXF_DEBUG', value: '0'], + [label: 'omic-app', value: 'conplex'], + [imagePullSecret: 'gitlab-registry-secret'], + [volumeClaim: 'fingerprint-data', mountPath: '/fingerprint-data'] + //[nodeSelector: [gpu: 'yes', 'kubernetes.io/hostname': 'k8s-node25']], + // [privileged: true], + ] + + // process { + // withName: 'trainIndex' { + // container = 'harbor.cluster.omic.ai/omic/conplex-faiss-train:latest' + // accelerator = 1 + // memory = '75 GB' + // cpus = 1 + + // // GPU-specific pod settings + // pod = [ + // [nodeSelector: [gpu: 'yes']] + // ] + // } + + // // Specific settings for addToIndex process (CPU only) + // withName: 'addToIndex' { + // container = 'harbor.cluster.omic.ai/omic/conplex-faiss-add:latest' + // memory = '75 GB' + // cpus = 1 + + // // Explicitly ensure no GPU requirements + // // No accelerator property set, and no GPU nodeSelector + // } + // } + } + + docker { + // Docker/Singularity configuration + docker { + enabled = true + runOptions = '--rm' + } + } +} + diff --git a/nf_metabol_screen_adaptive/test.nf b/nf_metabol_screen_adaptive/test.nf new file mode 100644 index 0000000..82e2d23 --- /dev/null +++ b/nf_metabol_screen_adaptive/test.nf @@ -0,0 +1,17 @@ +#!/usr/bin/env nextflow + +// params.input_tsv = '../sample/in-molecule/test_known_drugs.tsv' //metabolites.tsv' +params.input_tsv = '../sample/in-molecule/metabolites-rev.tsv' //metabolites.tsv' +params.input_zarr = '../data/protein_seq.zarr' //mane_all.zarr' + +// Include the buildFaissIndex workflow from main.nf +include { METABOLITE_SCREEN } from './main.nf' + +workflow { + + input_tsv = file(params.input_tsv) + input_zarr = file(params.input_zarr) + + // Call the combined workflow with both inputs + protein_scores = METABOLITE_SCREEN(input_tsv, input_zarr) +} diff --git a/params.json b/params.json new file mode 100644 index 0000000..49b74cc --- /dev/null +++ b/params.json @@ -0,0 +1,192 @@ +{ + "params": { + "// GENERAL PARAMETERS": {}, + "outdir": { + "type": "folder", + "description": "Output directory for results", + "default": "/mnt/OmicNAS/private/old/gabe/digital_trials", + "required": true, + "pipeline_io": "output", + "var_name": "params.outdir", + "examples": [ + "/mnt/OmicNAS/private/old/gabe/digital_trials", + "/path/to/custom/output" + ], + "pattern": ".*", + "validation": {}, + "notes": "Directory where all pipeline results will be stored" + }, + "project_name": { + "type": "string", + "description": "Project identifier", + "default": "test", + "required": true, + "pipeline_io": "parameter", + "var_name": "params.project_name", + "examples": [ + "test", + "production", + "drug_metabolism_study" + ], + "pattern": ".*", + "validation": {}, + "notes": "Identifier for the digital trials project" + }, + "containerOptions": { + "type": "string", + "description": "Container runtime options", + "default": "--gpus all --rm -v /mnt:/mnt", + "required": false, + "pipeline_io": "parameter", + "var_name": "params.containerOptions", + "examples": [ + "--gpus all --rm -v /mnt:/mnt", + "--rm -v /data:/data" + ], + "pattern": ".*", + "validation": {}, + "notes": "Docker container runtime options for GPU usage and volume mounts" + }, + "// BIOTRANSFORMER PARAMETERS": {}, + "container_biotransformer": { + "type": "string", + "description": "BioTransformer container image", + "default": "biotransformer:latest", + "required": true, + "pipeline_io": "parameter", + "var_name": "params.container_biotransformer", + "examples": [ + "biotransformer:latest", + "biotransformer:v1.0" + ], + "pattern": ".*", + "validation": {}, + "notes": "Docker container image for BioTransformer module" + }, + "ligands": { + "type": "folder", + "description": "Path to input ligands directory", + "default": "/Workspace/next/registry/pipelines/digital_trials/input", + "required": true, + "pipeline_io": "input", + "var_name": "params.ligands", + "examples": [ + "/Workspace/next/registry/pipelines/digital_trials/input", + "/path/to/ligands" + ], + "pattern": ".*", + "validation": {}, + "notes": "Directory containing CSV files with ligand data for metabolic transformation" + }, + "mode": { + "type": "string", + "description": "BioTransformer operation mode", + "default": "HUMAN", + "required": true, + "pipeline_io": "parameter", + "var_name": "params.mode", + "examples": [ + "HUMAN", + "SUPER", + "MASS", + "ORDERED" + ], + "pattern": "^(HUMAN|SUPER|MASS|ORDERED)$", + "enum": [ + "HUMAN", + "SUPER", + "MASS", + "ORDERED" + ], + "validation": {}, + "notes": "IMPORTANT: Use HUMAN mode as it's the only fully implemented option that returns expected metabolism to the last step" + }, + "// CONPLEX PARAMETERS": {}, + "container_conplex": { + "type": "string", + "description": "CONPLEX container image", + "default": "conplex_dig_pat:latest", + "required": true, + "pipeline_io": "parameter", + "var_name": "params.container_conplex", + "examples": [ + "conplex_dig_pat:latest", + "conplex_dig_pat:v1.0" + ], + "pattern": ".*", + "validation": {}, + "notes": "Docker container image for CONPLEX module" + }, + "mutated_protein_fasta": { + "type": "folder", + "description": "Path to mutated protein FASTA files directory", + "default": "/Workspace/next/registry/pipelines/digital_trials/input", + "required": true, + "pipeline_io": "input", + "var_name": "params.mutated_protein_fasta", + "examples": [ + "/Workspace/next/registry/pipelines/digital_trials/input", + "/path/to/protein/fasta/files" + ], + "pattern": ".*", + "validation": {}, + "notes": "Directory containing FASTA files with mutated protein sequences" + }, + "threshold": { + "type": "number", + "description": "Binding affinity threshold for interactions", + "default": 0.7, + "required": false, + "pipeline_io": "parameter", + "var_name": "params.threshold", + "examples": [ + 0.5, + 0.7, + 0.9 + ], + "pattern": "^\\d+(\\.\\d+)?$", + "validation": { + "min": 0.0, + "max": 1.0 + }, + "notes": "Threshold value for determining significant binding interactions" + }, + "screening_batch_size": { + "type": "integer", + "description": "Batch size for virtual screening", + "default": 100000, + "required": false, + "pipeline_io": "parameter", + "var_name": "params.screening_batch_size", + "examples": [ + 10000, + 100000, + 1000000 + ], + "pattern": "^\\d+$", + "validation": { + "min": 1 + }, + "notes": "Batch size for virtual screening (100k is ideal to optimize performance)" + }, + "protein_network_threshold": { + "type": "number", + "description": "Threshold for protein network analysis", + "default": 0.95, + "required": false, + "pipeline_io": "parameter", + "var_name": "params.protein_network_threshold", + "examples": [ + 0.9, + 0.95, + 0.99 + ], + "pattern": "^\\d+(\\.\\d+)?$", + "validation": { + "min": 0.0, + "max": 1.0 + }, + "notes": "Threshold value for protein-protein interaction network construction" + } + } +} diff --git a/params/input_knowen_target.json b/params/input_knowen_target.json new file mode 100644 index 0000000..6b8bf89 --- /dev/null +++ b/params/input_knowen_target.json @@ -0,0 +1,19 @@ +{ + "container_biotransformer": "harbor.cluster.omic.ai/omic/digitaltrials/biotransformer@sha256:fb8bdc0b65376bc154b6051ae07079dd9a0e25c3f4c02de73c502002a94d69d5", + "container_conplex": "harbor.cluster.omic.ai/omic/digitaltrials/conplex_dig_pat@sha256:7a3523dba6fa01e3adc9cb79af5e1dcbd2a19d9f92e37cd10df462766078ede3", + "container_tissue": "harbor.cluster.omic.ai/omic/digitaltrials/tissue:1.0.2", + "container_preprocess": "harbor.cluster.omic.ai/omic/metabolite-screen@sha256:872c395e21abd4afea4185b269a8218da4737bd7adbb2cbe2bdf9a1b9c70db17", + "container_mass_screen": "harbor.cluster.omic.ai/omic/metabolite-screen:adaptive-1.1.1", + "container_chembl": "harbor.cluster.omic.ai/omic/digitaltrials/chembl:1.0.0", + "containerOptions": "--rm", + "project_name": "test2", + "mode": "HUMAN", + "keep_enst": false, + "threshold": 0.65, + "protein_network_threshold": 0.65, + "outdir": "/mnt/dreamdock-data/digital_trials/output/test2", + "ligands": "/mnt/dreamdock-data/digital_trials/input/input_knowen_target", + "mutated_protein_fasta": "/mnt/dreamdock-data/digital_trials/input/blank", + "protein_zarr": "/mnt/dreamdock-data/digital_trials/zarr/protein_seq.zarr", + "chembl_db": "/mnt/dreamdock-data/digital_trials/chembl/chembl_36.db" +} diff --git a/params/input_to_run.json b/params/input_to_run.json new file mode 100644 index 0000000..0efb3e0 --- /dev/null +++ b/params/input_to_run.json @@ -0,0 +1,19 @@ +{ + "container_biotransformer": "harbor.cluster.omic.ai/omic/digitaltrials/biotransformer@sha256:fb8bdc0b65376bc154b6051ae07079dd9a0e25c3f4c02de73c502002a94d69d5", + "container_conplex": "harbor.cluster.omic.ai/omic/digitaltrials/conplex_dig_pat@sha256:7a3523dba6fa01e3adc9cb79af5e1dcbd2a19d9f92e37cd10df462766078ede3", + "container_tissue": "harbor.cluster.omic.ai/omic/digitaltrials/tissue:1.0.2", + "container_preprocess": "harbor.cluster.omic.ai/omic/metabolite-screen@sha256:872c395e21abd4afea4185b269a8218da4737bd7adbb2cbe2bdf9a1b9c70db17", + "container_mass_screen": "harbor.cluster.omic.ai/omic/metabolite-screen@sha256:89fe2221ff6c1e67d20294944f97418f2665d95b9fb873eba9e1fcf3dc6d1ea7", + "container_chembl": "harbor.cluster.omic.ai/omic/digitaltrials/chembl:1.0.0", + "containerOptions": "--rm", + "mode": "HUMAN", + "keep_enst": false, + "threshold": 0.65, + "protein_network_threshold": 0.65, + "project_name": "input_to_run", + "outdir": "/mnt/dreamdock-data/digital_trials/output", + "ligands": "/mnt/dreamdock-data/digital_trials/input/input_to_run", + "mutated_protein_fasta": "/mnt/dreamdock-data/digital_trials/input/blank", + "protein_zarr": "/mnt/dreamdock-data/digital_trials/zarr/protein_seq.zarr", + "chembl_db": "/mnt/dreamdock-data/digital_trials/chembl/chembl_36.db" +} diff --git a/test.nf.bk b/test.nf.bk new file mode 100755 index 0000000..456f794 --- /dev/null +++ b/test.nf.bk @@ -0,0 +1,61 @@ +nextflow.enable.dsl=2 + +//BIOTRANSFORMER +params.container_biotransformer = 'biotransformer:latest' +params.containerOptions = '--gpus all --rm -v /mnt:/mnt' +params.outdir = '/mnt/OmicNAS/private/old/gabe/digital_trials' +params.project_name = 'test' +params.ligands = '/Workspace/next/registry/pipelines/digital_trials/input' + +//IMPOTRANT!!! use HUMAN. Only one that returns what is expected. metabolism to the last step. It's only one properly set up +params.mode = 'HUMAN' // Options: SUPER, HUMAN, MASS, ORDERED # only HUMAN is fully implemented + +//CONPLEX +params.container_conplex = 'conplex_dig_pat:latest' +params.mutated_protein_fasta = '/Workspace/next/registry/pipelines/digital_trials/input' +params.threshold = 0.8 //0.5 //0.7 +params.screening_batch_size =100000 //100k is ideal to optimize performance with virtual screening +params.protein_network_threshold = 0.95 + +//TISSUE DISTRIBUTION +params.container_tissue = 'tissue:latest' + +//BIOTRANSFORMER +include { SUPER_TRANSFORMER } from './main_biotransformer.nf' +include { HUMAN_TRANSFORMER } from './main_biotransformer.nf' +include { METABOLITES_BY_MASS } from './main_biotransformer.nf' +include { ORDERED_SEQUENCE } from './main_biotransformer.nf' +include { GET_FINAL_METABOLITES } from './main_biotransformer.nf' +//CONPLEX +include { CONPLEX } from './main_conplex.nf' +include { NETWORK_ENRICHMENT } from './main_conplex.nf' +//TISSUE_DISTRIBUTION +include { TISSUE_DISTRIBUTION } from './main_tissue.nf' + +workflow { + //BIOTRANSFORMER + lig_ch = Channel.fromPath("${params.ligands}/*.csv") + switch (params.mode) { + case 'SUPER': + SUPER_TRANSFORMER(lig_ch) + break + case 'HUMAN': + HUMAN_TRANSFORMER(lig_ch) + break + case 'MASS': + METABOLITES_BY_MASS(lig_ch) + break + case 'ORDERED': + ORDERED_SEQUENCE(lig_ch) + break + default: + println("Invalid mode specified: ${params.mode}") + } + GET_FINAL_METABOLITES(HUMAN_TRANSFORMER.out) + //CONPLEX + pat_fasta = Channel.fromPath("${params.mutated_protein_fasta}/*.fasta") + CONPLEX(lig_ch, GET_FINAL_METABOLITES.out, pat_fasta) + NETWORK_ENRICHMENT(CONPLEX.out.interactions) + //TISSUE DISTRIBUTION + TISSUE_DISTRIBUTION(CONPLEX.out.interactions) +} diff --git a/test.nf.save b/test.nf.save new file mode 100755 index 0000000..a7a05ff --- /dev/null +++ b/test.nf.save @@ -0,0 +1,49 @@ +nextflow.enable.dsl=2 + +//BIOTRANSFORMER +params.container_biotransformer = 'biotransformer:latest' +params.containerOptions = '--gpus all --rm -v /mnt:/mnt' +params.outdir = '/mnt/OmicNAS/private/old/gabe/digital_trials' +params.project_name = 'test' +params.ligands = '/Workspace/next/registry/pipelines/digital_trials/input' + +//IMPOTRANT!!! use HUMAN. Only one that returns what is expected. metabolism to the last step. It's only one properly set up +params.mode = 'HUMAN' // Options: SUPER, HUMAN, MASS, ORDERED # only HUMAN is fully implemented + +//CONPLEX +params.container_conplex= 'conplex_dig_pat' +params.mutated_protein_fasta = '/Workspace/next/registry/pipelines/digital_trials/input/*.fasta' +params.threshold = 0.2 //0.75 +params.screening_batch_size =100000 //100k is ideal to optimize performance with virtual screening + +//BIOTRANSFORMER +include { SUPER_TRANSFORMER } from './main_biotransformer.nf' +include { HUMAN_TRANSFORMER } from './main_biotransformer.nf' +include { METABOLITES_BY_MASS } from './main_biotransformer.nf' +include { ORDERED_SEQUENCE } from './main_biotransformer.nf' +include { GET_FINAL_METABOLITES } from './main_biotransformer.nf' +//CONPLEX +include { CONPLEX } from './main_conplex.nf' + +workflow { + //BIOTRANSFORMER + lig_ch = Channel.fromPath("${params.ligands}/*.csv") + switch (params.mode) { + case 'SUPER': + SUPER_TRANSFORMER(lig_ch) + break + case 'HUMAN': + HUMAN_TRANSFORMER(lig_ch) + break + case 'MASS': + METABOLITES_BY_MASS(lig_ch) + break + case 'ORDERED': + ORDERED_SEQUENCE(lig_ch) + break + default: + println("Invalid mode specified: ${params.mode}") + } + GET_FINAL_METABOLITES(HUMAN_TRANSFORMER.out) + //CONPLEX +} diff --git a/test_bio_metrics_only.nf b/test_bio_metrics_only.nf new file mode 100644 index 0000000..b5f924e --- /dev/null +++ b/test_bio_metrics_only.nf @@ -0,0 +1,33 @@ +nextflow.enable.dsl=2 + +// Default parameters (override via -params-file). Listed here to document every +// parameter this workflow needs. Values copied from a representative job +// (R06-ivan-gabe-bioprops-rerun/J17-bioprops/params.json). +params.container_biotransformer = "harbor.cluster.omic.ai/omic/digitaltrials/biotransformer@sha256:fb8bdc0b65376bc154b6051ae07079dd9a0e25c3f4c02de73c502002a94d69d5" +params.container_conplex = "harbor.cluster.omic.ai/omic/digitaltrials/conplex_dig_pat@sha256:7a3523dba6fa01e3adc9cb79af5e1dcbd2a19d9f92e37cd10df462766078ede3" +params.container_tissue = "harbor.cluster.omic.ai/omic/digitaltrials/tissue:1.1.0" +params.container_preprocess = "harbor.cluster.omic.ai/omic/metabolite-screen@sha256:872c395e21abd4afea4185b269a8218da4737bd7adbb2cbe2bdf9a1b9c70db17" +params.container_mass_screen = "harbor.cluster.omic.ai/omic/metabolite-screen:adaptive-1.1.1" +params.container_chembl = "harbor.cluster.omic.ai/omic/digitaltrials/chembl:1.0.0" +params.containerOptions = "--rm" +params.project_name = "bioprops-gabe-run-drug-target" +params.outdir = "/mnt/dreamdock-data/digital_trials/runs/R06-ivan-gabe-bioprops-rerun/J17-bioprops/output" +params.ligands = "/mnt/dreamdock-data/digital_trials/input/gabe-run/input/ligand-drug-target" +params.metabolites = "/mnt/dreamdock-data/digital_trials/input/gabe-run/output/drug-target/screening" +params.conplex_dir = "/mnt/dreamdock-data/digital_trials/input/gabe-run/output/drug-target/conplex" + +include { BIO_METRICS } from './main_tissue.nf' + +workflow { + lig_ch = Channel.fromPath("${params.ligands}/*.csv") + .map { [it.simpleName, it] } + met_ch = Channel.fromPath("${params.metabolites}/*_out.txt") + .map { f -> [f.simpleName.replaceAll(/_out$/, ''), f] } + drug_ch = Channel.fromPath("${params.conplex_dir}/*_patient_0_drug_scores.tsv") + .map { f -> [f.simpleName.replaceAll(/_patient_0_drug_scores$/, ''), f] } + int_ch = Channel.fromPath("${params.conplex_dir}/*_patient_0_significant_interactions.tsv") + .map { f -> [f.simpleName.replaceAll(/_patient_0_significant_interactions$/, ''), f] } + + biometric_ch = lig_ch.join(met_ch).join(drug_ch).join(int_ch) + BIO_METRICS(biometric_ch) +} diff --git a/test_no_bt.nf b/test_no_bt.nf new file mode 100644 index 0000000..e506d4b --- /dev/null +++ b/test_no_bt.nf @@ -0,0 +1,93 @@ +nextflow.enable.dsl=2 + +// Digital-trials pipeline WITHOUT biotransformer. +// Metabolites are supplied externally (e.g. the consolidated final-metabolites +// dir from prior gabe runs). Otherwise identical to test.nf. +// +// New required param vs test.nf: +// params.metabolites - dir of `_out.txt` files matching ligand `.csv` +// Dropped (no biotransformer/chembl): +// container_biotransformer, container_chembl, bt_* knobs, chembl_db, mode + +params.container_conplex = 'harbor.cluster.omic.ai/omic/digitaltrials/conplex_dig_pat@sha256:7a3523dba6fa01e3adc9cb79af5e1dcbd2a19d9f92e37cd10df462766078ede3' +params.container_tissue = 'harbor.cluster.omic.ai/omic/digitaltrials/tissue:1.0.6' +params.container_preprocess = 'harbor.cluster.omic.ai/omic/metabolite-screen@sha256:872c395e21abd4afea4185b269a8218da4737bd7adbb2cbe2bdf9a1b9c70db17' +params.container_mass_screen = 'harbor.cluster.omic.ai/omic/metabolite-screen:adaptive-1.1.1' + +params.containerOptions = '--rm' + +params.project_name = 'test_no_bt' + +//CONPLEX +params.keep_enst = 'false' +params.conplex_initial_memory = 5 +params.conplex_growth_memory = 15 +params.conplex_max_retries = 1 +params.conplex_fail_action = 'ignore' +params.threshold = 0.65 +params.protein_network_threshold = 0.65 + +// NETWORK_ENRICHMENT (string-db) +params.string_max_forks = 5 +params.string_max_retries = 1 +params.string_fail_action = 'ignore' +params.string_initial_memory = 1 +params.string_growth_memory = 2 + +// TISSUE_DISTRIBUTION + BIO_METRICS +params.tissue_initial_memory = 5 +params.tissue_growth_memory = 5 +params.tissue_max_retries = 2 +params.tissue_fail_action = 'ignore' + +params.bio_initial_memory = 5 +params.bio_growth_memory = 5 +params.bio_max_retries = 2 +params.bio_fail_action = 'ignore' + +// ========================================= FILEPATHS =================================================== +params.outdir = '/mnt/omic-next-apis/wes/digital_trials/' +params.ligands = '/mnt/dreamdock-data/digital_trials/input/test_multitaget' +params.metabolites = '/mnt/dreamdock-data/digital_trials/input/test_metabolites' +params.mutated_protein_fasta = '/mnt/dreamdock-data/digital_trials/input/blank' +params.protein_zarr = '/mnt/dreamdock-data/digital_trials/zarr/protein_seq.zarr' +// ===================================================================================================================================== + +include { CONPLEX as CONPLEX_ALL } from './main_conplex.nf' +include { PREPROCESS_PROTEIN } from './main_conplex.nf' +include { NETWORK_ENRICHMENT } from './main_conplex.nf' +include { TISSUE_DISTRIBUTION } from './main_tissue.nf' +include { BIO_METRICS } from './main_tissue.nf' + +workflow { + lig_ch = Channel.fromPath("${params.ligands}/*.csv") + metabolite_ch = Channel.fromPath("${params.metabolites}/*_out.txt") + + protein_fasta = Channel + .fromPath("${params.mutated_protein_fasta}/*.fasta") + .collect() + protein_zarr = PREPROCESS_PROTEIN(protein_fasta).collect().map { it[0] } + pre_protein_zarr = Channel.fromPath(params.protein_zarr) + merged_zarr = protein_zarr.concat(pre_protein_zarr).collect() + + lig_with_id = lig_ch.map { csv -> + [csv.simpleName, csv] + } + + metabolite_with_id = metabolite_ch.map { txt -> + def name = txt.simpleName.replaceAll(/_out$/, '') + [name, txt] + } + + matched_ch = lig_with_id.join(metabolite_with_id) + + CONPLEX_ALL(matched_ch, merged_zarr) + + conplex_interactions_ch = CONPLEX_ALL.out.map { id, drug, interactions -> interactions } + + NETWORK_ENRICHMENT(conplex_interactions_ch) + TISSUE_DISTRIBUTION(conplex_interactions_ch) + + biometric_ch = matched_ch.join(CONPLEX_ALL.out) + BIO_METRICS(biometric_ch) +} diff --git a/test_string_only.nf b/test_string_only.nf new file mode 100644 index 0000000..baea617 --- /dev/null +++ b/test_string_only.nf @@ -0,0 +1,27 @@ +nextflow.enable.dsl=2 + +// STRING-only re-run workflow +// Feeds existing ConPLex significant_interactions files into NETWORK_ENRICHMENT +// +// Required params: +// interactions - directory containing *_significant_interactions.tsv files +// interaction_ids - comma-separated InChIKey prefixes to select (e.g. "PWKSKIMOESPYIA_SCSAIBSYSA_N,ZETLRLRYANUSAI_SCSAIBSYSA_N") +// if empty/not set, all files in the directory are used + +params.protein_network_threshold = 0.65 + +include { NETWORK_ENRICHMENT } from './main_conplex.nf' + +workflow { + if (params.interaction_ids) { + // Build a channel from the explicit list of IDs + ids = params.interaction_ids.tokenize(',') + interactions_ch = Channel + .fromList(ids) + .map { id -> file("${params.interactions}/${id}_patient_0_significant_interactions.tsv") } + } else { + interactions_ch = Channel.fromPath("${params.interactions}/*_significant_interactions.tsv") + } + + NETWORK_ENRICHMENT(interactions_ch) +}

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