Combine all the pickled neutcurve.CurveFits from plates for this serum into a
single neutcurve.CurveFits:
Combining the curve fits for group='human', serum='flu-seqneut-2026-UWMC-023' from pickle_fits=['results/plates/plate8/curvefits.pickle']
Get the plate that each replicate was measured on.
Each plate records this in its curvefits.csv, so it does not have to be parsed out
of the replicate name (a plate_barcode), which would be ambiguous when one plate
name is a prefix of another:
flu-seqneut-2026-UWMC-023 was measured on 1 plate(s): ['plate8']
Indicate how we are calculating the titer:
Calculating with serum_titer_as='midpoint'
Get all the per-replicate fit params with the titers.
We also convert the IC50 to NT50, and take inverse of midpoint to get it on same
scale as NT50s:
flu-seqneut-2026-UWMC-023 has titers for a total of 148 viruses
Correlate NT50s with midpoints of curves
Plot the correlation of the NT50s with the midpoint (this is an interactive plot,
mouse over points for details).
This plot can help you determine if you made the correct choice of serum_titer_as
when choosing to use the midpoint or NT50 for the titer.
For titers where they are well correlated it should not matter which you chose.
But if there are titers far from the correlation line, you should look at those
measurements and curves to make sure you made the correct choice of calculating the
titer as the NT50 versus midpoint:
Plot median titers and determine if they pass QC
Get the median titers for each virus across replicates, then add these median titers
to the per-replicate titers and calculate the fold-change in titer between each
replicate and its median.
Finally, for each virus indicate whether it passes the QC:
Using the following qc_thresholds={'min_replicates': 1, 'max_fold_change_from_median': 6, 'viruses_ignore_qc': []}
Now plot the per-replicate and median titers, indicating any viruses that failed QC.
Note that potentially some of these titers may still be retained if the viruses in
question are specified in viruses_ignore_qc of qc_thresholds.
Plot individual curves for any viruses failing QC
Plot individual curves for viruses failing QC.
Note that potentially some of these titers may still be retained if the viruses in
question are specified in viruses_ignore_qc of qc_thresholds.
Neutralization curves for the 0 viruses failing QC:
No curves fail QC
Get the viruses to drop for QC failures
Drop any viruses that fail QC and are not specified in viruses_ignore_qc of
qc_thresholds.
Dropping 0 viruses for failing QC:
{}
Writing QC drops to results/sera/human_flu-seqneut-2026-UWMC-023/qc_drops.yml
Write the individual per-replicate titers to a file.
These are all of the replicates that passed the QC applied when their plate was
processed, and so are not filtered by the per-serum QC just applied above.
Instead, the dropped_by_qc column indicates whether a replicate's virus was dropped
by that per-serum QC, making this file a superset of the titers written below.
Note that the per-serum QC drops a virus rather than an individual replicate, so this
column has the same value for all replicates of a virus:
Writing per-replicate titers to results/sera/human_flu-seqneut-2026-UWMC-023/titers_per_replicate.csv
Plate-to-plate correlation of titers
If this serum was measured on more than one plate, compare the titers between each
pair of plates to assess plate-to-plate reproducibility.
The titer for a strain on a plate is the median over all of that plate's barcodes,
all of which have already passed the per-plate QC applied when the plate was
processed.
All strains are shown, colored by whether they are retained in the final titers or
were dropped just above by the per-serum QC on replicate-to-replicate variation.
Use the show strains dropdown at the bottom of the plots to show only the
retained or only the dropped strains, and set it back to all to show all of them.
Note that a strain listed in viruses_ignore_qc of qc_thresholds is colored as
retained even if it fails the QC, because it is kept in the final titers; mouse over
a point for the details.
The Pearson correlation is reported both over all strains and over just the retained
strains, and the dashed line is y = x.
flu-seqneut-2026-UWMC-023 was measured on only one plate (plate8), so there is no plate-to-plate correlation to show.
Get and plot the neutralization curves for all retained viruses
First, get the CurveFits for just those retained viruses (dropping ones that fail
QC), and plot:
Saving plot of curves to results/sera/human_flu-seqneut-2026-UWMC-023/curves.pdf
Save the CurveFits to a pickle file:
Writing curve fits to results/sera/human_flu-seqneut-2026-UWMC-023/curvefits.pickle
Write the titers (excluding QC dropped viruses) to a CSV:
Writing titers to results/sera/human_flu-seqneut-2026-UWMC-023/titers.csv