shinyCurves, a shiny web application to analyse multisource qPCR amplification data: a COVID-19 case study

Background Quantitative, reverse transcription PCR (qRT-PCR) is currently the gold-standard for SARS-CoV-2 detection and it is also used for detection of other virus. Manual data analysis of a small number of qRT-PCR plates per day is a relatively simple task, but automated, integrative strategies are needed if a laboratory is dealing with hundreds of plates per day, as is being the case in the COVID-19 pandemic. Results Here we present shinyCurves, an online shiny-based, free software to analyze qRT-PCR amplification data from multi-plate and multi-platform formats. Our shiny application does not require any programming experience and is able to call samples Positive, Negative or Undetermined for viral infection according to a number of user-defined settings, apart from providing a complete set of melting and amplification curve plots for the visual inspection of results. Conclusions shinyCurves is a flexible, integrative and user-friendly software that speeds-up the analysis of massive qRT-PCR data from different sources, with the possibility of automatically producing and evaluating melting and amplification curve plots. Supplementary Information The online version contains supplementary material available at 10.1186/s12859-021-04392-1.


Case-study: COVID-19
The toy dataset provided in shinyCurves consists of real RT-qPCR data from clinical nasopharyngeal samples suspicious of containing SARS-CoV-2. For the PROBE analysis, we have included data from an Applied Biosystems Quant Studio system and for the DYE Analysis data come from BioRad CFX system.

a) PROBE -Applied Biosystems Quant Studio
In this dataset, 3 genes (N1, RdRp and RNAseP) will be analyzed in 59 samples. Duplicates are included. RNAseP is the endogenous control and N1 and RdRp are the target genes.

a.1) Calling analysis
a.1.1) Open the app and click on PROBE: Analysis -Applied Biosystems Quant Studio check box. Upload file "PROBE_Applied Biosystems_384w_Quantification Cq Results.xlsx" from the toy dataset folder. This file is located in the PROBE-Applied/input folder. a.1.2) Leave all settings in Default mode: -Endogenous control: RNAseP -Maximum cycle number for endogenous control: 35 -How many serial dilutions are you using for the standard curves?: 4 -Enter standard concentration: 400000 -Sample is considered "Positive" with Ct below: 35 -What is your maximum cycle number: 40 -Number of "Positive" genes to consider a sample "Positive": 1 -Do you want to use the estimated copy number as a result assignation criterion?: Yes -Sample is considered "Positive" with estimated copies above: 4 a.1.3) Let's start by checking that everything is correct in the Raw Data tab. The first rows of this tab must look like this: a.1.4) The Conversion tab represents the only difference between the BioRad CFX and the Applied Biosystems Quant Studio Analysis. Usually, RFU amplification data from Applied Biosystems Quant Studio and BioRad CFX are stored in a different formats, so they need to be adapted in order to posteriorly be able to run the Amplification Curves Analysis.
a.1.10) The Analysis tab shows the main results for all the samples. This table can be found in CSV format as Analysis.csv in the toy dataset (PROBE-Applied /output folder).
Remember that in this analysis the estimated copy number will be used as result assignation criterion (non-mandatory). In the following section, the result assignation criteria for the most relevant samples will be described: Sample 1 This sample shows no amplification neither for N1 (N1(MeanCt) = 0) nor for RdRp (RdRp(MeanCt) = 0), so both genes are assigned as "Negative" in columns CtCheck:N1 and CtCheck:RdRp. As a consequence, the sample can be directly assigned as "Negative" in the FinalCtCheck and in the Assignment columns. In this case, there is no need to perform the "Copy Check" analysis. This example is representative for samples 3-8, 10-15, 17-33, 35-42 and 44-59.
Sample 2 This sample shows a mean Ct of of 38.25 for RdRp and is "Undetermined" for N1 due to differences between duplicates. N1 is assigned as "Undetermined" in its FinalCtCheck column and RdRp is assigned as "Check copy number" as its Ct value is higher than MaxCt but lower than the maximum cycle number. As a consequence, the sample is assigned as "Check copy number" in the FinalCtCheck column and is redirected to the "Copy Check" analysis. Copy number is calculated only for RdRp (3.880). As this value is lower than the minimum copy number to assign a sample as "Positive" and N1 has been assigned as "Undetermined", this sample is finally assigned as "Undetermined" in the Assignment column.

