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

svolant's avatar
svolant committed
201
202
    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
203
      #if(!is.null(isolate(input$fileTree))){
svolant's avatar
svolant committed
204
205
206
207
208
209
210
        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
211
      #}
svolant's avatar
svolant committed
212
213
214
    } 
    return(res)
  })
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
257
  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
258
259
  ## Input data
  dataInput <-reactive({ 
stevenn's avatar
stevenn committed
260
    
stevenn's avatar
stevenn committed
261
    data = NULL
Stevenn Volant's avatar
Stevenn Volant committed
262
263
    check = NULL
    percent = NULL
264
    Taxo = values$TaxoWorking
svolant's avatar
svolant committed
265
    Counts = NULL
svolant's avatar
svolant committed
266
    inputData = NULL
267
    target = NULL
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
268
    
stevenn's avatar
stevenn committed
269
    if(input$FileFormat=="fileCounts")
stevenn's avatar
stevenn committed
270
    {
stevenn's avatar
stevenn committed
271
      Counts = dataInputCounts()
272
      if(!input$NoTaxoFile && is.null(Taxo)) Taxo = dataInputTaxo()
svolant's avatar
svolant committed
273
274
      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
275
276
      if(!is.null(Counts) && !is.null(Taxo))
      { 
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
277
        tmp = GetDataFromCT(Counts,Taxo, ifelse(input$TypeTable=="MGS" && input$FileFormat!="fileBiom", TRUE, FALSE))
278
        data = list(counts=tmp$counts,taxo=tmp$taxo, taxo_biom=tmp$taxo_biom)
svolant's avatar
svolant committed
279
280
281
        ## Remove row with only O
        # data[["counts"]] = data[["counts"]][rowSums(data[["counts"]])>1,]
        
Stevenn Volant's avatar
Stevenn Volant committed
282
283
        check = list(CheckCounts=tmp$CheckCounts,CheckTaxo=tmp$CheckTaxo,CheckPercent=tmp$CheckPercent)
        percent = tmp$Percent
284
      }
stevenn's avatar
stevenn committed
285
286
    }
    
287
    
stevenn's avatar
stevenn committed
288
    if(input$FileFormat=="fileBiom")
stevenn's avatar
stevenn committed
289
    {
stevenn's avatar
stevenn committed
290
      tmpBIOM = dataInputBiom()
291
      if(!is.null(tmpBIOM) && is.null(data))
Stevenn Volant's avatar
Stevenn Volant committed
292
293
      {
        tmp = GetDataFromBIOM(tmpBIOM)
294
295
296
297
298
299
300
301
302
        if(!is.null(Taxo)){ 
          data = list(counts=tmp$counts,taxo=Taxo, target=tmp$target, taxo_biom=tmp$taxo_biom)
          tmp_check = CheckTaxoTable(Taxo,tmp$counts)
          tmp_annot = PercentAnnot(tmp$counts,Taxo)
          check = list(CheckCounts=tmp_check$CheckCounts,CheckTaxo=tmp_check$CheckTaxo,Percent=tmp_annot$Percent,CheckPercent=tmp_annot$Error)
          percent = tmp_annot$Percent
          }
        else{ 
          data = list(counts=tmp$counts,taxo=tmp$taxo, target=tmp$target, taxo_biom=tmp$taxo_biom)
svolant's avatar
svolant committed
303
304
305
        ## Remove row with only O
        # data[["counts"]] = data[["counts"]][rowSums(data[["counts"]])>1,]
        
306
307
          check = list(CheckCounts=tmp$CheckCounts,CheckTaxo=tmp$CheckTaxo,CheckPercent=tmp$CheckPercent)
          percent = tmp$Percent}
308
        #if(!is.null(data$target)) values$TargetWorking = data$target
Stevenn Volant's avatar
Stevenn Volant committed
309
      }
stevenn's avatar
stevenn committed
310
311
    }
    
svolant's avatar
svolant committed
312
    
313
314
315
316
317
318
319
320
321
322
323
    
    #     if(input$FileFormat=="fileRData")
    #     {
    #       inFile <- input$fileRData
    #       load(inFile)
    #       if(!is.null(inputData)){
    #         data = inputData$data
    #         check = inputData$check
    #         percent = inputData$percent
    #       }
    #     }
Stevenn Volant's avatar
Stevenn Volant committed
324
    return(list(data=data,check=check,percent=percent))
stevenn's avatar
stevenn committed
325
326
327
  })
  
  
