####
# UI side panel for primer input
######
tabPanel("Primers",
value = "primer_input_tab",
icon = icon("tag", lib = "glyphicon"),
br(),
h2(class="inline", "Primers"),
br(),
br(),
conditionalPanel("input.primer_analysis_type == 'evaluate'",
# load input primers if we're not designing new primers
withTags(
div(class = "one",
p("For immunological applications, we provide a number
of published primer sets that can be loaded directly.
For other applications please input a FASTA or CSV file
containing the primers to be analyzed.",
openPrimeRui:::create.help.button("input_primers_overview"))
)),
shinyBS::bsTooltip("help_input_primers",
"View help on the input of primers.",
"right", options = list(container = "body")
)
),
conditionalPanel("input.primer_analysis_type == 'evaluate'",
###########
# INPUT FOR PRIMER EVALUATION
###########
# treatment of ambiguities
radioButtons("use_ambig",
"Treatment of IUPAC ambiguity codes",
c("None" = "none", "Merge" = "merge", "Disambiguate" = "unmerge"),
selected = "none", inline = TRUE),
shinyBS::bsTooltip("use_ambig",
paste("Whether similar primers in the input shall be left as they are",
"(\\'None\\'), merged using ambiguity codes (\\'Merge\\'),",
"or disambiguated (\\'Disambiguate\\')."),
"right", options = list(container = "body")),
##################
# Selection of primer source
#####################
# load personal primers or supplied primers?
radioButtons("primer_upload_choice",
tagList(icon("floppy-disk", lib = "glyphicon"), "Primer source"),
choices = c("Supplied primers" = "available_primers",
"Personal primers" = "personal_primers"),
selected = "available_primers", inline=TRUE
),
shinyBS::bsTooltip("primer_upload_choice",
"Whether you want to load supplied primers or your own primers.",
"right", options = list(container = "body")
),
# checkbox: load evaluated primer csv or fasta?
checkboxInput("load_eval_primers",
"Load evaluated primers (CSV)",
TRUE),
shinyBS::bsTooltip("load_eval_primers",
"Whether pre-evaluated primers (CSV) or raw primers (FASTA) shall be loaded.",
"right", options = list(container = "body")
),
#######################
# SUPPLIED PRIMERS
#########################
conditionalPanel("input.primer_upload_choice == 'available_primers'",
############################
# Load Supplied IMGT primers
#######################
conditionalPanel("input.selected_supplied_templates == 'immunological'",
selectizeInput("IMGT_primers",
tagList(icon = icon("tag", lib = "glyphicon"),
"Available primers"),
choices = NULL, selected = NULL,
options = list(
placeholder = 'Please select one of the available primer data sets',
onInitialize = I('function() { this.setValue(""); }')
)
)
),
##################
# Load supplied virological primers
#####################
conditionalPanel("input.selected_supplied_templates == 'virological'",
selectizeInput("Virus_primers",
tagList(icon = icon("tag", lib = "glyphicon"),
"Available primers"),
choices = NULL, selected = NULL,
options = list(
placeholder = 'Please select one of the available primer data sets',
onInitialize = I('function() { this.setValue(""); }')
)
)
)
),
conditionalPanel("input.primer_upload_choice == 'personal_primers'",
########
# Load personal primers
######
shinyBS::bsCollapse(id = "primer_upload_collapse",
# primer upload panel
open = "primer_header_structure_panel",
#######
# INPUT OPTIONS FOR PRIMERS
#############
shinyBS::bsCollapsePanel(
# header structure panel: keywords for fw/rev primers
tagList(icon("menu-hamburger", lib = "glyphicon"),
"Primer input options"),
value = "primer_header_structure_panel",
style = "primary",
##########
# only show FASTA options if loading non-evaluated primers
########
conditionalPanel("!input.load_eval_primers",
div(p("Please specify the keywords in the headers
of the FASTA file that identify the primer
directionalities."), class="two"
),
textInput(inputId = "fw_primer_id",
# id for fw primers
label = tagList(icon("arrow-right", lib = "glyphicon"),
"Identifier for forward primers"),
value = "_fw"
),
shinyBS::bsTooltip("fw_primer_id",
paste("The identifier used to declare forward",
"primers (complementary to the antisense strand) in the headers of the input FASTA file."),
"right", options = list(container = "body")
),
textInput(inputId = "rev_primer_id",
# id for reverse primers
label = tagList(icon("arrow-left", lib = "glyphicon"),
"Identifier for reverse primers"),
value = "_rev"
),
shinyBS::bsTooltip("rev_primer_id",
paste("The identifier used to declare reverse primers",
"(complementary to the sense strand) in the headers of the input FASTA file."),
"right", options = list(container = "body")
)#,
#####
# confirm primers button
#######
#div(class = "rightAligned",
## header structure confirmation button
#actionButton("confirm_primer_header_structure",
#"Confirm primer identifiers",
#icon = icon("check"),
#class="actionStyleSmall",
#style="color: #fff; background-color: #337ab7; border-color: #2e6da4")
#)
), # close conditional
conditionalPanel("input.load_eval_primers",
p("There's nothing to configure for loading evaluated primers (CSV input).")
)
) # close panel
), # close collapse
#########
# primer input:
#########
fileInput(inputId = "primer_file",
label = tagList(icon("file"),
"Primer FASTA/CSV"), accept="text"
),
shinyBS::bsTooltip("primer_file",
"The set of primers to be evaluated in FASTA format.\\
If primers should be designed from scratch,\\
no file needs to be uploaded here.",
"right", options = list(container = "body")
)
) # close manual primer upload conditional panel
), # close conditional panel conditioning on primer evaluation
conditionalPanel("input.primer_analysis_type == 'design'",
############
# PRIMER DESIGN PANEL
############
div(p("Please specify the desired properties
of the primers that you would like to design.",
openPrimeRui:::create.help.button("opti_optimization")),
class = "two"
),
shinyBS::bsTooltip("help_init_initialization",
"View help on initializing the primer set.",
"right", options = list(container = "body")
),
# tree/naive initialization?
radioButtons("init_algo", "Template sequence relationship", c("Related" = "tree", "Divergent" = "naive"), inline = TRUE, selected = "tree"),
shinyBS::bsTooltip("init_algo",
"If the templates are related a tree-based primer initialization is used, otherwise a naive initialization is employed.",
"right", options = list(container = "body")
),
# directionality of designed primers
selectInput("design_direction",
"Primer orientation",
c("Forward and reverse" = "both",
"Forward only" = "fw",
"Reverse only" = "rev")),
shinyBS::bsTooltip("design_direction",
"Design forward and reverse primers, only forward primers, or only reverse primers.",
"right", options = list(container = "body"),
trigger = "focus"
),
# degeneracy of primers
sliderInput("max_degeneracy", "Maximum primer degeneracy", min = 1, max = 64, value = 16),
shinyBS::bsTooltip("max_degeneracy",
"Degeneracy is the number of individual oligomers that are represented by the ambiguous sequence of a degenerate primer.",
"right", options = list(container = "body"),
trigger = "focus"
),
conditionalPanel("input.init_algo == 'tree'",
#############
# TREE INITIALIZATION
###########
# required consevation
sliderInput("required_conservation",
"Percentile of most conserved regions to consider",
min = 0, max = 1,
value = 1
),
shinyBS::bsTooltip("required_conservation",
"To improve the runtime, primers can be constructed only in \\
highly-conserved regions. For example, selecting 10% will only \\
construct primers in the regions whose conservation is among \\
the top 10% according to Shannon entropy.",
"right",
options = list(container = "body")
)
)
),
conditionalPanel("input.primer_analysis_type == 'compare'",
############
# COMPARISON PANEL
###########
withTags(
div(class = "one",
p("For immunological applications, we provide a number
of evaluated primer sets that can be loaded directly.
Otherwise, you can upload raw, evaluated csv files
containing the primers to be analyzed.",
openPrimeRui:::create.help.button("input_primers_comparison"))
)),
##########
# Choice between supplied/custom comparison primers
######
radioButtons("primer_comparison_upload_choice",
tagList(icon("floppy-disk", lib = "glyphicon"), "Primer source"),
choices = c("Supplied primers" = "available_primers",
"Personal primers" = "personal_primers"
),
selected = "available_primers", inline=TRUE
),
conditionalPanel("input.primer_comparison_upload_choice == 'personal_primers'",
##########
# PERSONAL PRIMERS
############
# primer csv files for comparison
fileInput("comparison_file",
tagList(icon("tag", lib = "glyphicon"),
"Primer CSV"
), multiple = TRUE, accept = "text/csv"
),
shinyBS::bsTooltip("comparison_file",
"Upload analyzed, downloaded (raw) primer files\\
in csv format for comparison.",
"right", options = list(container = "body")
)
#fileInput("comparison_constraint_files",
#tagList(icon("filter", lib = "glyphicon"),
#"Upload constraint settings"
#), multiple = TRUE, accept = c("text/xml", ".xml")
#)
), # close non-IMGT panel
conditionalPanel("input.primer_comparison_upload_choice == 'available_primers'",
#################
# SUPPLIED COMPARISON PRIMER SETS
##################
conditionalPanel("input.selected_supplied_templates == 'immunological'",
######
# IMMUNO COMPARISON PRIMERS
########
# select primer sets for comparison
selectizeInput("selected_comparison_primers",
tagList(icon = icon("tag", lib = "glyphicon"),
"Available primer sets"),
choices = NULL,
selected = NULL, multiple = FALSE,
options = list(
placeholder = 'Please select at least one of the available primer data sets',
onInitialize = I('function() { this.setValue(""); }')
)
),
# load comparison primer button
# NB: this button only works for IMGT at the moment ..
actionButton("load_all_comparison_sets",
"Load all available primer sets",
class = "actionStyleSmall"
)
),
conditionalPanel("input.selected_supplied_templates == 'virological'",
######
# IMMUNO COMPARISON PRIMERS
########
# select primer sets for comparison
selectizeInput("selected_comparison_primers_virus",
tagList(icon = icon("tag", lib = "glyphicon"),
"Available primer sets"),
choices = NULL,
selected = NULL, multiple = FALSE,
options = list(
placeholder = 'Please select at least one of the available primer data sets',
onInitialize = I('function() { this.setValue(""); }')
)
)
)
)
)
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.