forked from yueqiw/shiny_cell_browser
-
Notifications
You must be signed in to change notification settings - Fork 0
/
config_verifier.r
126 lines (117 loc) · 4.52 KB
/
config_verifier.r
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
#!/usr/bin/Rscript
cat("Loading R libraries...");
suppressMessages({
library(tidyverse);
library(Seurat);
library(rjson);
});
cat(" done\n");
configFileName <-
if(length(commandArgs(TRUE)) > 0){
commandArgs(TRUE)[1];
} else {
"./config.json";
};
dataSetsToCheck <- if(length(commandArgs(TRUE)) > 1){
commandArgs(TRUE)[2];
} else {
"";
};
#Start to read in the config file.
json_file <- rjson::fromJSON(file = configFileName);
json_data <- json_file$data;
datasets <- 1:length(json_data);
dataset_names <- sapply(json_data, function(x) x$name);
dataset_selector <- as.list(c(datasets));
names(dataset_selector) <- c(dataset_names);
if(dataSetsToCheck == ""){
dataSetsToCheck <- dataset_names;
}
errorStates <- list();
for(dPos in datasets){
dsObj <- json_data[[dPos]];
dName <- dsObj$name;
if(!(dName %in% dataSetsToCheck)){
next;
}
cat("\n",dName,":\n", sep="");
errorStates[[dName]] <- NULL;
#print(str(dsObj));
if(!file.exists(sub("data/", "", sub("^/app/", "", dsObj$file)))){
cat(sprintf(" - Seurat file existence... FAILED - '%s' not found!\n", dsObj$file));
errorStates[[dName]] <- c(errorStates[[dName]], "FileCheck");
next;
} else {
cat(" - Seurat file existence... PASSED!\n");
}
seuratObj <- NULL;
cat(" - Seurat object loading... ");
try({
seuratObj <- readRDS(sub("data/", "", sub("^/app/", "", dsObj$file)));
});
if(class(seuratObj) == "Seurat"){
cat("PASSED!\n");
} else {
cat(sprintf("FAILED - loaded class is '%s'!\n", class(seuratObj)));
errorStates[[dName]] <- c(errorStates[[dName]], "LoadCheck");
next;
}
if(prod(dim(LayerData(seuratObj, "counts"))) > 0){
cat(" - Gene counts object existence... PASSED!\n");
} else {
cat(sprintf(" - Gene counts... FAILED - no count data found!\n"));
errorStates[[dName]] <- c(errorStates[[dName]], "GeneCounts");
}
if(dsObj$embedding %in% names(seuratObj)){
cat(" - UMAP embedding... PASSED!\n");
} else {
cat(sprintf(" - UMAP embedding... FAILED - embedding '%s' not found in Seurat object!\n", dsObj$embedding));
errorStates[[dName]] <- c(errorStates[[dName]], "UMAPEmbedding");
}
seuratMeta <- [email protected];
if(dsObj$cluster %in% names(seuratMeta)){
cat(" - Cluster definition... PASSED!\n");
} else {
cat(sprintf(" - Cluster definition... FAILED - cluster classification '%s' not found in Seurat object metadata!\n", dsObj$cluster));
errorStates[[dName]] <- c(errorStates[[dName]], "ClusterDef");
}
if(dsObj$condition %in% names(seuratMeta)){
cat(" - Condition definition... PASSED!\n");
} else {
cat(sprintf(" - Condition definition... FAILED - condition '%s' not found in Seurat object metadata!\n", dsObj$condition));
errorStates[[dName]] <- c(errorStates[[dName]], "ConditionDef");
}
if(("diff_ex_file" %in% names(dsObj))){
deFile <- sub("data/", "", sub("^/app/", "", dsObj$diff_ex_file));
if(!file.exists(deFile)){
cat(sprintf(" - DE file... FAILED - file '%s' not found!\n", deFile));
errorStates[[dName]] <- c(errorStates[[dName]], "DEFileNotFound");
} else {
cat(" - DE file... PASSED!\n");
}
}
if(("diff_ex_cluster_file" %in% names(dsObj))){
deFile <- sub("data/", "", sub("^/app/", "", dsObj$diff_ex_cluster_file));
if(!file.exists(deFile)){
cat(sprintf(" - DE cluster file... FAILED - file '%s' not found!\n", deFile));
errorStates[[dName]] <- c(errorStates[[dName]], "DEClusterFileNotFound");
} else {
cat(" - DE cluster file... PASSED!\n");
}
}
}
if((length(errorStates) > 0) && (sum(sapply(errorStates, length)) > 0)){
cat("\n\nSummarising errors:\n");
} else {
cat("\n\nAll done, no errors found! [please complain to David Eccles <[email protected]> if there are actually errors]\n");
}
for(dName in names(errorStates)){
if(length(errorStates[[dName]]) > 0){
cat(" ", dName, ":", paste(errorStates[[dName]], collapse=";"), sep="");
}
}
if((length(errorStates) > 0) && (sum(sapply(errorStates, length)) > 0)){
cat("\n\nTo rerun with only a single dataset, use the following syntax:\n");
cat(sprintf(" %s <config_file> '<dataset>'\n", "./config_verifier.r"));
cat(sprintf(" i.e. %s %s '%s'\n", "./config_verifier.r", configFileName, head(names(errorStates), 1)));
}