Sample 9
This sample shows a mean Ct of 0 for N1 and a mean Ct of 39.23 for RdRp. N1 is assigned as "Negative" in its CtCheck column (as a Ct value of 0 implies no amplification) and RdRp is assigned as "Check copy number" (it is higher than MaxCt). In this case, the FinalCtCheck column assigns the sample as "Check copy number" because, although N1 is "Negative", RdRp could be "Positive" in the "Copy Check" analysis. Copy number for N1 is 0 (as there is no amplification) and it is assigned as "Negative" in its CopyCheck column. On the other hand, RdRp shows a value of 2.92 copies, which is lower than #MinCopy (4). For this reason, RdRp is assigned as "Undetermined" in its CopyCheck column: the copy number is so low, that it cannot be assigned as "Positive" with certainty.
Sample 16 This sample shows a mean Ct of 23.816 for N1 and of 23.278 for RdRp. Both Ct values are lower than MaxCt (35), so that both samples are assigned as "Positive" in their respective CtCheck columns and also in the FinalCtCheck column. There is no need to perform the "Copy Check" analysis, so the sample is directly assigned as "Positive".

Sample 34
In this case, N1 shows a Ct value of 0 (no amplification) and RdRp is assigned as "Undetermined" in its MeanCt colum. By looking at the independent Ct values of the duplicates for sample 34 in RdRp (NaN and 36.089) we can see that one of them has not amplified and thus, the average cannot be calculated. As a result, the sample is assigned as "Undetermined" in the FinalCtCheck and in the Assignment columns: although N1 is "Negative", we have not been able to perform the "Ct Check" analysis for RdRp and, thus, the sample cannot be directly assigned as "Negative".

Sample 43
This sample shows a mean Ct value of 36.145 for N1 and no amplification for RdRp (mean Ct = 0). As a consequence, N1 is assigned as "Check copy number" and RdRp as "Negative" in their respective CtCheck columns. In this case, the sample is assigned as "Check copy number" in the FinalCtCheck column. In the "Copy Check" analysis, RdRp shows no copies (it has not amplified) and is again assigned as "Negative". N1 shows an estimated copy number of 50.179, which is higher than 4 (#MinCopy), and thus, it is assigned as "Positive" as we only need one gene to be "Positive" to consider the sample "Positive".

a.2) Amplification Curves
a.2.1) Click the Amplification Curves check box in the menu. Upload the RFU files "N1.csv", "RdRp.csv" and "RNAseP.csv" in the "Upload CSVs here" input option. These files must contain the raw RFU data directly exported from RT-qPCR system. They can be found in the toy dataset in folder PROBE-Applied/output: select all of them at one time and upload them together. Remember that filenames must not be modified. a.2.2) Upload the ID_well.csv and ID_result.csv files in their respective input options. These files can also be found in the PROBE-Applied/output folder in the toy dataset. a.2.3) Leave the two other settings in Default mode: -Enter cycle number: 40 -Enter endogenous control: RNAseP CAREFUL: if users decide that they don't want to use the estimated copy number as assignation criteria, they are allowed to modify this option in the main menu and the Analysis table will be updated instantaneously. However, this could critically modify the results for some samples: users should be aware of this difference! Specifically for the toy dataset, results would be modified in the following way: Sample 2 N1 is assigned as "Positive" as its Ct value = 35 and RdRp(MeanCt) = 38.25, so that RdRp is assigned as "Negative". The sample is assigned as "Positive" as we only need one gene to be "Positive" to consider the sample "Positive".

