server.R 167 KB
Newer Older
stevenn's avatar
stevenn committed
1
shinyServer(function(input, output,session) {
2
  
svolant's avatar
svolant committed
3
4
  hide(id = "loading-content", anim = TRUE, animType = "fade",time=1.5)
  hide(id = "loading-content-bar", anim = TRUE, animType = "fade",time=1.5)
5
6
7
  ###                                               ###
  ####                    LOAD FILES ####
  ###                                               ###
stevenn's avatar
stevenn committed
8
  
9
10
  
  
stevenn's avatar
stevenn committed
11
12
  ## Create base for contrast
  rand = floor(runif(1,0,1e9))
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
13
  namesfile = tempfile(pattern = "BaseContrast", tmpdir = tempdir(), fileext = "")
stevenn's avatar
stevenn committed
14
  file.create(namesfile,showWarnings=FALSE)
15
  target = NULL
16
  
svolant's avatar
svolant committed
17
18
19
  ## JSON name for masque
  curdir  = getwd()
  json_name = tempfile(pattern = "file", tmpdir = paste(curdir,"www","masque","todo",sep= .Platform$file.sep),  fileext = ".json")
20
  
svolant's avatar
svolant committed
21
22
23
  ## Pass for MASQUE
  pass = gsub("file","",basename(file_path_sans_ext(json_name)))
  
svolant's avatar
svolant committed
24
  ## Popup messages
svolant's avatar
svolant committed
25
  observe(if(input$AddRegScatter) info("By adding the regression line, you will lose interactivity."))
26
  
27
  ## Reactive target
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
28
  values <- reactiveValues(TargetWorking = target,labeled=NULL,fastq_names_only=NULL,R1fastQ=NULL,R2fastQ=NULL,
svolant's avatar
svolant committed
29
                           json_name=json_name,num=0,pass=pass,login_email = NULL,is.valid =NULL,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
30
31
32
                           biom_masque = NULL,tree_masque=NULL, masque_key = NULL, count_table_masque = NULL, 
                           rdp_annot_masque = NULL, rdp_thres_masque = NULL,
                           paths_fastq_tmp=NULL,curdir=curdir, error_progress=FALSE)
33
  
stevenn's avatar
stevenn committed
34
  ## Counts file
stevenn's avatar
stevenn committed
35
  dataInputCounts <-reactive({ 
36
    
svolant's avatar
svolant committed
37
    data = NULL
stevenn's avatar
stevenn committed
38
    inFile <- input$fileCounts
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
39
40
    if (is.null(inFile) && is.null(values$count_table_masque)) return(NULL)
    #if (is.null(inFile)) return(NULL)
41
    
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
42
43
    if (!is.null(values$count_table_masque) && file.exists(values$count_table_masque)){
      tryCatch(read.csv(values$count_table_masque,sep="\t",header=TRUE,check.names=FALSE)->data,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
44
45
               #messageId="ErrorCounts",
               error=function(e) sendSweetAlert(session,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
46
47
48
49
50
                                                title = "Oops",
                                                text=paste("The count file can not be read in SHAMAN.\n \n",e),type ="error"))
    }
    else{
      tryCatch(read.csv(inFile$datapath,sep=input$sepcount,header=TRUE,check.names=FALSE)->data,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
51
52
               #messageId="ErrorCounts",
               error=function(e) sendSweetAlert(session,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
53
54
55
56
                                                title = "Oops",
                                                text=paste("Your file can not be read in SHAMAN.\n \n",e),type ="error"))
    }
    #print(data)
svolant's avatar
svolant committed
57
    if(!is.null(data)){
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
58
      colnames(data) = gsub("-",".",colnames(data))
svolant's avatar
svolant committed
59
60
      ## Rownames
      if(!TRUE%in%duplicated(data[,1])) rownames(data)=data[,1];data=data[,-1]
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
61
      try(round(data, 0)->data, silent=T)
svolant's avatar
svolant committed
62
    }
63
    
stevenn's avatar
stevenn committed
64
65
66
    return(as.data.frame(data))
  })
  
67
68
  
  
stevenn's avatar
stevenn committed
69
70
  ## Taxo File
  dataInputTaxo <-reactive({ 
stevenn's avatar
stevenn committed
71
    
stevenn's avatar
stevenn committed
72
    inFile <- input$fileTaxo
73
    
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
74
75
    if (is.null(inFile) && is.null(values$rdp_annot_masque)) return(NULL)
    #if (is.null(inFile)) return(NULL)
76
    
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
77
    if(input$TypeTaxo=="Table" && !is.null(inFile)) 
Stevenn Volant's avatar
Stevenn Volant committed
78
    {
svolant's avatar
svolant committed
79
      tryCatch(read.csv(inFile$datapath,sep=input$septaxo,header=TRUE)->data,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
80
81
               #messageId="ErrorTaxo",
               error=function(e) sendSweetAlert(session,
svolant's avatar
svolant committed
82
83
                                                title = "Oops",
                                                text=paste("Your file can not be read in SHAMAN.\n \n",e),type ="error"))
84
      
Stevenn Volant's avatar
Stevenn Volant committed
85
      ## Rownames
svolant's avatar
svolant committed
86
87
88
89
90
91
92
93
94
      if(!is.null(data))
      {
        if(!TRUE%in%duplicated(data[,1])){ 
          DataNames=data[,1]
          colNames=colnames(data)[-1]
          data=as.matrix(data[,-1])
          rownames(data)=DataNames
          colnames(data) = colNames
        }
95
      }
Stevenn Volant's avatar
Stevenn Volant committed
96
    }
stevenn's avatar
stevenn committed
97
    
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
98
    if(input$TypeTaxo=="RDP" && !is.null(inFile) || !is.null(values$rdp_annot_masque)) 
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
99
    {
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
100
101
      if (!is.null(values$rdp_annot_masque) && file.exists(values$rdp_annot_masque)){
        tryCatch(read_rdp(values$rdp_annot_masque,values$rdp_thres_masque)->data,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
102
103
                 #messageId="ErrorRDP",
                 error=function(e) sendSweetAlert(session,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
104
105
106
107
108
                                                  title = "Oops",
                                                  text=paste("The annotation file can not be read in SHAMAN.\n \n",e),type ="error"))
      }
      else{
        tryCatch(read_rdp(inFile$datapath,input$RDP_th)->data,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
109
110
                 #messageId="ErrorRDP",
                 error=function(e) sendSweetAlert(session,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
111
112
113
                                                  title = "Oops",
                                                  text=paste("Your file can not be read in SHAMAN.\n \n",e),type ="error"))
      }
svolant's avatar
svolant committed
114
      
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
115
    }
stevenn's avatar
stevenn committed
116
117
118
    
    ## Add NA
    data=as.matrix(data)
Stevenn Volant's avatar
Stevenn Volant committed
119
    indNa = which(data=="")
stevenn's avatar
stevenn committed
120
121
    data[indNa]=NA
    
stevenn's avatar
stevenn committed
122
    return(as.data.frame(data))
stevenn's avatar
stevenn committed
123
  })
124
125
  
  
stevenn's avatar
stevenn committed
126
127
  ## BIOM File
  dataInputBiom <-reactive({ 
stevenn's avatar
stevenn committed
128
    
svolant's avatar
svolant committed
129
    data = NULL
stevenn's avatar
stevenn committed
130
    inFile <- input$fileBiom
131
    
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
132
    if (!is.null(inFile) && is.null(values$biom_masque)){
svolant's avatar
svolant committed
133
      tryCatch(read_biom(inFile$datapath)->data,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
134
135
               #messageId="ErrorBiom1",
               error=function(e) sendSweetAlert(session,
svolant's avatar
svolant committed
136
137
                                                title = "Oops",
                                                text=paste("Your file can not be read in SHAMAN.\n \n",e),type ="error"))
138
139
      
    }
svolant's avatar
svolant committed
140
141
    if (!is.null(values$biom_masque) && file.exists(values$biom_masque)){ 
      tryCatch(read_biom(values$biom_masque)->data,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
142
143
               #messageId="ErrorBiom2",
               error=function(e) sendSweetAlert(session,
svolant's avatar
svolant committed
144
145
146
                                                title = "Oops",
                                                text=paste("Your file can not be read in SHAMAN.\n \n",e),type ="error"))
    }
stevenn's avatar
stevenn committed
147
    return(data)
stevenn's avatar
stevenn committed
148
  })
149
  
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
150
151
152
153
154
155
156
  observeEvent(input$fileCounts,{
    values$count_table_masque=NULL;
  })
  observeEvent(input$fileTaxo,{
    values$rdp_annot_masque=NULL;
    values$rdp_thres_masque=NULL;
  })
svolant's avatar
svolant committed
157
158
159
  observeEvent(input$fileBiom,{
    values$biom_masque=NULL;
  })
160
  
161
  
svolant's avatar
svolant committed
162
163
164
165
  ## Unifrac File (tree)
  dataInputTree <-reactive({ 
    
    data = NULL
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
166
167
    {inFile <- input$fileTree
    values$tree_masque}
168
    
svolant's avatar
svolant committed
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
    if (!is.null(inFile) && is.null(values$tree_masque)) {
      try(read.tree(inFile$datapath)->data, silent=T)
      CheckTree = CheckTreeFile(data)
      data = CheckTree$tree
      try(readLines(inFile$datapath)->treeseq, silent=T)
      return(list(data=data, Error=CheckTree$Error, Warning=CheckTree$Warning, treeseq=treeseq))
    }
    
    if (!is.null(values$tree_masque) && file.exists(values$tree_masque)) {
      try(read.tree(values$tree_masque)->data, silent=T)
      CheckTree = CheckTreeFile(data)
      data = CheckTree$tree
      try(readLines(values$tree_masque)->treeseq, silent=T)
      return(list(data=data, Error=CheckTree$Error, Warning=CheckTree$Warning, treeseq=treeseq))
    }
184
    
svolant's avatar
svolant committed
185
186
187
188
189
  })
  
  
  observeEvent(input$fileTree,{
    values$tree_masque=NULL;
svolant's avatar
svolant committed
190
191
192
193
194
  })
  
  
  # Infobox Tree (Unifrac)
  output$InfoTreePhylo_box <- renderInfoBox({
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
195
196
    {input$fileTree
     values$tree_masque}
svolant's avatar
svolant committed
197
198
    tree_tmp = isolate(dataInputTree())
    tree = tree_tmp$data
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
199

svolant's avatar
svolant committed
200
201
    res = infoBox(h6(strong("Phylogenetic tree")), subtitle = h6(strong("Load the phylogenetic tree (optional)")) ,color = "light-blue",width=NULL,fill=TRUE, icon = icon("upload"))
    if(!is.null(tree)){
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
202
      #if(!is.null(isolate(input$fileTree))){
svolant's avatar
svolant committed
203
204
205
206
207
208
209
        res = infoBox(h6(strong("Phylogenetic tree")), subtitle = h6("The phylogenetic has been loaded") ,color = "green",width=NULL,fill=TRUE, icon = icon("thumbs-o-up"))
        if(!is.null(tree_tmp$Warning)){      
          res = infoBox(h6(strong("Phylogenetic tree")), subtitle = h6(tree_tmp$Warning) ,color = "orange",width=NULL,fill=TRUE, icon = icon("warning"))
        }
        if(!is.null(tree_tmp$Error)){      
          res = infoBox(h6(strong("Phylogenetic tree")), subtitle = h6(tree_tmp$Error),color = "red",width=NULL,fill=TRUE, icon = icon("thumbs-o-down"))
        }
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
210
      #}
svolant's avatar
svolant committed
211
212
213
    } 
    return(res)
  })
214
  
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
  observe({
    val <- input$annotationKingdomthreshold
    # Control the value, min, max, and step.
    # Step size is 2 when input value is even; 1 when value is odd.
    updateSliderInput(session, "annotationPhylumthreshold", value = input$annotationPhylumthreshold,
                      min = val, max = 1, step = 0.005)
  })
  observe({
    val <- input$annotationPhylumthreshold[2]
    # Control the value, min, max, and step.
    # Step size is 2 when input value is even; 1 when value is odd.
    updateSliderInput(session, "annotationClassthreshold", value = input$annotationClassthreshold,
                      min = val, max = 1, step = 0.005)
  })
  observe({
    val <- input$annotationClassthreshold[2]
    # Control the value, min, max, and step.
    # Step size is 2 when input value is even; 1 when value is odd.
    updateSliderInput(session, "annotationOrderthreshold", value = input$annotationOrderthreshold,
                      min = val, max = 1, step = 0.005)
  })
  observe({
    val <- input$annotationOrderthreshold[2]
    # Control the value, min, max, and step.
    # Step size is 2 when input value is even; 1 when value is odd.
    updateSliderInput(session, "annotationFamilythreshold", value = input$annotationFamilythreshold,
                      min = val, max = 1, step = 0.005)
  })
  observe({
    val <- input$annotationFamilythreshold[2]
    # Control the value, min, max, and step.
    # Step size is 2 when input value is even; 1 when value is odd.
    updateSliderInput(session, "annotationGenusthreshold", value = input$annotationGenusthreshold,
                      min = val, max = 1, step = 0.005)
  })
  observe({
    val <- input$annotationGenusthreshold[2]
    # Control the value, min, max, and step.
    # Step size is 2 when input value is even; 1 when value is odd.
    updateSliderInput(session, "annotationSpeciethreshold", value = input$annotationSpeciethreshold,
                      min = val, max = 1, step = 0.005)
  })
stevenn's avatar
stevenn committed
257
258
  ## Input data
  dataInput <-reactive({ 
stevenn's avatar
stevenn committed
259
    
stevenn's avatar
stevenn committed
260
    data = NULL
Stevenn Volant's avatar
Stevenn Volant committed
261
262
    check = NULL
    percent = NULL
svolant's avatar
svolant committed
263
264
    Taxo = NULL
    Counts = NULL
svolant's avatar
svolant committed
265
    inputData = NULL
266
    target = NULL
svolant's avatar
svolant committed
267
    
stevenn's avatar
stevenn committed
268
    if(input$FileFormat=="fileCounts")
stevenn's avatar
stevenn committed
269
    {
stevenn's avatar
stevenn committed
270
      Counts = dataInputCounts()
svolant's avatar
svolant committed
271
272
273
      if(!input$NoTaxoFile) Taxo = dataInputTaxo()
      if(!is.null(Counts) && input$NoTaxoFile) {Taxo = data.frame(rownames(Counts),row.names = rownames(Counts));names(Taxo)=NA}
      
Stevenn Volant's avatar
Stevenn Volant committed
274
275
      if(!is.null(Counts) && !is.null(Taxo))
      { 
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
276
        tmp = GetDataFromCT(Counts,Taxo, ifelse(input$TypeTable=="MGS" && input$FileFormat!="fileBiom", TRUE, FALSE))
277
        data = list(counts=tmp$counts,taxo=tmp$taxo, taxo_biom=tmp$taxo_biom)
svolant's avatar
svolant committed
278
279
280
        ## Remove row with only O
        # data[["counts"]] = data[["counts"]][rowSums(data[["counts"]])>1,]
        
Stevenn Volant's avatar
Stevenn Volant committed
281
282
283
        check = list(CheckCounts=tmp$CheckCounts,CheckTaxo=tmp$CheckTaxo,CheckPercent=tmp$CheckPercent)
        percent = tmp$Percent
      }    
stevenn's avatar
stevenn committed
284
285
    }
    
stevenn's avatar
stevenn committed
286
    if(input$FileFormat=="fileBiom")
stevenn's avatar
stevenn committed
287
    {
stevenn's avatar
stevenn committed
288
      tmpBIOM = dataInputBiom()
Stevenn Volant's avatar
Stevenn Volant committed
289
290
291
      if(!is.null(tmpBIOM))
      {
        tmp = GetDataFromBIOM(tmpBIOM)
292
        data = list(counts=tmp$counts,taxo=tmp$taxo, target=tmp$target, taxo_biom=tmp$taxo_biom)
svolant's avatar
svolant committed
293
294
295
        ## Remove row with only O
        # data[["counts"]] = data[["counts"]][rowSums(data[["counts"]])>1,]
        
Stevenn Volant's avatar
Stevenn Volant committed
296
297
        check = list(CheckCounts=tmp$CheckCounts,CheckTaxo=tmp$CheckTaxo,CheckPercent=tmp$CheckPercent)
        percent = tmp$Percent
298
        #if(!is.null(data$target)) values$TargetWorking = data$target
Stevenn Volant's avatar
Stevenn Volant committed
299
      }
stevenn's avatar
stevenn committed
300
301
    }
    
svolant's avatar
svolant committed
302
    
303
304
305
306
307
308
309
310
311
312
313
    
    #     if(input$FileFormat=="fileRData")
    #     {
    #       inFile <- input$fileRData
    #       load(inFile)
    #       if(!is.null(inputData)){
    #         data = inputData$data
    #         check = inputData$check
    #         percent = inputData$percent
    #       }
    #     }
svolant's avatar
svolant committed
314
    
Stevenn Volant's avatar
Stevenn Volant committed
315
    return(list(data=data,check=check,percent=percent))
stevenn's avatar
stevenn committed
316
317
318
  })
  
  
319
320
321
322
323
324
325
  ## Size factor file (optional)
  dataSizeFactors <-reactive({ 
    
    inFile <- input$fileSizeFactors
    
    if (is.null(inFile)) return(NULL)
    
svolant's avatar
svolant committed
326
    tryCatch(read.csv(inFile$datapath,sep=input$sepsize,header=TRUE)->data,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
327
328
             #messageId="ErrorSizeFactor",
             error=function(e) sendSweetAlert(session,
svolant's avatar
svolant committed
329
330
                                              title = "Oops",
                                              text=paste("Your file can not be read in SHAMAN.\n \n",e),type ="error"))
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
    return(as.data.frame(data))
  })
  
  
  ## Size factor file (optional)
  SizeFactors_fromFile <-reactive({ 
    
    Error = NULL
    Check = TRUE
    
    data = dataSizeFactors()
    normFactors = dataMergeCounts()$normFactors
    
    if(!is.null(data)){
      ## Check the format
      
      tmp = as.numeric(data)
      names(tmp) = colnames(data)
      
      if(length(tmp)!=length(normFactors)){Error = "The number of samples is not the same than in the target file, size factors will be estimated"; Check = FALSE}
      if(!identical(names(tmp),names(normFactors))){Error = "The names are not the same or in the same order than in the target file, size factors will be estimated"; Check = FALSE}
352
      
353
354
355
356
357
358
359
360
361
362
363
      if(Check) normFactors = tmp
    }
    
    return(list(Check = Check,Error = Error,normFactors=normFactors))
  })
  
  
  
  
  
  
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
364
  ## Merge counts data
365
  dataMergeCounts <-reactive({
Stevenn Volant's avatar
Stevenn Volant committed
366
    input$RunDESeq
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
367
368
369
    
    counts = NULL
    CheckTarget = FALSE
370
    normFactors = NULL
Stevenn Volant's avatar
Stevenn Volant committed
371
    CT_noNorm = NULL
372
    CT_Norm = NULL
373
    ChTM = NULL
374
    ChMC = NULL
375
    data = isolate(dataInput()$data)
376
377
    target = isolate(values$TargetWorking)
    labeled= isolate(values$labeled)
378
    taxo = isolate(input$TaxoSelect)
379
    withProgress(
380
      if(!is.null(data$counts) && !is.null(data$taxo) && nrow(data$counts)>0 && nrow(data$taxo)>0 && !is.null(taxo) && taxo!="..." && !is.null(target)) 
381
      {
382
383
384
        design = GetDesign(isolate(input),target)
        ChTM = CheckTargetModel(input,target,labeled,data$counts)$Error
        if(!is.null(design) && is.null(ChTM))
385
        {
386
          tmp = isolate(GetCountsMerge(input,data,taxo,target,design))
387
388
389
          #ChMC = tmp$Error
          #if (!is.null(ChMC))
          #{
390
391
392
393
394
395
396
397
398
399
400
401
402
403
          counts = tmp$counts
          ## Filtering the counts
          if(isolate(input$AddFilter) && !is.null(isolate(input$SliderThSamp)) && !is.null(isolate(input$SliderThAb)))
          {
            ind.filter =Filtered_feature(counts,isolate(input$SliderThSamp),isolate(input$SliderThAb))$ind
            counts = counts[-ind.filter,]
          }
          CheckTarget = tmp$CheckTarget
          #target = tmp$target
          #labeled = tmp$labeled
          normFactors = tmp$normFactors
          ## OTU table, norm and no norm
          CT_noNorm = tmp$CT_noNorm
          CT_Norm = tmp$CT_Norm
404
          #}
405
        }
406
      }
407
408
      ,message="Merging the counts ...")
    return(list(counts=counts,CheckTarget=CheckTarget,normFactors=normFactors,CT_noNorm=CT_noNorm, CT_Norm=CT_Norm, Error = ChMC))
409
    #return(list(counts=counts,target=target,labeled=labeled,normFactors=normFactors,CT_noNorm=CT_noNorm))
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
410
  })
411
412
  
  
Stevenn Volant's avatar
Stevenn Volant committed
413
414
415
416
417
418
419
  # Infobox Error counts
  output$InfoErrorCounts <- renderInfoBox({
    
    tmp = dataInput()
    data = tmp$data
    check = tmp$check
    cond = (!is.null(data$counts) && nrow(data$counts)>0)
420
    res =infoBox(h6(strong("Count table")), subtitle = h6("Load the count table") ,color = "light-blue",width=NULL,fill=TRUE, icon = icon("upload"))
Stevenn Volant's avatar
Stevenn Volant committed
421
422
423
    
    if(cond)
    {
424
425
426
      if(!is.null(check$CheckCounts$Warning)) res = infoBox(h6(strong("Count table")), subtitle = h6(check$CheckCounts$Warning), icon = icon("warning"),color = "orange",width=NULL,fill=TRUE)
      if(!is.null(check$CheckCounts$Error)) res = infoBox(h6(strong("Count table")), subtitle = h6(check$CheckCounts$Error), icon = icon("thumbs-o-down"),color = "red",width=NULL,fill=TRUE)
      if(is.null(check$CheckCounts$Error) && is.null(check$CheckCounts$Warning)) res = infoBox(h6(strong("Count table")), subtitle = h6(paste("Format of the count table seems to be OK")), icon = icon("thumbs-o-up"),color = "green",width=NULL,fill=TRUE)
Stevenn Volant's avatar
Stevenn Volant committed
427
428
429
430
    }
    
    return(res)
  })
431
  
Stevenn Volant's avatar
Stevenn Volant committed
432
433
434
435
436
437
438
  # Infobox Error counts
  output$InfoErrorTaxo <- renderInfoBox({
    
    tmp = dataInput()
    data = tmp$data
    check = tmp$check
    cond = (!is.null(data$taxo) && nrow(data$taxo)>0)
svolant's avatar
svolant committed
439
    res = infoBox(h6(strong("Taxonomy table")), subtitle = h6("Load the taxonomy table") ,color = "light-blue",width=NULL,fill=TRUE, icon = icon("upload"))
Stevenn Volant's avatar
Stevenn Volant committed
440
441
442
443
444
445
446
447
    
    if(cond)
    {
      if(!is.null(check$CheckTaxo$Warning)) res = infoBox(h6(strong("Taxonomy table")), subtitle = h6(check$CheckTaxo$Warning), icon = icon("warning"),color = "orange",width=NULL,fill=TRUE)
      if(!is.null(check$CheckTaxo$Error)) res = infoBox(h6(strong("Taxonomy table")), subtitle = h6(check$CheckTaxo$Error), icon = icon("thumbs-o-down"),color = "red",width=NULL,fill=TRUE)
      if(is.null(check$CheckTaxo$Error) && is.null(check$CheckTaxo$Warning)) res = infoBox(h6(strong("Taxonomy table")), subtitle = h6(paste("Format of the taxonomy table seems to be OK")), icon = icon("thumbs-o-up"),color = "green",width=NULL,fill=TRUE)
    }
    
svolant's avatar
svolant committed
448
    if(input$NoTaxoFile && input$FileFormat=="fileCounts") res = infoBox(h6(strong("Taxonomy table")), subtitle = h6("No taxonomy table has been uploaded, the analysis can only be done at the OTU/gene level"), icon = icon("warning"),color = "orange",width=NULL,fill=TRUE)
Stevenn Volant's avatar
Stevenn Volant committed
449
450
    return(res)
  })
451
452
  
  
Stevenn Volant's avatar
Stevenn Volant committed
453
454
455
456
457
458
459
  # Infobox Error counts
  output$valueErrorPercent <- renderInfoBox({
    
    tmp = dataInput()
    data = tmp$data
    check = tmp$check
    cond = (!is.null(data$counts) && nrow(data$counts)>0 && !is.null(data$taxo) && nrow(data$taxo)>0)
460
    res = shinydashboard::valueBox(paste0(0, "%"),h6(strong("Annotated features")), color = "light-blue",width=NULL,icon = icon("list"))
461
    
Stevenn Volant's avatar
Stevenn Volant committed
462
463
464
    if(cond)
    {
      percent = round(100*tmp$percent,2)
465
466
      if(percent==0) res = shinydashboard::valueBox(paste0(percent, "%"),h6(strong("Annotated features")), color = "red",width=NULL,icon = icon("list"))  
      if(percent!=0) res = shinydashboard::valueBox(paste0(percent, "%"),h6(strong("Annotated features")), color = "green",width=NULL,icon = icon("list"))  
Stevenn Volant's avatar
Stevenn Volant committed
467
468
469
470
471
      
    }
    
    return(res)
  })
stevenn's avatar
stevenn committed
472
  
473
  
474
475
476
477
478
479
480
481
  ####### Filtering the counts (sliders)
  
  output$ThAb <- renderUI({
    input$AddFilter
    
    res = NULL
    counts = isolate(dataMergeCounts()$counts)
    tot = rowSums(counts)
482
    #save(counts,tot,file="testFilter.RData")
483
    withProgress({tmp = SelectThreshAb(counts,lambda=max(round(sum(counts)/nrow(counts)*0.05),min(tot)+1),graph=FALSE)},message="Loading...")
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
    
    res = sliderInput("SliderThAb","Threshold on the total abundance (in log)",min=0,max=round(max(log(tot+1)),1),value = log(tmp+1))
    return(res)
  })
  
  
  output$ThSamp <- renderUI({
    input$AddFilter
    
    res = NULL
    counts = isolate(dataMergeCounts()$counts)
    counts.bin = as.matrix(counts)
    counts.bin[which(counts>0)] = 1
    nbSampByFeat = rowSums(counts.bin)
    
    ## Default value
    val = round(max(nbSampByFeat)*0.2)
    
    res = sliderInput("SliderThSamp","Threshold on the minimal number of samples",min=0,max=max(nbSampByFeat),value = val)
    return(res)
  })
  
  
  ## Plot for the filtering step$
  
  # plot_filter(counts,th.samp,th.abund,type="Scatter")
  
511
  output$Plot_ThAb <- renderPlot({
512
513
514
515
516
    counts = dataMergeCounts()$counts
    ## output of plot_filter is ggplot class
    plot_filter(counts,input$SliderThSamp,input$SliderThAb,type="Abundance")
    
  })
517
  
518
  output$Plot_ThSamp <- renderPlot({
519
520
521
522
    counts = dataMergeCounts()$counts
    ## output of plot_filter is ggplot class
    plot_filter(counts,input$SliderThSamp,input$SliderThAb,type="Samples")
  })
523
  
524
525
526
527
528
  output$Plot_Scatter_Filter <- renderScatterD3({
    counts = dataMergeCounts()$counts
    ## output of plot_filter is ggplot class
    plot_filter(counts,input$SliderThSamp,input$SliderThAb,type="Scatter")
  })
529
  ###                                               ###
530
  ##
531
  ##                DYNAMIC MENU ####
532
  ##
533
  ###                                               ###
stevenn's avatar
stevenn committed
534
535
536
537
538
  
  
  
  output$dymMenu <- renderMenu({
    
Stevenn Volant's avatar
Stevenn Volant committed
539
540
541
    tmp = dataInput()
    data = tmp$data
    check = tmp$check
stevenn's avatar
stevenn committed
542
    
Stevenn Volant's avatar
Stevenn Volant committed
543
544
545
    ## Check error in the counts and taxonomy table 
    CheckOK = (is.null(check$CheckCounts$Error) && is.null(check$CheckTaxo$Error)  && is.null(check$CheckPercent))
    if(!is.null(data$counts) && !is.null(data$taxo) && nrow(data$counts)>0 && nrow(data$taxo)>0 && CheckOK)
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
546
    {
547
      
svolant's avatar
svolant committed
548
      sidebarMenu(id = "side",
549
550
551
552
553
554
555
556
557
558
559
                  menuItem("Statistical analysis",
                           menuSubItem("Run differential analysis",tabName="RunDiff"),
                           menuSubItem("Diagnostic plots",tabName="DiagPlotTab"),
                           menuSubItem("Tables",tabName="TableDiff"),
                           icon = icon("bar-chart-o"), tabName = "AnaStat"
                  ),
                  menuItem("Visualization",icon = icon("area-chart"),
                           menuSubItem("Global views",tabName="GlobVisu"),
                           menuSubItem("Comparison plots",tabName="CompPlot"),
                           tabName = "Visu")
                  #menuItem("Perspective plots", icon = icon("pie-chart"), tabName = "Krona")
stevenn's avatar
stevenn committed
560
      )
svolant's avatar
svolant committed
561
    } else{ sidebarMenu(id = "side",NULL)}
562
    
stevenn's avatar
stevenn committed
563
564
565
  })
  
  
566
  
567
  ###                                               ###
stevenn's avatar
stevenn committed
568
  ##
569
  ##                DATA TABLE ####
stevenn's avatar
stevenn committed
570
  ##
571
  ###                                               ###
stevenn's avatar
stevenn committed
572
573
  
  ## Counts Table
574
  output$DataCounts <- DT::renderDataTable(
Stevenn Volant's avatar
Stevenn Volant committed
575
    dataInput()$data$counts, 
stevenn's avatar
stevenn committed
576
    options = list(lengthMenu = list(c(10, 50, -1), c('10', '50', 'All')),
577
                   pageLength = 10,scrollX=TRUE, processing=FALSE
stevenn's avatar
stevenn committed
578
579
    ))
  
580
581
582
583
584
585
586
587
588
589
  ## Counts Table
  output$DataUpSet<- DT::renderDataTable({
    resDiff = ResDiffAnal()
    BaseContrast = read.table(namesfile,header=TRUE)
    datatable(Plot_UpSet(input,BaseContrast, resDiff, ContrastListDebounce)$table,
              options = list(lengthMenu = list(c(10, 50, -1), c('10', '50', 'All')),
                   pageLength = 10,scrollX=TRUE, processing=FALSE)
              )
    })
  
590
  ## Counts Table
591
  output$DataVenn<- DT::renderDataTable({
592
    SelContrast = ContrastListVennDebounce()
593
    #SelContrast = input$ContrastList_table_FC
594
    resDiff = ResDiffAnal()
595
    #BaseContrast = read.table(namesfile,header=TRUE)
596
597
    datatable(GetData_venn(input,SelContrast,read.table(namesfile,header=TRUE),resDiff)$df.tot,
              options = list(lengthMenu = list(c(10, 50, -1), c('10', '50', 'All')),
598
599
600
                             pageLength = 10,scrollX=TRUE, processing=FALSE)
    )
  })
601
602
603
604
605
606
607
608
609
610
  
  # output$DataVenn<- DT::renderDataTable(#{
  #   #SelContrast = input$ContrastList_table_FC
  #   #resDiff = ResDiffAnal()
  #   #BaseContrast = read.table(namesfile,header=TRUE)
  #   GetData_venn(input,input$ContrastList_table_FC,read.table(namesfile,header=TRUE),ResDiffAnal())$df.tot,
  #   #}
  #   options = list(lengthMenu = list(c(10, 50, -1), c('10', '50', 'All')),
  #                  pageLength = 10,scrollX=TRUE, processing=FALSE
  #   ))
611
612
  
  
stevenn's avatar
stevenn committed
613
  ## Taxonomy table
614
  output$DataTaxo <- DT::renderDataTable(
Stevenn Volant's avatar
Stevenn Volant committed
615
    dataInput()$data$taxo, 
stevenn's avatar
stevenn committed
616
    options = list(lengthMenu = list(c(10, 50, -1), c('10', '50', 'All')),
svolant's avatar
svolant committed
617
                   pageLength = 10,scrollX=TRUE, processing=FALSE
stevenn's avatar
stevenn committed
618
    ))
619
  
stevenn's avatar
stevenn committed
620
  
stevenn's avatar
stevenn committed
621
  ## Tab box for data visualisation
stevenn's avatar
stevenn committed
622
  output$TabBoxData <- renderUI({
623
    tree = dataInputTree()$data
Stevenn Volant's avatar
Stevenn Volant committed
624
    data=dataInput()$data
svolant's avatar
svolant committed
625
626
    res=NULL
    if(!is.null(tree))
627
    {
628
629
630
631
632
633
634
635
      res = tabBox(width = NULL, selected = "Count table",
                   tabPanel("Count table",DT::dataTableOutput("DataCounts")),
                   tabPanel("Taxonomy",DT::dataTableOutput("DataTaxo")),
                   tabPanel("Summary",h5(strong("Percentage of annotation")),htmlOutput("SummaryView"),
                            br(),h5(strong("Number of features by level:")),plotOutput("SummaryViewBarplot",width = 1200,height=500)),
                   tabPanel("Phylogeny", PhyloTreeMetaROutput('PhyloTreeMetaR'))
      )
      
636
    }
svolant's avatar
svolant committed
637
    else if(is.null(tree))
stevenn's avatar
stevenn committed
638
    {
639
640
641
642
643
644
      res = tabBox(width = NULL,selected = "Count table",
                   tabPanel("Count table",DT::dataTableOutput("DataCounts")),
                   tabPanel("Taxonomy",DT::dataTableOutput("DataTaxo")),
                   tabPanel("Summary",h5(strong("Percentage of annotation")),htmlOutput("SummaryView"),
                            br(),h5(strong("Number of features by level:")),plotOutput("SummaryViewBarplot",width = 1200,height=500))
      )
svolant's avatar
svolant committed
645
      
stevenn's avatar
stevenn committed
646
    }
svolant's avatar
svolant committed
647
648
649
650
651
652
653
    return(res)
  })
  
  observe({
    data=dataInput()$data
    if(!is.null(data$counts) && !is.null(data$taxo) && nrow(data$counts)>0 && nrow(data$taxo)>0)
    {
654
      showElement("tabboxdata_col",anim=TRUE)
svolant's avatar
svolant committed
655
    } else hideElement("tabboxdata_col",anim=TRUE)
stevenn's avatar
stevenn committed
656
    
stevenn's avatar
stevenn committed
657
  })
658
  
659
660
661
662
  output$PhyloTreeMetaR <- renderPhyloTreeMetaR({
    PhyloTreeMetaR(dataInputTree()$treeseq,NULL)
  })
  
svolant's avatar
svolant committed
663
  output$SummaryView <- renderGvis({
svolant's avatar
svolant committed
664
665
    tmp = dataInput()
    data = tmp$data
svolant's avatar
svolant committed
666
667
    taxo = data$taxo
    counts = data$counts
svolant's avatar
svolant committed
668
669
    check = tmp$check
    cond = (!is.null(data$counts) && nrow(data$counts)>0 && !is.null(data$taxo) && nrow(data$taxo)>0 && is.null(check$CheckTaxo$Error) && is.null(check$CheckCounts$Error))
670
    
svolant's avatar
svolant committed
671
    res = NULL
svolant's avatar
svolant committed
672
    if(cond)
svolant's avatar
svolant committed
673
    {
svolant's avatar
svolant committed
674
      taxo = rbind(taxo,rep(NA,ncol(taxo)))
675
676
677
678
679
680
681
682
683
684
685
686
687
688
      #tmpPercent = round(apply(is.na(taxo),2,table)["FALSE",]/(nrow(taxo)-1)*100,2)
      
      tmp = apply(is.na(taxo),2,table)
      
      if (class(tmp) == "list") {
        tmp2 = sapply(tmp, function (x) {if (! "FALSE" %in% names(x)) {x["FALSE"] = 0} ; return(x["FALSE"])})
      }
      else
      {
        tmp2 = tmp["FALSE",]
      }
      
      tmpPercent = round(tmp2/(nrow(taxo)-1)*100,2)
      
689
      
svolant's avatar
svolant committed
690
      df <- data.frame(Label = colnames(taxo),Value = tmpPercent)
691
      
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
692
693
694
      # res = gvisGauge(df,options=list(min=0, max=100, greenFrom=80,
      #                                 greenTo=100, yellowFrom=60, yellowTo=80,
      #                                 redFrom=0, redTo=60, width=1200, height=300))
svolant's avatar
svolant committed
695
      res = gvisGauge(df,options=list(min=0, max=100, greenFrom=80,
696
                                      greenTo=100, yellowFrom=60, yellowTo=80,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
697
                                      redFrom=0, redTo=60, width=800, height=200))
svolant's avatar
svolant committed
698
699
700
701
702
703
    }
    return(res)
  })
  
  
  output$SummaryViewBarplot <- renderPlot({
svolant's avatar
svolant committed
704
705
    tmp = dataInput()
    data = tmp$data
svolant's avatar
svolant committed
706
707
    taxo = data$taxo
    counts = data$counts
svolant's avatar
svolant committed
708
709
    check = tmp$check
    cond = (!is.null(data$counts) && nrow(data$counts)>0 && !is.null(data$taxo) && nrow(data$taxo)>0 && is.null(check$CheckTaxo$Error) && is.null(check$CheckCounts$Error))
710
    
svolant's avatar
svolant committed
711
    res = NULL
svolant's avatar
svolant committed
712
    if(cond)
svolant's avatar
svolant committed
713
714
715
716
717
718
719
720
721
722
723
724
725
    {
      colors=rep(c("#1f77b4","#aec7e8","#ff7f0e","#ffbb78", "#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b",
                   "#c49c94","#e377c2","#f7b6d2","#7f7f7f", "#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"),ceiling(ncol(taxo)/20))
      tmp = apply(taxo,2,unique)
      nbfeatures = as.numeric(lapply(tmp,length)) -as.numeric(lapply(lapply(tmp,is.na),any))
      df <- data.frame(Label = colnames(taxo),Count = nbfeatures)
      df$Label = factor(df$Label,levels =colnames(taxo) )
      res = ggplot(df,aes(x=Label,y=Count,fill=Label))+geom_bar(stat="identity")
      res = res + theme_bw() + xlab("Taxonomy") + scale_fill_manual(values=colors) + guides(fill=FALSE)
    }
    return(res)
  })
  
726
  ###                                               ###
stevenn's avatar
stevenn committed
727
  ##
728
729
  ##                TARGET FILE ####
  ###                                               ###
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
  observe({
    counts = dataInput()$data$counts
    data = dataInput()$data$target

    if(!is.null(data) && !is.null(counts))
    {
      names = colnames(data)
      ## Keep only the row which are in the count table
      ind = which(rownames(data)%in%colnames(counts))
      data = as.data.frame(data[ind,])
      colnames(data) = names
      
      ## Replace "-" by "."
      if(ncol(data)>1 && nrow(data)>1){
        ind_num = which(sapply(as.data.frame(data[,-1]),is.numeric)) + 1
        if(length(ind_num)>0){
          data_tmp =cbind( as.data.frame(apply(as.data.frame(data[,-ind_num]),2,gsub,pattern = "-",replacement = ".")),data[,ind_num])
          #data_tmp =cbind( as.data.frame(as.data.frame(data[,-ind_num])),data[,ind_num])
          colnames(data_tmp) = c(colnames(data)[-ind_num],colnames(data)[ind_num])
          data = data_tmp
        }
        if(length(ind_num)==0){data = as.data.frame(apply(data,2,gsub,pattern = "-",replacement = "."))}
      }
      values$TargetWorking = data
      values$labeled = length(ind)/length(colnames(counts))*100.0
    }
  })
757
  
stevenn's avatar
stevenn committed
758
  ## Load target file
759
  observe({ 
stevenn's avatar
stevenn committed
760
761
    
    inFile <- input$fileTarget
762
    #values$TargetWorking = NULL
Stevenn Volant's avatar
Stevenn Volant committed
763
    counts = dataInput()$data$counts
svolant's avatar
svolant committed
764
    labeled = 0
svolant's avatar
svolant committed
765
    data = NULL
766
    
stevenn's avatar
stevenn committed
767
768
    if (is.null(inFile)) return(NULL)
    
svolant's avatar
svolant committed
769
770
    ## Read the data
    try(read.csv(inFile$datapath,sep=input$septarget,header=TRUE)->data,silent=TRUE)
771
    
svolant's avatar
svolant committed
772
773
774
775
776
777
    if(!is.null(data))
    {
      data = as.data.frame(data)
      names = colnames(data)
      
      ## Change the rownames
svolant's avatar
svolant committed
778
      if(!TRUE%in%duplicated(data[,1])) rownames(data)=gsub(pattern = "-",replacement = ".",as.character(data[,1]))
svolant's avatar
svolant committed
779
780
781
782
783
      
      ## Keep only the row which are in the count table
      ind = which(rownames(data)%in%colnames(counts))
      data = as.data.frame(data[ind,])
      colnames(data) = names
svolant's avatar
svolant committed
784
785
      
      
svolant's avatar
svolant committed
786
787
788
789
790
      ## Replace "-" by "."
      if(ncol(data)>1 && nrow(data)>1){
        ind_num = which(sapply(as.data.frame(data[,-1]),is.numeric)) + 1
        if(length(ind_num)>0){
          data_tmp =cbind( as.data.frame(apply(as.data.frame(data[,-ind_num]),2,gsub,pattern = "-",replacement = ".")),data[,ind_num])
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
791
          #data_tmp =cbind( as.data.frame(as.data.frame(data[,-ind_num])),data[,ind_num])
svolant's avatar
svolant committed
792
793
794
795
          colnames(data_tmp) = c(colnames(data)[-ind_num],colnames(data)[ind_num])
          data = data_tmp
        }
        if(length(ind_num)==0){data = as.data.frame(apply(data,2,gsub,pattern = "-",replacement = "."))}
796
      }
797
      values$TargetWorking = as.data.frame(data)
798
799
      #       ind_sel = Target_selection()
      #       if(length(ind))
svolant's avatar
svolant committed
800
801
802
803
      # target = as.data.frame(apply(target,2,gsub,pattern = "-",replacement = "."))
      
      #ord = order(rownames(data))
      #data = data[ord,]
804
805
      ### A SUqPPRIMER 
      #rownamQes(data) <- colnames(counts)
svolant's avatar
svolant committed
806
807
808
809
810
      
      # Percent annotated
      #     print(ind)
      #     print(colnames(counts))
      #     print(rownames(data))
811
      values$labeled = length(ind)/length(colnames(counts))*100.0
svolant's avatar
svolant committed
812
    }
813
    
814
815
816
    # return(list(target = target, labeled=labeled))
  })
  
817
  
svolant's avatar
svolant committed
818
819
  
  
820
  ###                                               ###
svolant's avatar
svolant committed
821
  ##
822
  ##                        MASQUE ####
svolant's avatar
svolant committed
823
  ##
824
  ###                                               ###
svolant's avatar
svolant committed
825
826
  
  
svolant's avatar
svolant committed
827
  
svolant's avatar
svolant committed
828
829
830
  observeEvent(input$dir,{
    
    inFiles <- input$dir
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
831
    
svolant's avatar
svolant committed
832
    if (!is.null(inFiles)){
833
834
835
      # values$fastq_names_only = unique(paste(values$fastq_names_only,inFiles$name))
      values$paths_fastq_tmp = rbind(isolate(values$paths_fastq_tmp),inFiles)
      values$fastq_names_only = isolate(unique(values$paths_fastq_tmp[,"name"]))
svolant's avatar
svolant committed
836
    }
svolant's avatar
svolant committed
837
838
  })
  
839
  
svolant's avatar
svolant committed
840
  
svolant's avatar
svolant committed
841
  ## Create a fasta file containing the contaminant
svolant's avatar
svolant committed
842
843
844
845
846
847
848
849
850
851
852
  CreateFasta <- reactive({
    seq = NULL
    tmp = tempdir()
    fastaName = paste(tmp,paste(basename(file_path_sans_ext(json_name)),"_contaminant.fasta",sep=""),sep = .Platform$file.sep)
    
    if(!file.exists(fastaName)) file.create(fastaName,showWarnings=FALSE)
    if(input$PairedOrNot=="y"){seq =paste("#Seq1\n",input$R1primer,"\n \n","#Seq2\n",input$R2primer,sep="")}
    if(input$PairedOrNot=="n"){seq =input$primerSingle}
    if(!is.null(seq))  write(seq, file=fastaName)
    
  })
svolant's avatar
svolant committed
853
  
svolant's avatar
svolant committed
854
855
856
  
  ## Action with submit button
  MasqueSubmit <- eventReactive(input$submit,{
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
857
858
    #activate check_mail
    CMP = CheckMasque(input, values,check_mail = TRUE)
svolant's avatar
svolant committed
859
    Error = CMP$Error
860
    
svolant's avatar
svolant committed
861
    isJSONalreadyExist = file.exists(paste(values$curdir,"www","masque","doing",basename(json_name),sep= .Platform$file.sep))
862
    
svolant's avatar
json    
svolant committed
863
    if(is.null(Error) && !isJSONalreadyExist)
svolant's avatar
svolant committed
864
    {
svolant's avatar
svolant committed
865
866
      CreateFasta()
      values$num = 1
svolant's avatar
svolant committed
867
      tmp = tempdir()
svolant's avatar
svolant committed
868
      # home <- normalizePath("~")
svolant's avatar
svolant committed
869
      home <- ""
svolant's avatar
svolant committed
870
      # path_glob = file.path(home, paste(unlist(dir()$path[-1]), collapse = .Platform$file.sep))
871
872
      
      
svolant's avatar
svolant committed
873
874
875
876
877
878
879
880
881
882
883
      ## Paired-end
      if(input$PairedOrNot=="y"){
        cmp = 0
        nfiles = length(values$R1fastQ)+length(values$R2fastQ)
        
        withProgress(message = 'Uploading files...', value = 0, {
          pathToR1 = paste(tmp,"Masque_files_R1",sep=.Platform$file.sep)
          pathToR2 = paste(tmp,"Masque_files_R2",sep=.Platform$file.sep)
          
          if(dir.exists(pathToR1)){file.remove(list.files(pathToR1,full.names =TRUE))} else dir.create(pathToR1)
          if(dir.exists(pathToR2)){file.remove(list.files(pathToR2,full.names =TRUE))} else dir.create(pathToR2)
884
885
886
887
888
889
          for(i in values$R1fastQ){
            ind=which(i==values$paths_fastq_tmp[,"name"])[1]
            file.rename(from=values$paths_fastq_tmp[,"datapath"][ind], to=paste(tmp,"Masque_files_R1",i,sep= .Platform$file.sep))
            cmp = cmp +1
            incProgress(cmp/nfiles, detail = "Forward fastq files...")
          }
svolant's avatar
svolant committed
890
891
          for(i in values$R2fastQ){
            ind=which(i==values$paths_fastq_tmp[,"name"])[1]
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
892
            file.rename(from=values$paths_fastq_tmp[,"datapath"][ind], to=paste(tmp,"Masque_files_R2",i,sep= .Platform$file.sep))
svolant's avatar
svolant committed
893
894
895
            cmp = cmp +1
            incProgress(cmp/nfiles, detail = "Reverse fastq files...")
          }
svolant's avatar
svolant committed
896
        })
897
        
svolant's avatar
svolant committed
898
      } else{
899
        
svolant's avatar
svolant committed
900
901
902
903
        cmp = 0
        nfiles = length(values$fastq_names_only)
        
        withProgress(message = 'Uploading files...', value = 0, {
904
          
svolant's avatar
svolant committed
905
906
907
908
          pathTo = paste(tmp,"Masque_files",sep=.Platform$file.sep)
          
          if(dir.exists(pathTo)){file.remove(list.files(pathTo,full.names =TRUE))} else dir.create(pathTo)
          
svolant's avatar
svolant committed
909
910
          for(i in values$fastq_names_only){
            ind=which(i==values$paths_fastq_tmp[,"name"])[1]
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
911
            file.rename(from=values$paths_fastq_tmp[,"datapath"][ind], to=paste(tmp,"Masque_files",i,sep= .Platform$file.sep));cmp = cmp +1;incProgress(cmp/nfiles)}
svolant's avatar
svolant committed
912
        })
913
      }
svolant's avatar
svolant committed
914
915
      
      ## Create JSON file
svolant's avatar
svolant committed
916
917
      withProgress(message = 'Creating JSON file...',{CreateJSON(input,values)})
      if(file.exists(values$json_name)) values$num = 1
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
918
919
      #messageId="SuccessMasque",
      sendSweetAlert(session,
svolant's avatar
svolant committed
920
921
922
923
924
925
926
927
                     title = "Success",
                     text = paste("Your data have been submitted. You will receive an e-mail once the computation over. <br /> This can take few hours.
                                  <br /> 
                                  <br /> 
                                  <br /> 
                                  <em> Remind: You can close shaman and use your key to check the progression and get your results: </em>",values$pass),
                     type = "success",
                     html=TRUE
928
      )
svolant's avatar
svolant committed
929
930
    }
    
svolant's avatar
svolant committed
931
932
933
934
935
936
  })
  
  
  observeEvent(input$submit,{  
    
    tryCatch(MasqueSubmit(),
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
937
938
             #messageId="ErrorMasque",
             error=function(e) sendSweetAlert(session,
svolant's avatar
svolant committed
939
940
941
942
                                              title = "Oops",
                                              text