328
329
330
331
332
333
334
  ## Size factor file (optional)
  dataSizeFactors <-reactive({ 
    
    inFile <- input$fileSizeFactors
    
    if (is.null(inFile)) return(NULL)
    
svolant's avatar
svolant committed
335
    tryCatch(read.csv(inFile$datapath,sep=input$sepsize,header=TRUE)->data,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
336
337
             #messageId="ErrorSizeFactor",
             error=function(e) sendSweetAlert(session,
svolant's avatar
svolant committed
338
339
                                              title = "Oops",
                                              text=paste("Your file can not be read in SHAMAN.\n \n",e),type ="error"))
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
    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}
361
      
362
363
364
365
366
367
      if(Check) normFactors = tmp
    }
    
    return(list(Check = Check,Error = Error,normFactors=normFactors))
  })
  
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
368
  ## Merge counts data
369
  dataMergeCounts <-reactive({
Stevenn Volant's avatar
Stevenn Volant committed
370
    input$RunDESeq
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
371
372
373
    
    counts = NULL
    CheckTarget = FALSE
374
    normFactors = NULL
Stevenn Volant's avatar
Stevenn Volant committed
375
    CT_noNorm = NULL
376
    CT_Norm = NULL
377
    ChTM = NULL
378
    ChMC = NULL
379
    data = isolate(dataInput()$data)
380
381
    target = isolate(values$TargetWorking)
    labeled= isolate(values$labeled)
382
    taxo = isolate(input$TaxoSelect)
383
    withProgress(
384
      if(!is.null(data$counts) && !is.null(data$taxo) && nrow(data$counts)>0 && nrow(data$taxo)>0 && !is.null(taxo) && taxo!="..." && !is.null(target)) 
385
      {
386
387
388
        design = GetDesign(isolate(input),target)
        ChTM = CheckTargetModel(input,target,labeled,data$counts)$Error
        if(!is.null(design) && is.null(ChTM))
389
        {
390
          tmp = isolate(GetCountsMerge(input,data,taxo,target,design))
391
392
393
          #ChMC = tmp$Error
          #if (!is.null(ChMC))
          #{
394
395
396
397
398
399
400
401
402
403
404
405
406
407
          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
408
          #}
409
        }
410
      }
411
412
      ,message="Merging the counts ...")
    return(list(counts=counts,CheckTarget=CheckTarget,normFactors=normFactors,CT_noNorm=CT_noNorm, CT_Norm=CT_Norm, Error = ChMC))
413
    #return(list(counts=counts,target=target,labeled=labeled,normFactors=normFactors,CT_noNorm=CT_noNorm))
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
414
  })
415
416
  
  
Stevenn Volant's avatar
Stevenn Volant committed
417
418
419
420
421
422
423
  # Infobox Error counts
  output$InfoErrorCounts <- renderInfoBox({
    
    tmp = dataInput()
    data = tmp$data
    check = tmp$check
    cond = (!is.null(data$counts) && nrow(data$counts)>0)
424
    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
425
426
427
    
    if(cond)
    {
428
429
430
      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
431
432
433
434
    }
    
    return(res)
  })
435
  
Stevenn Volant's avatar
Stevenn Volant committed
436
437
438
439
440
441
442
  # 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
443
    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
444
445
446
447
448
449
450
451
    
    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
452
    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
453
454
    return(res)
  })