Sample 43
With N1(MeanCt) = 36.145 (higher than MaxCt) and RdRp(MeanCt) = 0 (no amplification), both genes are assigned as "Negative" and the sample is finally assigned as "Negative". b.1.5) The Melting Curves Plots tab displays 4 subtabs (one for each gene). Each of these should print independent melting curves for each well analyzed.
As we have specified in the options that our data are in raw format, raw fluorescence data are plotted in black and the curve for the first derivative transformed data is plotted in red. The melting peaks identified are marked with a dotted vertical line. These plots can be found in files MeltingCurves_H30.pdf, MeltingCurves_N.pdf, MeltingCurves_RdRp.pdf and MeltingCurves_S.pdf in folder DYE-BioRad/output in the toy dataset. Recall that, for this analysis, the estimated copy number will be used as a result assignation criteria.
In the following section, the result assignation criteria for the most relevant samples will be described: Sample 1 For both N (N(MeanCt) = 35.745) and RdRp (RdRp(MeanCt) = 38.185) this sample shows mean Ct values higher than MaxCt (35) and lower than the RT-qPCR cycle number. As a consequence, both genes are assigned as "Check copy number" in their respective CtCheck columns. On the contrary, S shows a Ct value of 31.165, which is lower than MaxCt and is, consequently, assigned as "Positive". As 2 of the 3 target genes are assigned as "Check copy number", the whole sample is redirected to the "Copy Check" analysis. Copy number is calculated for the 3 genes: N(Copies) = 25.943, RdRp(Copies) = 7.156 and S(Copies) = 541.155. The three genes show copy numbers higher than #MinCopy (4), so that all of them are assigned as "Positive" in their respective CopyCheck columns. Finally, the sample is assigned as "Positive" in the FinalCopyCheck and in the Assignment column.
IMPORTANT: sample 4 is excluded from the final Analysis. If you take a look at the ID_Well, you will see how this sample has "lost" most of their respective wells in the Melting Curves Analysis. Commonly melting curves show multiple peaks due to the absence of specific amplification. However, when the melting curves for all target genes in the same sample look "wrong", i.e. there is no specific amplification for any of the genes (except for the endogenous control), this means that this sample can be assigned as "Negative". If the melting curve for the endogenous control looks unreliable too, this means that the sample has bad quality. For our analysis, we need 2 "Positive" genes to assign a sample as "Positive". So, as we don't have 2 target genes in sample 4, it is directly excluded from the analysis.
Sample 2 This sample shows a Ct value lower than MaxCt for RdRp (RdRp(MeanCt) = 34.755), which is why it is assigned as "Positive" in its CtCheck column. For S, it shows a Ct value higher than MaxCt but lower than the maximum cycle number so that, consequently, it is assigned as "Check copy number". N is assigned as "Undetermined" due to inconsistencies between sample duplicates. Consequently, the whole sample is assigned as "Check copy number", as S could be "Positive". Copy number is calculated for RdRp (Copies = 45.614) and S (Copies = 29.930) and both show values higher than #MinCopy. As a consequence, the sample is finally assigned as "Positive".
Sample 3 This sample has not amplified for RdRp (MeanCt = 0) and so this gene is assigned as "Negative" in its respective CtCheck column. S shows unreliable duplicates, so it is assigned as "Undetermined" and N shows a Ct value lower than MaxCt (N(MeanCt) = 33.465), so it is assigned as "Positive". This sample is directly assigned as "Undetermined" as we don't have enough reliable results to make an assignment.
Sample 5 For this sample, RdRp (MeanCt = 34.720) and S (MeanCt = 31.175) show Ct values lower than MaxCt, so both genes are assigned directly as "Positive". As a consequence, the whole sample is assigned as "Positive". Note that sample 5 has "lost" its wells in the Melting Curves Analysis so it is not considered for this analysis.

Sample 6
Neither RdRp nor N have amplified in this sample (MeanCt = 0) so both genes are assigned as "Negative". Even if S (MeanCt = 31.770) is assigned as "Positive", the sample is finally assigned as "Negative" because 2 of our 3 target genes are assigned as "Negative".

Sample 7
Both RdRp and N are assigned as "Check copy number" as they both show Ct values higher than MaxCt but lower than the RT-qPCR cycle number (RdRp(MeanCt = 35.295) and N(MeanCt = 39.760)). Copy number is calculated for both genes: while RdRp shows a copy number of 34.077 and is assigned as "Positive", N shows a copy number of 3.976 and is assigned as "Undetermined" (the copy number is so low that we cannot assign this sample with certainty). As we don't have 2 "Positive" genes, the sample is finally assigned as "Undetermined".
b.2.11) The ID_Result tab displays a simple list of all analysed IDs and their final assignation. This file can be found in the toy dataset in folder DYE-BioRad/output. For this analysis, ID_Result tab must look like this:

Manual 0) Before running your analysis
Before users run their own analysis, we first recommend to try out the Covid-19 toy dataset and to follow the manual provided in the app. Both the toy dataset and the manual can be downloaded by clicking the "Download Toy Dataset" and "Download Manual" buttons, respectively.

