1
1
version 1.0
2
2
import "ScoringPart.wdl" as Score
3
- import "CKDRiskAdjustment.wdl" as CKDRiskAdjustment
3
+ import "CKDRiskAdjustment.wdl" as CKDRiskAdjustmentWF
4
4
import "Structs.wdl"
5
5
6
6
workflow PRSWrapper {
@@ -37,22 +37,28 @@ workflow PRSWrapper {
37
37
}
38
38
39
39
if (condition_resource .named_weight_set .condition_name == "ckd" ) {
40
- call CKDRiskAdjustment .CKDRiskAdjustment {
40
+ call CKDRiskAdjustmentWF .CKDRiskAdjustment {
41
41
input :
42
42
adjustedScores = select_first ([ScoringImputedDataset .adjusted_array_scores ]),
43
43
vcf = vcf ,
44
44
risk_alleles = ckd_risk_alleles
45
45
}
46
46
}
47
47
48
+ call CheckZScoreAgainstReportableRange {
49
+ input :
50
+ score_result = select_first ([ScoringImputedDataset .adjusted_array_scores ]),
51
+ z_score_reportable_range = z_score_reportable_range
52
+ }
48
53
49
54
call SelectValuesOfInterest {
50
55
input :
51
56
score_result = select_first ([CKDRiskAdjustment .adjusted_scores_with_apol1 , ScoringImputedDataset .adjusted_array_scores ]),
52
57
sample_id = sample_id ,
53
58
condition_name = condition_resource .named_weight_set .condition_name ,
54
59
threshold = condition_resource .percentile_threshold ,
55
- z_score_reportable_range = z_score_reportable_range
60
+ z_score_reportable_range = z_score_reportable_range ,
61
+ out_of_reportable_range = CheckZScoreAgainstReportableRange .out_of_reportable_range
56
62
}
57
63
}
58
64
@@ -94,12 +100,44 @@ workflow PRSWrapper {
94
100
}
95
101
96
102
103
+ task CheckZScoreAgainstReportableRange {
104
+ input {
105
+ File score_result
106
+ Float z_score_reportable_range
107
+ }
108
+
109
+ command <<<
110
+ Rscript - << - "EOF "
111
+ library(dplyr)
112
+ library(readr)
113
+ score <- read_tsv("~{score_result}")
114
+ if (nrow(score) != 1) {
115
+ quit(status=1)
116
+ }
117
+
118
+ adjusted_score <- (score %>% pull(adjusted_score))[[1]]
119
+ write(abs(adjusted_score) > ~{z_score_reportable_range}, "out_of_reportable_range.bool")
120
+ EOF
121
+ >>>
122
+
123
+ runtime {
124
+ docker: "rocker/tidyverse@sha256:aaace6c41a258e13da76881f0b282932377680618fcd5d121583f9455305e727"
125
+ disks: "local-disk 100 HDD"
126
+ memory: "4 GB"
127
+ }
128
+
129
+ output {
130
+ Boolean out_of_reportable_range = read_boolean("out_of_reportable_range.bool")
131
+ }
132
+ }
133
+
97
134
task SelectValuesOfInterest {
98
135
input {
99
136
File score_result
100
137
String sample_id
101
138
String condition_name
102
139
Float threshold
140
+ Boolean out_of_reportable_range
103
141
Float z_score_reportable_range
104
142
}
105
143
@@ -120,24 +158,21 @@ task SelectValuesOfInterest {
120
158
percentile <- (score %>% pull(percentile))[[1]]
121
159
risk <- ifelse(percentile > ~{threshold}, "HIGH", "NOT_HIGH")
122
160
123
- raw_score_output <- ifelse(abs(adjusted_score) > ~{z_score_reportable_range}, "NOT_RESULTED", raw_score)
124
- adjusted_score_output <- ifelse(abs(adjusted_score) > ~{z_score_reportable_range}, "NOT_RESULTED", adjusted_score)
125
- percentile_output <- ifelse(abs(adjusted_score) > ~{z_score_reportable_range}, "NOT_RESULTED", percentile)
126
- risk_output <- ifelse(abs(adjusted_score) > ~{z_score_reportable_range}, "NOT_RESULTED", risk)
127
- reason_not_resulted <- ifelse(abs(adjusted_score) > ~{z_score_reportable_range},
128
- ifelse(adjusted_score > 0, paste("Z-SCORE ABOVE + ", ~{z_score_reportable_range}),
129
- paste("Z-SCORE BELOW - ", ~{z_score_reportable_range})
130
- ),
161
+ raw_score_output <- ~{if out_of_reportable_range then '"NOT_RESULTED"' else 'raw_score'}
162
+ adjusted_score_output <- ~{if out_of_reportable_range then '"NOT_RESULTED"' else 'adjusted_score'}
163
+ percentile_output <- ~{if out_of_reportable_range then '"NOT_RESULTED"' else 'percentile'}
164
+ risk_output <- ~{if out_of_reportable_range then '"NOT_RESULTED"' else 'risk'}
165
+ reason_not_resulted <- ~{if out_of_reportable_range then
166
+ 'ifelse(adjusted_score > 0, "Z-SCORE ABOVE + ' + z_score_reportable_range +'", "Z-SCORE BELOW - ' + z_score_reportable_range +'")' else
131
167
"NA"
132
- )
168
+ }
133
169
134
170
result <- tibble(sample_id = "~{sample_id}", ~{condition_name}_raw = raw_score_output,
135
171
~{condition_name}_adjusted = adjusted_score_output,
136
172
~{condition_name}_percentile = percentile_output,
137
173
~{condition_name}_risk = risk_output,
138
174
~{condition_name}_reason_not_resulted = reason_not_resulted)
139
175
write_csv(result, "results.csv")
140
-
141
176
EOF
142
177
>>>
143
178
0 commit comments