455
456
  
  
Stevenn Volant's avatar
Stevenn Volant committed
457
458
  # Infobox Error counts
  output$valueErrorPercent <- renderInfoBox({
459
460
    {values$TaxoWorking
    tmp = dataInput()}
Stevenn Volant's avatar
Stevenn Volant committed
461
    data = tmp$data
462
    if(!is.null(values$TaxoWorking)) tmp = dataInput()
Stevenn Volant's avatar
Stevenn Volant committed
463
464
    check = tmp$check
    cond = (!is.null(data$counts) && nrow(data$counts)>0 && !is.null(data$taxo) && nrow(data$taxo)>0)
465
    res = shinydashboardshaman::valueBox(paste0(0, "%"),h6(strong("Annotated features")), color = "light-blue",width=NULL,icon = icon("list"))
466
    
Stevenn Volant's avatar
Stevenn Volant committed
467
468
469
    if(cond)
    {
      percent = round(100*tmp$percent,2)
470
471
      if(percent==0) res = shinydashboardshaman::valueBox(paste0(percent, "%"),h6(strong("Annotated features")), color = "red",width=NULL,icon = icon("list"))  
      if(percent!=0) res = shinydashboardshaman::valueBox(paste0(percent, "%"),h6(strong("Annotated features")), color = "green",width=NULL,icon = icon("list"))  
Stevenn Volant's avatar
Stevenn Volant committed
472
473
474
475
476
      
    }
    
    return(res)
  })
stevenn's avatar
stevenn committed
477
  
478
  
479
480
481
482
483
484
485
486
  ####### Filtering the counts (sliders)
  
  output$ThAb <- renderUI({
    input$AddFilter
    
    res = NULL
    counts = isolate(dataMergeCounts()$counts)
    tot = rowSums(counts)
487
    #save(counts,tot,file="testFilter.RData")
488
    withProgress({tmp = SelectThreshAb(counts,lambda=max(round(sum(counts)/nrow(counts)*0.05),min(tot)+1),graph=FALSE)},message="Loading...")
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
    
    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")
  
516
  output$Plot_ThAb <- renderPlot({
517
518
519
520
521
    counts = dataMergeCounts()$counts
    ## output of plot_filter is ggplot class
    plot_filter(counts,input$SliderThSamp,input$SliderThAb,type="Abundance")
    
  })
522
  
523
  output$Plot_ThSamp <- renderPlot({
524
525
526
527
    counts = dataMergeCounts()$counts
    ## output of plot_filter is ggplot class
    plot_filter(counts,input$SliderThSamp,input$SliderThAb,type="Samples")
  })
528
  
529
530
531
532
533
  output$Plot_Scatter_Filter <- renderScatterD3({
    counts = dataMergeCounts()$counts
    ## output of plot_filter is ggplot class
    plot_filter(counts,input$SliderThSamp,input$SliderThAb,type="Scatter")
  })
534
  ###                                               ###
535
  ##
536
  ##                DYNAMIC MENU ####
537
  ##
538
  ###                                               ###
stevenn's avatar
stevenn committed
539
540
541
542
543
  
  
  
  output$dymMenu <- renderMenu({
    
Stevenn Volant's avatar
Stevenn Volant committed
544
545
546
    tmp = dataInput()
    data = tmp$data
    check = tmp$check
stevenn's avatar
stevenn committed
547
    
Stevenn Volant's avatar
Stevenn Volant committed
548
549
550
    ## 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
551
    {
552
      
svolant's avatar
svolant committed
553
      sidebarMenu(id = "side",
554
555
556
557
558
559
560
561
562
563
564
                  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
565
      )
svolant's avatar
svolant committed
566
    } else{ sidebarMenu(id = "side",NULL)}
567
    
stevenn's avatar
stevenn committed
568
569
570
  })
  
  
571
  
572
  ###                                               ###
stevenn's avatar
stevenn committed
573
  ##
574
  ##                DATA TABLE ####
stevenn's avatar
stevenn committed
575
  ##
576
  ###                                               ###
stevenn's avatar
stevenn committed
577
578
  
  ## Counts Table
579
  output$DataCounts <- DT::renderDataTable(
Stevenn Volant's avatar
Stevenn Volant committed
580
    dataInput()$data$counts, 
stevenn's avatar
stevenn committed
581
    options = list(lengthMenu = list(c(10, 50, -1), c('10', '50', 'All')),
582
                   pageLength = 10,scrollX=TRUE, processing=FALSE
stevenn's avatar
stevenn committed
583
584
    ))
  
585
586
587
588
589
590
591
592
593
594
  ## 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)
              )
    })
  