1) Analysis choice
First, users have to choose the qPCR method used (fluorescent probe (PROBE) or intecalating dye (DYE) RT-qPCR assay) and system (BioRad CFX or Applied Biosystems Quant Studio). Data coming from any other qPCR system have to be adapted to the format of one of the sample files in the toy dataset.
Upon clicking one of the "Analysis" options, a multi-option menu will be displayed in the grey box and a series of (empty) tabs will appear in the main panel on the right.

2) File input and parameter choice
As a first step, users must load the data straight from the RT-qPCR system into the app and finetune several parameters. Analysis-specific data types and input file formats are described in the shinyCurves accepts files directly exported from the qPCR system in different formats. Additionally, it is independent of the experimental setup, i.e. it will detect whether samples have been loaded into 96 or 364-well plates and the sample layout can be specified by the user, as long as the sample names follow a specific format (see "Input formatting" section)".
-Input formatting -it is compulsory that sample names for dilutions, positive and negative controls coincide with the following format: -Non-template-controls (NTC), usually H2O, is used to detect potential contamination and is not expected to amplify: NTC_gene e.g. NTC_N1 -Negative controls (negC), commonly human genes, in which no amplification is expected either: gene_negC e.g. N1_negC -Dilutions (if included) of the positive control (expected to amplify) and the target genes: gene_10-dil e.g. N1_10-5, RdRp_10-2 -Note: dilutions must compulsorily be 10-fold but non-consecutive points are allowed, i.e.
Users must make modifications in the Sample column of their data files.
To upload the data files into the app, users must click the analysis-specific Browse button pictured below.

a.1) BioRad CFX -both for the PROBE and DYE analyses, users have different file upload choices:
a.1.1) (Required) Excel (xlsx/xls) file with a tab named Data (containing Ct Quantification Results). (Optional) Another tab in the same xlsx/xls file named Run Information (containing the run settings). Tab names must not be modified.

a.1.2) (Required) CSV file with the Ct Quantification Results. (Optional) Another CSV file with the Run Information.
Note: Usually, these files have the common root name "Quantification Cq Results" or "Quantification Summary", and "Run Information" after directly exporting the data from a BioRad platform.

a.1.3) (Required-DYE ONLY -see Section 3 in this manual) ID_well.csv filewith ID, Target
and Well columns. This file contains the IDs of samples that have shown acceptable melting curves in the DYE-Melting Curves Analysis and can be downloaded from the ID_Well tab resulting from the DYE-Melting Curves Analysis.

a.2) Applied Biosystems Quant Studio
a.2.1) (Required) Excel (xlsx/xls) file with 2 tabs named Raw Data (containing fluorescence data) and Results (containing Quantification Ct Results). Other tabs are allowed, but will not be taken into consideration. Note: commonly in Applied BQS machines, wells in which no amplification is detected are defined as Undetermined. In shinyCurves, these values will be converted to NAs. a.2.2) (Required-DYE ONLY -see Section 3 in this manual) Additionally for DYE Analysis, users must upload an ID_well.csv file with ID, Target and Well columns. This file must contain the IDs which have shown acceptable melting curves in the DYE-Melting Curves Analysis. This file can be downloaded from the ID_Well tab after performing DYE-Melting Curves Analysis.
Upon successful loading of input data, the file-input bar should look like this:

a) Parameter Choice
Users are allowed to modify several parameters:


Name of the endogenous control (must written exactly as in the input files). Default: RNAseP  Maximum cycle number to consider that the amplification for the endogenous control has been successful. Default: 35


