-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaction.nf
More file actions
187 lines (136 loc) · 7.13 KB
/
action.nf
File metadata and controls
187 lines (136 loc) · 7.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#!/usr/bin/env nextflow
nextflow.enable.dsl=2
project_dir = projectDir
////////////////////////////////////////////////////
/* -- Functions -- */
////////////////////////////////////////////////////+
def helpMessage() {
log.info """
Usage:
The typical command for running the pipeline is as follows:
nextflow run action.nf
--output dir/of/choice
--mtblmcs_values Synthetic_data/synthetic_metabolomics.csv
--maf_files Synthetic_data/
--epigenomics_values Synthetic_data/synthetic_epigenomics.csv
--epigenomics_meta Synthetic_data/synthetic_epigenomics_meta.csv
--behavioral_data Synthetic_data/synthetic_cbcl_data.csv
--phenotype_covariates Synthetic_data/synthetic_phenotype_covariates_data.csv
--cbcl_labels Synthetic_data/cbcl_labels.csv
--ids Synthetic_data/ACTIONdemonstrator_XOmics_IDS_synthetic.csv
Optional arguments:
--container_dir The directory where the required Singularity (.sif files) images are stored
--mtblmcs_normalizaton_type Normalization of metabolomics is by default done using creatinine (`cr`). Set to 'sg' for normalization by specific gravity.
--cbcl_imputation_method Behavioral data (CBCL) is imputed by default with random forests (`RF`). Set to 'MCA' for imputation with MCA.
--convergence_mode Argument to convergence mode while training MOFA model :"fast", "medium", "slow"
--seed Random seed to train MOFA model
--feature_subset_cutoff Percentage of features to select for analysis (for big dataframes). Features with highest standard deviation are selected
--scale_epigenomics Scale the epigenomics beta values by mean centering and dividing columns by standard deviation
--gee Test associations between -omics data and phenotypic data with Generalized Estimated Equations (GEE) with twin correction (for NTR cohort)
"""
}
////////////////////////////////////////////////////
/* -- Input data files -- */
////////////////////////////////////////////////////+
mtblmcs_values = Channel.fromPath("${params.mtblmcs_values}")
maf_files = Channel.fromPath("${params.maf_files}/*_MAF.tsv")
phenotype_covariates = Channel.fromPath("${params.phenotype_covariates}")
behavioral_data = Channel.fromPath("${params.behavioral_data}")
cbcl_labels = Channel.fromPath("${params.cbcl_labels}")
epigenomics_values = Channel.fromPath("${params.epigenomics_values}")
epigenomics_meta = Channel.fromPath("${params.epigenomics_meta}")
epigenomics_MOESM1 = Channel.fromPath("EPIC_annotation/raw/13059_2016_1066_MOESM1_ESM.csv")
epigenomics_MOESM4 = Channel.fromPath("EPIC_annotation/raw/13059_2016_1066_MOESM4_ESM.csv")
epigenomics_MOESM5 = Channel.fromPath("EPIC_annotation/raw/13059_2016_1066_MOESM5_ESM.csv")
methylationEPIC = Channel.fromPath("EPIC_annotation/raw/MethylationEPIC_v-1-0_B4.csv")
epic_annotation = Channel.fromPath("EPIC_annotation/anno_epic_072017.RData")
ids = Channel.fromPath("${params.ids}")
////////////////////////////////////////////////////
/* -- Modules -- */
////////////////////////////////////////////////////+
include { METABOLOMICS_FILTERING; METABOLOMICS_NORMALIZATION; METABOLOMICS_SCALING } from './modules/metabolomics_preprocessing'
include { CONCATENATE_METABOLOMICS } from './modules/metabolomics_preprocessing'
include { EPIGENOMICS_ANNOTATION; EPIGENOMICS_FILTERING; EPIGENOMICS_IMPUTATION; SUBSET_SD; EPIGENOMICS_COVARIATES; EPIGENOMICS_SCALING } from './modules/epigenetics_preprocessing'
include { CBCL_FILTER_IMPUTE_MCA } from './modules/CBCL_MCA'
include { MAP_IDS } from './modules/map_IDs'
include { HEATMAP_MISSINGNESS } from './modules/heatmap_missingness'
include { PCA } from './modules/pca'
include { SNF; SNF_ANALYSIS; SNF_GEE } from './modules/snf'
include { MOFA; MOFA_ANALYSIS; MOFA_ANALYSIS_WITH_GEE } from './modules/mofa'
////////////////////////////////////////////////////
/* -- Functions -- */
////////////////////////////////////////////////////+
def group_mapped_omics(omics1, omics2) {
omics_list = omics1
.join(omics2)
omics_list = omics_list.collect()
return(omics_list.minus([1]))
}
////////////////////////////////////////////////////
/* -- Workflow -- */
////////////////////////////////////////////////////+
workflow {
// Show help message
if (params.help) {
helpMessage()
exit 0
}
////////////////
// SUBWORKFLOW 1: Metabolomics data pre-processing
////////////////
METABOLOMICS_FILTERING(maf_files, params.missingness_cutoff)
METABOLOMICS_NORMALIZATION(METABOLOMICS_FILTERING.out[1].flatten(), mtblmcs_values.toList(), params.mtblmcs_normalization_type)
METABOLOMICS_SCALING(METABOLOMICS_NORMALIZATION.out.flatten())
CONCATENATE_METABOLOMICS(METABOLOMICS_SCALING.out.collect())
////////////////
// SUBWORKFLOW 2: Epigenomics data pre-processing
////////////////
EPIGENOMICS_ANNOTATION(epigenomics_MOESM1, epigenomics_MOESM4, epigenomics_MOESM5, methylationEPIC, epic_annotation)
EPIGENOMICS_FILTERING(epigenomics_values, EPIGENOMICS_ANNOTATION.out)
EPIGENOMICS_IMPUTATION(EPIGENOMICS_FILTERING.out)
EPIGENOMICS_COVARIATES(EPIGENOMICS_IMPUTATION.out, epigenomics_meta)
SUBSET_SD(EPIGENOMICS_COVARIATES.out, params.feature_subset_cutoff)
EPIGENOMICS_SCALING(SUBSET_SD.out)
////////////////
// SUBWORKFLOW 3: Behavior data imputation and MCA
////////////////
CBCL_FILTER_IMPUTE_MCA(behavioral_data, cbcl_labels)
////////////////
// SUBWORKFLOW 4: Map omics data on sample IDs
////////////////
MAP_IDS(SUBSET_SD.out, CONCATENATE_METABOLOMICS.out, ids)
////////////////
// SUBWORKFLOW 5: Splitting csv file in chunks for lower memory usage
////////////////
//chunksize = Channel.value(10000)
// EPIGENOMICS_SPLIT_CHUNKS(epigenomics_values_head, chunksize)
// EPIGENOMICS_FILTERING(EPIGENOMICS_SPLIT_CHUNKS.out.flatten(), epigenomics_annotation.out.toList())
// CONCATENATE_EPI_CHUNKS(EPIGENOMICS_FILTERING.out.toList())
////////////////
// SUBWORKFLOW 6: Create heatmap of missingness (unprocessed data)
////////////////
HEATMAP_MISSINGNESS(mtblmcs_values, epigenomics_values, epigenomics_meta, behavioral_data, phenotype_covariates)
////////////////
// SUBWORKFLOW 7: Principal Component Analysis
////////////////
PCA(CONCATENATE_METABOLOMICS.out, SUBSET_SD.out, epigenomics_meta, CBCL_FILTER_IMPUTE_MCA.out[2], ids)
////////////////
// SUBWORKFLOW 8: Multi-omics Factor Analysis
////////////////
omics_list = group_mapped_omics(MAP_IDS.out[0], MAP_IDS.out[1])
MOFA(omics_list, params.seed, params.convergence_mode)
if (params.gee) {
MOFA_ANALYSIS_WITH_GEE(MOFA.out, phenotype_covariates, CBCL_FILTER_IMPUTE_MCA.out[3], EPIGENOMICS_ANNOTATION.out)
}
if (!params.gee) {
MOFA_ANALYSIS(MOFA.out, phenotype_covariates, CBCL_FILTER_IMPUTE_MCA.out[3], EPIGENOMICS_ANNOTATION.out)
}
////////////////
// SUBWORKFLOW 9: Similarity Network Fusion
////////////////
SNF(omics_list)
SNF_ANALYSIS(SNF.out, phenotype_covariates, CBCL_FILTER_IMPUTE_MCA.out[3], params.output)
if (params.gee) {
SNF_GEE(SNF_ANALYSIS.out[1])
}
}