595
  ## Counts Table
596
  output$DataVenn<- DT::renderDataTable({
597
    SelContrast = ContrastListVennDebounce()
598
    #SelContrast = input$ContrastList_table_FC
599
    resDiff = ResDiffAnal()
600
    #BaseContrast = read.table(namesfile,header=TRUE)
601
602
    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')),
603
604
605
                             pageLength = 10,scrollX=TRUE, processing=FALSE)
    )
  })
606
607
608
609
610
611
612
613
614
615
  
  # 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
  #   ))
616
617
  
  
stevenn's avatar
stevenn committed
618
  ## Taxonomy table
619
  output$DataTaxo <- DT::renderDataTable(
Stevenn Volant's avatar
Stevenn Volant committed
620
    dataInput()$data$taxo, 
621
    editable=T, 
stevenn's avatar
stevenn committed
622
    options = list(lengthMenu = list(c(10, 50, -1), c('10', '50', 'All')),
623
624
                                     pageLength = 10,scrollX=TRUE, processing=FALSE)
)
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
625

626
627
628
629
630
631
632
633
634
635
636
  observeEvent(input$DataTaxo_cell_edit, {
    info = input$DataTaxo_cell_edit
    str(info)
    i = info$row
    j = info$col
    v = info$value
    tmp=as.matrix(dataInput()$data$taxo)
    tmp[i,j] = v
    values$TaxoWorking = as.data.frame(tmp)
    replaceData(proxy, values$TaxoWorking, resetPaging = FALSE)
  })
stevenn's avatar
stevenn committed
637
  ## Tab box for data visualisation
stevenn's avatar
stevenn committed
638
  output$TabBoxData <- renderUI({
639
    tree = dataInputTree()$data
Stevenn Volant's avatar
Stevenn Volant committed
640
    data=dataInput()$data
svolant's avatar
svolant committed
641
642
    res=NULL
    if(!is.null(tree))
643
    {
644
      res = tabBox(width = NULL, selected = "Count table",
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
645
646
                   tabPanel("Count table",DT::dataTableOutput("DataCounts"),
                            downloadButton('ExportRawCounts', 'Export count table file')),
647
                   tabPanel("Taxonomy",DT::dataTableOutput("DataTaxo"), 
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
648
                            actionButton("deleteTaxo", "Delete annotation"),
649
                            downloadButton('ExportTaxo', 'Export taxonomy file')),
650
651
                   tabPanel("Summary",h5(strong("Percentage of annotation")),htmlOutput("SummaryView"),
                            br(),h5(strong("Number of features by level:")),plotOutput("SummaryViewBarplot",width = 1200,height=500)),
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
652
653
                   tabPanel("Phylogeny", PhyloTreeMetaROutput('PhyloTreeMetaR'),
                            downloadButton('ExportPhylo', 'Export phylogeny file'))
654
655
      )
      
656
    }
657
    else
stevenn's avatar
stevenn committed
658
    {
659
      res = tabBox(width = NULL,selected = "Count table",
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
660
661
                   tabPanel("Count table",DT::dataTableOutput("DataCounts"),
                            downloadButton('ExportRawCounts', 'Export count table file')),
662
                   tabPanel("Taxonomy",DT::dataTableOutput("DataTaxo"),
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
663
                            actionButton("deleteTaxo", "Delete annotation"),
664
                            downloadButton('ExportTaxo', 'Export taxonomy file')),
665
666
667
                   tabPanel("Summary",h5(strong("Percentage of annotation")),htmlOutput("SummaryView"),
                            br(),h5(strong("Number of features by level:")),plotOutput("SummaryViewBarplot",width = 1200,height=500))
      )
stevenn's avatar
stevenn committed
668
    }
svolant's avatar
svolant committed
669
670
671
672
673
674
675
    return(res)
  })
  
  observe({
    data=dataInput()$data
    if(!is.null(data$counts) && !is.null(data$taxo) && nrow(data$counts)>0 && nrow(data$taxo)>0)
    {
676
      showElement("tabboxdata_col",anim=TRUE)
svolant's avatar
svolant committed
677
    } else hideElement("tabboxdata_col",anim=TRUE)
stevenn's avatar
stevenn committed
678
    
stevenn's avatar
stevenn committed
679
  })