Serial dilutions: number of serial dilutions used in the standard curve. If 0 is chosen, the standard curve will neither be plotted nor used as a criterion for result assignation. Default: 4  Standard concentration: number of viral nucleic acid molecules per µl contained in the stock control (copies/µl). This will be diluted as specified below to construct a standard curve for viral copy number estimation. Default: 400000  Ct value, number of cycles equal to or below which a sample will be assigned as "Positive" (MaxCt). If the presence of amplification of a sample at any cycle will be considered as "Positive" then MaxCt = number of qPCR cycles. When studying multiple genes, number of necessary genes assigned as "Positive" to consider a sample "Positive" (#PosGenes). Default: 1


Use of estimated copy number as a result assignation criterion in genes with Ct values falling between the maximum cycle number to consider a sample "Positive" and the maximum cycle number. Default: Yes When "No" is chosen, samples will be assigned a result using only the Ct value cutoff criterion. When "Yes" is chosen, users must fill another option:  Copy number above which a gene will be assigned as "Positive" (MinCopy#). Default: 4 IMPORTANT: To differentiate wells in which no amplification is detected from wells in which no sample is charged, NA/NaN values in the Ct column for samples with NO AMPLIFICATION will be converted to 0 in the Analysis tab.

3) Melting Curves (DYE)
Before running DYE Analysis, users are allowed to plot melting curves for all samples in order to discard those which show unreliable melting temperature (Tm) peaks (indicating the presence of unspecific amplification products). For this purpose, users must click the "Melting Curves" option in the DYE menu, which will display a new multi-option menu and 3 new tabs in the main panel.

a) Load data
In this section, users must upload Melting Curve Result files and Quantification Results files.
-Input formatting: all filenames must have a common root name and end with "_gene.csv" (e.g. DYE_BioRad_96w_Melt Curve RFU Results_RdRp.csv). File content must not be modified. Note: Usually, these files have the common root name "Melt Curve RFU Results" after direct export from BioRad CFX platform.
-Upload: to upload the data files into the app, users must click the analysis-specific "Browse" button shown below. a.1.2) Quantification Results: users must upload the "Quantification Results" file in xlsx/xls format. Data will be read from the tab called Data. The purpose of this file is to connect the independent wells from the "Melt Curve RFU Result" csv files (previously uploaded) with their respective Ct values in the "Quantification Results" file. Instead of the "Quantification Results" file, users are allowed as well to upload a "hand-made" ID_Well.csv, with columns ID, Target and Well. Note: After direct export from a BioRad CFX system, the tab in the "Quantification Results" containing Ct values is usually called "0". Users have to change this tab name to "Data".
Upload this file using the button shown below:

a.2) Applied Biosystems Quant Studio
a.2.1) Melting Curve Results: users must upload the output in xlsx/xls format. RFU data will be read from Melt Curve Raw Data tab. Tab names must not be modified.

a.2.2) Quantification Results
: users must upload the same Applied output file in xlsx/xls format, but this time, data will be read from the Results tab. Tab names must not be modified. The purpose of this file is to connect the independent wells from the "Melt Curve RFU Result" csv files (previously uploaded) with their respective Ct values in the "Quantification Results" file. Instead of the "Quantification Results" file, users are also allowed to upload a "hand-made" ID_Well.csv, with columns ID, Target and Well.

b) Parameter choice
Melting curves are plotted using the meltcurve function from the 'qpcR' R package (Spiess, 2018) and users are allowed to fine-tune several options as follows: -Cutoff area: a peak area value to identify only those peaks with a higher area. Default: 10 -Lower and upper Tm borders: for peak area calculation. Default: 0.5 and 0.5 -First derivative transformed format: yes or no. Default: Yes

c) Melting Curves
After successfully loading the input data and making the parameter choices, the following tabs will appear in the main panel: -ID_Well: displays the ID_Well table (with columns Well, Target and ID) which is taken from the "Quantification Results" file.
-Melting Curves Plots: displays as many subtabs as genes analyzed. For each gene, a melting curve is plotted per well analyzed. If users select "No" in the First derivative transformed format option, raw fluorescence data are plotted in black and the first derivative curve in red. The identified melting peaks are marked with a dotted vertical line (Spiess, 2018).
If users select "Yes" in the First derivative transformed format option, only the first derivative curve will be plotted in black. The melting peaks identified are marked with a dotted vertical line.
Melting curves can be downloaded in pdf format by clicking the "Download PDF" button.
-Tm Table: displays the Tm Table (ID, Target, Well, Tm and Area columns) for those wells showing unique peak area values above the cutoff. The Tm Table can be downloaded in CSV format by clicking the "Download CSV" button.
-New ID_Well: similar to Tm Table but displaying only columns ID, Target and Well. This new ID_Well, which contains only those wells with acceptable and unique melting peaks, will be needed in the DYE-Analysis tab. It can be downloaded by clicking the "Download CSV" button.

4) Calling analysis a) PROBE/DYE Analysis
After successfully loading input data and adjusting parameters as specified in section 2, all tabs in the main panel should appear filled.
-Raw Data: displays the columns Well, Fluor, Target, ID and Cq read directly from input data.
-Run Information: displays run settings. If run information is not supplied, "No run information to show" will be printed.
-Ct Plate: displays a graphical representation of the plate with the Ct values read in each well. Note: Ct = 0 represent empty wells.
-Sample Plate: same as the Ct Plate, but displaying the name of the sample loaded in each well.
-(Optional) Standard Curve: if users have not included dilutions of all genes in the plate and do not want the standard curve to be plotted, they should choose 0 in the Serial dilutions option. In that case, the Standard Curve tab will only display the message "No standard curve to show". On the contrary, if dilutions of all genes have been provided, this tab will display a table and a graphical tab as follows:  Controls/Dilutions Summary Table: Fixed columns -Dilutions: as specified by the user.
-Copies: estimated copy number for each dilution using the formula Concentration/Dilution.
Variable columns -(Duplicates) Gene(Dup1) and Gene(Dup2): if users have included duplicates, each column will display the Ct value for each duplicate and dilution of the control target gene. Both columns will be displayed for all genes.
-(Duplicates) Gene(Avg): average Ct value for the duplicates in each sample.
-(No Duplicates) GeneCt: Ct value for each dilution. This column will be displayed for all genes.
 Standard Curve Plots: Independent standard curve plots for each of the target genes. The X-axis takes values from the Gene(Avg) column (when duplicates are present) and from the GeneCt column when they are not. The Y-axis always takes values from the logCopies column. The linear regression equation and the adjusted R 2 are shown. Note: dilutions without a Ct value are not included in the graph.
-Analysis: displays a long table with the central Analysis of the app, in which samples are assigned a result ("Positive", "Negative", "Undetermined"). This table varies depending on the user's parameter choices. It can be downloaded by clicking the "Download CSV" button.
Samples are assigned a result by following the criteria represented in Supplementary Figure 1 and described below:  Gene(MeanCt)/Gene(Ct): for all genes. If users have included duplicates and these do not differ significantly from each other (i.e. the absolute difference between Ct duplicates is smaller than 1.5), the mean Ct will be calculated and showed on column Gene(MeanCt). If duplicates differ from each other (>1.5 Ct), shinyCurves will assign "Undetermined" to this sample, as duplicates will not be considered reliable. If users have not included duplicates, the abovementioned column will be replaced by Gene(Ct) and the Ct value for a given sample will be taken directly from the data file. Note: wells with no amplification will show a 0, while wells with no sample will show NA.
 CtCheck: for each target gene. In this column, samples will be assigned a result based on their Ct value for that specific gene.
-If users have chosen not to include the use of estimated copy number as a result assignation criterion: a) Is the Ct value lower or equal to MaxCt and different from 0? Yes: the gene will be assigned as "Positive". No: the gene will be assigned as "Negative".
-If users have chosen to include the use of estimated copy number as a result assignation criterion: a) Is the Ct value higher or equal to MaxCt and lower or equal to the maximum cycle number? Yes: gene will be assigned as "Check copy number".

No: see b)
b) Is the Ct value lower or equal to MaxCt value and different from 0? Yes: gene will be assigned as "Positive". No: gene is equal to 0 (no amplification) so it will be assigned as "Negative".
 Assignment/FinalCtCheck: in this column, the independent CtCheck columns for all target genes are compared and each sample is assigned a final result (based exclusively on the Ct values).
-If users have chosen not to include the use of estimated copy number as a result assignation criterion, this column will be called Assignment.
a) Is the number of "Positive" genes higher than #PosGenes?
Yes: sample will be assigned as "Positive".

No: see b)
b) Is the number of "Undetermined" genes higher or equal to #PosGenes and higher or equal to the number of "Positive" and to the number of "Negative" genes? Yes: sample will be assigned as "Undetermined" (too many unreliable duplicates).
No: see c) c) Is the number of "Negative" genes higher than the number of "Positive" genes and higher than the number of "Check copy number" genes?
Yes: sample will be assigned as "Negative".
No: sample will be assigned as "Undetermined".
-If users have chosen to include the use of estimated copy number as a result assignation criterion this column will be call FinalCtCheck. a) Is the number of "Check copy number" genes higher or equal to #PosGenes and is it higher or equal to the number of "Positive" genes?
Yes: sample will be assigned as "Check copy number".
b) Is the number of "Check copy number" genes lower than #PosGenes and higher or equal to the number of "Positive" and "Negative" genes (independantly), and different from 0? Yes: sample will be assigned as "Check copy number".

No: see c)
c) Is the number of "Positive" genes higher than #PosGenes?
Yes: sample will be assigned as "Positive".