680
  
681
682
683
684
  output$PhyloTreeMetaR <- renderPhyloTreeMetaR({
    PhyloTreeMetaR(dataInputTree()$treeseq,NULL)
  })
  
svolant's avatar
svolant committed
685
  output$SummaryView <- renderGvis({
svolant's avatar
svolant committed
686
687
    tmp = dataInput()
    data = tmp$data
svolant's avatar
svolant committed
688
689
    taxo = data$taxo
    counts = data$counts
svolant's avatar
svolant committed
690
691
    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))
692
    
svolant's avatar
svolant committed
693
    res = NULL
svolant's avatar
svolant committed
694
    if(cond)
svolant's avatar
svolant committed
695
    {
svolant's avatar
svolant committed
696
      taxo = rbind(taxo,rep(NA,ncol(taxo)))
697
698
699
700
701
702
703
704
705
706
707
708
709
710
      #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)
      
711
      
svolant's avatar
svolant committed
712
      df <- data.frame(Label = colnames(taxo),Value = tmpPercent)
713
      
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
714
715
716
      # 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
717
      res = gvisGauge(df,options=list(min=0, max=100, greenFrom=80,
718
                                      greenTo=100, yellowFrom=60, yellowTo=80,
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
719
                                      redFrom=0, redTo=60, width=800, height=200))
svolant's avatar
svolant committed
720
721
722
723
724
725
    }
    return(res)
  })
  
  
  output$SummaryViewBarplot <- renderPlot({
svolant's avatar
svolant committed
726
727
    tmp = dataInput()
    data = tmp$data
svolant's avatar
svolant committed
728
729
    taxo = data$taxo
    counts = data$counts
svolant's avatar
svolant committed
730
731
    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))
732
    
svolant's avatar
svolant committed
733
    res = NULL
svolant's avatar
svolant committed
734
    if(cond)
svolant's avatar
svolant committed
735
736
737
738
739
740
741
742
743
744
745
746
747
    {
      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)
  })
  
748
  ###                                               ###
stevenn's avatar
stevenn committed
749
  ##
750
751
  ##                TARGET FILE ####
  ###                                               ###
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
  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
    }
  })
779
  
stevenn's avatar
stevenn committed
780
  ## Load target file
781
  observe({ 
stevenn's avatar
stevenn committed
782
    inFile <- input$fileTarget
783
    #values$TargetWorking = NULL
784

Stevenn Volant's avatar
Stevenn Volant committed
785
    counts = dataInput()$data$counts
svolant's avatar
svolant committed
786
    labeled = 0
svolant's avatar
svolant committed
787
    data = NULL
788
    
stevenn's avatar
stevenn committed
789
790
    if (is.null(inFile)) return(NULL)
    
svolant's avatar
svolant committed
791
792
    ## Read the data
    try(read.csv(inFile$datapath,sep=input$septarget,header=TRUE)->data,silent=TRUE)
793
    
svolant's avatar
svolant committed
794
795
796
797
798
799
    if(!is.null(data))
    {
      data = as.data.frame(data)
      names = colnames(data)
      
      ## Change the rownames
svolant's avatar
svolant committed
800
      if(!TRUE%in%duplicated(data[,1])) rownames(data)=gsub(pattern = "-",replacement = ".",as.character(data[,1]))
svolant's avatar
svolant committed
801
802
803
804
805
      
      ## 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
806
807
      
      
svolant's avatar
svolant committed
808
809
810
811
812
      ## 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
813
          #data_tmp =cbind( as.data.frame(as.data.frame(data[,-ind_num])),data[,ind_num])
svolant's avatar
svolant committed
814
815
816
817
          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 = "."))}