No: see d)
d) Is the number of "Undetermined" genes higher than #PosGenes and higher or equal to the number of "Positive" and "Negative" genes? Yes: sample will be assigned as "Undetermined".
No: see e) e) Is the number of "Negative" genes higher than the number of "Positive" genes and higher than the number of "Check copy number" genes? Yes: sample will be assigned as "Negative".
No: sample will be assigned as "Undetermined".
At this point, the analysis will be finished for users choosing not to use the estimated copy number as a result assignation criterion. The following columns will only appear when that option is chosen.
 LogCopies: estimated copy number using Ct values and the gene-specific standard curve (formula: Ct * Slope + Coefficient).
 CopyCheck: for each target gene. In this column, samples will be assigned a result based on their estimated gene copy number.
a) Is the copy number higher or equal to MinCopy#? Yes: gene will be assigned as "Positive".
No: gene will be assigned as "Undetermined".
 FinalCopyCheck: in this column, the independent CopyCheck columns for all target genes are compared and each sample is assigned a final result (based on the estimated gene copy number).
a) Is the number of "Undetermined" genes higher or equal to #PosGenes and to the number of "Positive" genes? Yes: sample will be assigned as "Undetermined". No: see b) b) Is the number of "Positive" genes higher than #PosGenes?
Yes: sample will be assigned as "Positive". No: sample will be assigned as "Undetermined".
 Assignment: this column takes the final assignation results for each sample respectively from the FinalCtCheck and the FinalCopyCheck columns (depending on which criteria have been used to assign a result for each sample).
-ID_Well: displays a table with columns Well, Target and ID for all wells, which can be downloaded by clicking the "Download CSV" button.
-ID_Result: displays a table with columns ID and Interpretation for all samples. The Interpretation column is filled with the Assignment column of the Analysis tab. This table can be downloaded by clicking the "Download CSV" button. Note: these files will be needed to perform the Amplification Curves analysis in the PROBE analysis.

5) Amplification Curves (PROBE)
After completing the PROBE Analysis, users may plot the amplification curves for all samples.
For this purpose, they should click the "Amplification Curves" option in the PROBE menu, which will display a new multi-option menu and 4 new tabs in the main panel.

a) Load Data
In this section, users have to upload independent files with the amplification results for each gene.
a.1) Quantification Amplification RFU Results: users must upload independent CSV files (one per gene).
-Input formatting: all filenames must have a common root name and end with "_gene.csv" (e.g. PROBE_BioRad_364w_Quantification Amplification Results_N1.csv) or simply be named "gene.csv" (e.g. N1.csv, RdRp.csv). The file content must not be modified. Note: Usually, these files have the common root name "Quantification Amplification Results" after direct export from a BioRad CFX platform. Note: When analyzing Applied BQS data, these files can be obtained in the Conversion tab in the Analysis-Applied Biosystems Quant Studio option.
-Upload: to upload the data files into shinyCurves, users must click the analysis-specific "Browse" button shown below.
Additionally, users must upload the ID_well.csv and ID_result.csv files obtained from the main analysis (Analysis -BioRad CFX/Applied Biosystems Quant Studio). These must be uploaded into the cells shown below, respectively.
-Others: users must also specify: -Name of the endogenous control. Default: RNAseP -Number of cycles performed in the RT-qPCR. Default: 40

b) Amplification Curves
After successfully loading the input data, the following tabs will appear in the main panel: -ID_Well: displays the ID_Well table directly from the uploaded file.
-ID_Result: displays the ID_Result table directly from the uploaded file.
-General Plots: displays the amplification curves of all the analyzed samples for each gene. The X-axis represents the cycle numbers (Ct) while the Y-axis corresponds to the RFU data. These plots are generated by the R package 'plotly' (Sievert, 2020) and are interactive, which means that, when the mouse is passed over a curve, a label indicating the Sample ID, Well, RFU data and Interpretation of that sample will be displayed. Samples assigned as "Positive" are represented in green, those assigned "Negative" in red and "Undetermined" samples in blue. Amplification curves can be downloaded in png format by clicking the camera button on the upper right side of the plot.
-Undetermined Samples: displays as many subtabs as genes analyzed. Each tab shows the individual amplification curves for each sample that has been assigned as "Undetermined", together with all the "Positive" and "Negative" samples. If no "Undetermined" samples are present in an experiment, these tabs will display the message "No Undetermined samples to plot". Amplification curves can be downloaded in png format by clicking the thecamera button on the upper right side of the plot.