818
      }
819
      values$TargetWorking = as.data.frame(data)
820
      values$visTarget = FALSE
821
822
      #       ind_sel = Target_selection()
      #       if(length(ind))
svolant's avatar
svolant committed
823
824
825
826
      # target = as.data.frame(apply(target,2,gsub,pattern = "-",replacement = "."))
      
      #ord = order(rownames(data))
      #data = data[ord,]
827
828
      ### A SUqPPRIMER 
      #rownamQes(data) <- colnames(counts)
svolant's avatar
svolant committed
829
830
831
832
833
      
      # Percent annotated
      #     print(ind)
      #     print(colnames(counts))
      #     print(rownames(data))
834
      values$labeled = length(ind)/length(colnames(counts))*100.0
svolant's avatar
svolant committed
835
    }
836
    
837
838
839
    # return(list(target = target, labeled=labeled))
  })
  
840
  
svolant's avatar
svolant committed
841
842
  
  
843
  ###                                               ###
svolant's avatar
svolant committed
844
  ##
845
  ##                        MASQUE ####
svolant's avatar
svolant committed
846
  ##
847
  ###                                               ###
svolant's avatar
svolant committed
848
849
  
  
svolant's avatar
svolant committed
850
  
svolant's avatar
svolant committed
851
852
853
  observeEvent(input$dir,{
    
    inFiles <- input$dir
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
854
    
svolant's avatar
svolant committed
855
    if (!is.null(inFiles)){
856
857
858
      # 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
859
    }
svolant's avatar
svolant committed
860
861
  })
  
862
  
svolant's avatar
svolant committed
863
  
svolant's avatar
svolant committed
864
  ## Create a fasta file containing the contaminant
svolant's avatar
svolant committed
865
866
867
868
869
870
871
872
873
874
875
  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
876
  
svolant's avatar
svolant committed
877
878
879
  
  ## Action with submit button
  MasqueSubmit <- eventReactive(input$submit,{
880
881
    galaxyAlertfile=paste(values$curdir,"www","galaxy_pasteur_alert.txt",sep= .Platform$file.sep)
    galaxyAlert = NULL
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
882
883
    #activate check_mail
    CMP = CheckMasque(input, values,check_mail = TRUE)
svolant's avatar
svolant committed
884
    Error = CMP$Error
885
    
svolant's avatar
svolant committed
886
    isJSONalreadyExist = file.exists(paste(values$curdir,"www","masque","doing",basename(json_name),sep= .Platform$file.sep))
887
    
svolant's avatar
json    
svolant committed
888
    if(is.null(Error) && !isJSONalreadyExist)
svolant's avatar
svolant committed
889
    {
svolant's avatar
svolant committed
890
891
      CreateFasta()
      values$num = 1
svolant's avatar
svolant committed
892
      tmp = tempdir()
svolant's avatar
svolant committed
893
      # home <- normalizePath("~")
svolant's avatar
svolant committed
894
      home <- ""
svolant's avatar
svolant committed
895
      # path_glob = file.path(home, paste(unlist(dir()$path[-1]), collapse = .Platform$file.sep))
896
897
      
      
svolant's avatar
svolant committed
898
899
900
901
902
903
904
905
906
907
908
      ## 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)
909
910
911
912
913
914
          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
915
916
          for(i in values$R2fastQ){
            ind=which(i==values$paths_fastq_tmp[,"name"])[1]
Amine  GHOZLANE's avatar
Amine GHOZLANE committed
917
            file.rename(from=values$paths_fastq_tmp[,"datapath"][ind], to=paste(tmp,"Masque_files_R2",i,sep= .Platform$file.sep))