Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
227 commits
Select commit Hold shift + click to select a range
e43dd17
Only compute clust_lik; don't change underlying likelihood data
julianhess Dec 2, 2021
4f748ea
Split rephase into probability/realization
julianhess Dec 6, 2021
69efc10
Compute likelihood in both phase orientations
julianhess Dec 6, 2021
fd60e52
Compute prior in both phase orientations
julianhess Dec 6, 2021
95cd50b
Pick new cluster accounting for phasing state
julianhess Dec 6, 2021
81e4469
Apply some commits from fastphase branch
julianhess Dec 6, 2021
f7e360c
Apply more commits from fastphase
julianhess Dec 6, 2021
e9a9f00
Eliminate self.rephase
julianhess Dec 6, 2021
b75ae38
Add clarifying comment
julianhess Dec 6, 2021
6d904da
Draft commit of getting rid of garbage cluster
julianhess Dec 6, 2021
575ae56
Fix clust_sums update bug
julianhess Dec 7, 2021
6d1c991
Bump DP alpha
julianhess Dec 7, 2021
4e9a00a
Fix another bug related to getting rid of garbage cluster
julianhess Dec 7, 2021
627b059
Avoid divide by zero warning
julianhess Dec 7, 2021
13498be
Fix bug computing overall likelihood
julianhess Dec 7, 2021
2cd6eb4
adj_BC working again, accounting for phasing?
julianhess Dec 7, 2021
f6b5dc5
Incrementally update relative posterior estimate
julianhess Dec 8, 2021
b8155ad
Remove another vestige of garbage clusters
julianhess Dec 9, 2021
d441843
Initialize clust_counts to respect new phasing indexing scheme
julianhess Dec 9, 2021
02ee203
Initial commit of cluster splitting
julianhess Dec 9, 2021
e12d4a9
Initial commit of new burnin criterion
julianhess Dec 10, 2021
275d990
Properly cycle through cluster colors
julianhess Dec 14, 2021
a851663
Make adjacent segment penalty a prior, not a likelihood
julianhess Dec 17, 2021
9b78b34
Add temperature parameter
julianhess Dec 22, 2021
3ddffcd
Add simple overall likelihood calculation
julianhess Dec 22, 2021
3468a33
Use Dir-Cat marg. lik. in overall posterior
julianhess Jan 5, 2022
c9bb0ad
Don't rescale adjacency likelihoods
julianhess Jan 11, 2022
acc88e0
Use multi DP prior; use correct joint probability for p(clust,phase|X)
julianhess Jan 11, 2022
f4ce65e
Add note
julianhess Feb 8, 2022
5f08b89
Temporarily return individual components of overall joint likelihood
julianhess Feb 8, 2022
6a10f47
More flexible stopping criteria
julianhess Feb 8, 2022
d464c7c
Don't track unassigned segs; unnecessary for warm start
julianhess Feb 8, 2022
b6b2348
Update comments accounting for warm start
julianhess Feb 8, 2022
78059b9
Print abbreviated cluster summary for warm start
julianhess Feb 9, 2022
99ceff4
Use correct count marginal likelihood
julianhess Feb 9, 2022
eb1abc5
Misc scrap commits to old overall likelihood function
julianhess Feb 9, 2022
5cf3e2d
Remove outdated TODO
julianhess Feb 9, 2022
d88d7d9
Remove cruft
julianhess Feb 9, 2022
d0e6e7d
Unfinished burnin-related code
julianhess Feb 9, 2022
1f43c59
Try clustering on the SNP level
julianhess Feb 9, 2022
5d963fd
Try moving segments by (almost) default
julianhess Feb 9, 2022
6d40fc3
Can't split segs of length 1
julianhess Feb 9, 2022
81686cb
Diagnostic code for printing each transition
julianhess Feb 9, 2022
673a172
Rescale DP counts by average segment length
julianhess Feb 25, 2022
0d51cce
Keep track of segmentation breakpoints
julianhess Feb 25, 2022
719fc7a
Memoize segment min/maj counts
julianhess Feb 25, 2022
bf337b6
Fix indexing bug
julianhess Feb 25, 2022
a63f5de
Merge adjacent segments if they're assigned to the same cluster
julianhess Feb 25, 2022
daa625f
Need to consider both ends of segments
julianhess Feb 25, 2022
d7c9bd8
Allow segments to be broken
julianhess Feb 25, 2022
afa35ef
Add breakpoints when splitting segment
julianhess Feb 25, 2022
10629c3
Update seg_sums for phase flips
julianhess Feb 25, 2022
dd7ffdf
Fix style
julianhess Feb 27, 2022
ff508a9
Add hash mapping cluster indices -> breakpoints
julianhess Feb 27, 2022
c135bec
Track breakpoints within each cluster
julianhess Mar 2, 2022
4bccf1a
Improve efficiency of computing adjacency likelihood
julianhess Mar 3, 2022
3ea0fc8
Allow beta hyperparam to be specified
julianhess Mar 4, 2022
97d3d7a
Add beta hyperparameter to rephasing
julianhess Mar 7, 2022
dc5f9c7
Compute segmentation likelihood on the fly
julianhess Mar 7, 2022
0b510e7
Explicitly remove empty segment from nonsplit likelihood
julianhess Mar 17, 2022
366ab1f
Return proper adjacency likelihood with betahyp > 0
julianhess Mar 17, 2022
5c01088
Fix up overall likelihood function
julianhess Apr 5, 2022
6ed69eb
Sequentially scan over segments if >90% have been touched
julianhess Apr 5, 2022
09fa7ca
Fix up cluster splitting
julianhess Apr 5, 2022
90b474d
Can't update likelihood by subtracting it off like that
julianhess Apr 7, 2022
5e7dce1
Fix bug introduced in 09fa7ca
julianhess Apr 7, 2022
c5dd58d
Put breakpoint adding into its own function
julianhess Apr 7, 2022
56a6543
segs -> snps
julianhess Apr 9, 2022
941f051
fix typo
julianhess Apr 9, 2022
6faa2b1
Properly update breakpoints when splitting cluster
julianhess Apr 9, 2022
5fe512b
Clarify which breakpoints get updated
julianhess Apr 13, 2022
b6e5d05
Memoize segment misphase probabilities
julianhess Apr 13, 2022
0bee5ff
Fix a couple phase tracking bugs
julianhess Apr 13, 2022
8899a5b
Roughly(?) compute overall phasing likelihood
julianhess Apr 13, 2022
bf61793
Remove phase correction from initial MCMC
julianhess Apr 14, 2022
287b0a8
Save only MLE breakpoint
julianhess Apr 14, 2022
a14b8d9
Make burnin criterion more stringent
julianhess Apr 14, 2022
56afcd8
Remove more cruft
julianhess Apr 14, 2022
73430e3
Add beta hyperparameter to A_MCMC
julianhess Apr 14, 2022
a2a7c97
Set segmentation betahyp based on coverage
julianhess Apr 14, 2022
14c736c
Simplify initial segmentation visualization
julianhess Apr 14, 2022
8ad2500
Treat p(clust,phase) jointly, not p(clust|phase)
julianhess Apr 14, 2022
296b5f0
Exclude chimeric reads by default
julianhess Apr 14, 2022
2a81227
Only need to return dataframe, since we are using MLE from initial se…
julianhess Apr 14, 2022
cf97fa7
Remove cruft
julianhess Apr 14, 2022
eb1e7eb
Burnin check
julianhess Apr 14, 2022
5309979
Add contingency to AMCMC if burnin criterion is never met due to earl…
julianhess Apr 14, 2022
f37451e
Save samples after DP burnin
julianhess Apr 14, 2022
9ae68fc
segs_to_clusters -> snps_to_clusters
julianhess Apr 14, 2022
b1c38f8
Don't count prior twice when opening new cluster
julianhess Apr 15, 2022
9771739
Overhaul plotting segs from DP iterations
julianhess Apr 17, 2022
a42df53
Overhaul clust viz. code
julianhess Apr 18, 2022
6c2e149
Visualize SNPs
julianhess Apr 18, 2022
6e5f80d
Fix bugs with plotting SNPs
julianhess Apr 18, 2022
69828c2
Clean up DP wrapper code
julianhess Apr 18, 2022
44a42ab
Return likelihood trace
julianhess Apr 18, 2022
662b9b1
Overhaul plot colorization
julianhess Apr 18, 2022
c8490fd
No magenta
julianhess Apr 19, 2022
c3bf48d
Use new colorscheme
julianhess Apr 19, 2022
dc6887d
Update ADP wrapper
julianhess Apr 19, 2022
4c75874
Bump betahyp
julianhess Apr 19, 2022
a5182ba
Burn in for longer
julianhess Apr 19, 2022
f4bd8e5
Keep cluster indices more consistent
julianhess Apr 19, 2022
4bef4e0
Get rid of code to move clusters
julianhess Apr 19, 2022
37fde59
Commit some diagnostic code just in case
julianhess Apr 19, 2022
2ab5629
Bump touch90->95%
julianhess Apr 19, 2022
c4662ec
Add TODO note
julianhess Apr 19, 2022
8235ff0
Print MCMC trace progress
julianhess Apr 19, 2022
05f408d
Bump AMCMC segmentation docker
julianhess Apr 19, 2022
c3b58d7
Update ADP workflow
julianhess Apr 19, 2022
2c8bc40
Install distinctipy
julianhess Apr 19, 2022
5fcee32
Bump docker
julianhess Apr 19, 2022
3d96d27
Initial commit of het selection notebook
julianhess Apr 19, 2022
1da6f43
Speed up AMCMC early convergence contingency
julianhess Apr 19, 2022
8b0e569
Use PoD genotyper for het pulldown
julianhess Apr 19, 2022
aabd727
Visualize AMCMC
julianhess Apr 19, 2022
c094f6a
Increase eagle threads
julianhess Apr 19, 2022
c703ffb
Save segmentation plot from AMCMC
julianhess Apr 19, 2022
f6e0c7b
Update ADP task definition
julianhess Apr 20, 2022
b619cd0
Increase SNP opacity
julianhess Apr 20, 2022
a66e2e7
Bump mandatory pandas version
julianhess Apr 20, 2022
e999013
Bump ADP docker
julianhess Apr 20, 2022
a142ce9
Restrict ADP plot to chromosome, if specified
julianhess Apr 20, 2022
ef38d99
Bump ADP docker
julianhess Apr 20, 2022
f8ca163
Merge pull request #4 from getzlab/all_SNPs
julianhess Apr 20, 2022
4aca76a
Add legend
julianhess Apr 20, 2022
f703f2f
Merge branch 'all_SNPs'
julianhess Apr 20, 2022
18b22ee
Merge branch 'master' into coverage_mcmc_integration
julianhess Apr 20, 2022
1c818a1
Add TODO for parsing cytoband file
julianhess Apr 25, 2022
adfc850
Remove temperature
julianhess Apr 26, 2022
a75de21
persistant->persistent
julianhess Apr 26, 2022
ff23bc9
Add forgetten brackets]
julianhess Apr 26, 2022
35b2690
t/n_bam -> tumor/normal_bam
julianhess Apr 26, 2022
301d1df
Run on Richter's
julianhess Apr 26, 2022
35c46ac
Allow cytoband file to be specified in ADP
julianhess Apr 26, 2022
c8a1652
Minor formatting
julianhess Apr 26, 2022
aa5676d
Don't need separate script to collect ADP shards
julianhess Apr 26, 2022
d0affc1
Use likelihoods computed in ADP
julianhess Apr 26, 2022
54ec4b1
Explicitly pass in ref_fasta to capy.seq
julianhess Apr 26, 2022
1b84ae0
Don't need this anymore
julianhess Apr 26, 2022
42e79f8
Add progress bar
julianhess Apr 26, 2022
904053f
Remove unused function
julianhess Apr 26, 2022
fd55e13
Hack to fix contig names for hg19
julianhess Apr 26, 2022
6942849
Add cytoband header check
julianhess Apr 27, 2022
104953d
Bump ADP Docker
julianhess Apr 27, 2022
0dd0dd6
Speed up assigning targets to ADP clusters
julianhess Apr 27, 2022
4922536
Print log messages to stderr
julianhess Apr 27, 2022
e7673f0
Don't use such small value for covars=0
julianhess Apr 27, 2022
8d3917c
Don't use fragment std as a covar
julianhess Apr 27, 2022
add24cb
Remove empty clusters; remove extreme outlier targets
julianhess Apr 27, 2022
3b5fb40
Keep non-Z transformed columns
julianhess Apr 28, 2022
d8b7e22
Don't log transform covariates
julianhess Apr 28, 2022
2a3b1fb
Minor typo fix
julianhess Apr 28, 2022
70d924c
Save ADP segmentation samples
julianhess Apr 28, 2022
87cafef
Bump ADP memory
julianhess Apr 28, 2022
68036f0
remove arbitrary wgs threshold for using bin lens
oliverpriebe Apr 28, 2022
3fc423d
committing to ^C_.*_z$ covar convention
oliverpriebe Apr 28, 2022
4f27e28
fix cov_df naming issue and update cov_DP covar gather
oliverpriebe Apr 29, 2022
53627cc
Draft code for binning fraglen
julianhess Apr 29, 2022
bfa98a9
Unused code for mapping intervals to segments
julianhess Apr 29, 2022
1374932
Temporarily quit downsampling
julianhess Apr 29, 2022
cc7b057
Merge branch 'coverage_mcmc_integration' of github.com:julianhess/hap…
julianhess Apr 29, 2022
472aa6a
Set ADP betahyp dynamically
julianhess May 2, 2022
4ce8fac
Map coverage intervals to allelic segments
julianhess May 2, 2022
57032ae
Expand chrbdy plot to fill ylim
julianhess May 2, 2022
352b93a
Save allelic segmentation boundaries WRT coverage dataframe
julianhess May 2, 2022
7aa624a
Add segmentation pickle to wolF task
julianhess May 2, 2022
5203641
Initial commit of scattering cov MCMC over allelic segments
julianhess May 5, 2022
11fa172
Use specific version of interval splitter (for now)
julianhess May 5, 2022
217ee26
Misc bugs in run_coverage_MCMC call from __main__
julianhess May 5, 2022
c0942d6
Bump some dockers
julianhess May 5, 2022
44344b2
Added missing factor of 2
julianhess May 5, 2022
0e33a82
Use poscol instead of rename
julianhess May 10, 2022
b9bbf18
Use rolling convolution for smoothing fragment length
julianhess May 10, 2022
3b44cef
Generate DNAse/FAIRE covariates
julianhess May 10, 2022
9703046
Add FAIRE covariate to cov MCMC
julianhess May 10, 2022
07fea1e
Get rid of chrY; convert chrnames
julianhess May 10, 2022
c00c124
Compute fraglen covariate first (to remove bad bins immediately)
julianhess May 10, 2022
3e79b9f
Use midpoint when mapping bins to covariates
julianhess May 12, 2022
725b7b9
Make FAIRE optional
julianhess May 12, 2022
ee1f6b5
Add log exposure to Poisson regression
julianhess May 12, 2022
ce09d1f
Add smoothed FAIRE
julianhess May 12, 2022
3dcd389
Ignore FWBs and NPZs in build context
julianhess May 13, 2022
fdd53bd
Add cache_invalidate to Dockerfile to force updating Python modules
julianhess May 16, 2022
723fb61
Add bin width to cov MCMC prep task
julianhess May 16, 2022
136cfa3
Fix bad allelic seg index bug
julianhess May 16, 2022
2a09a0f
Need args
julianhess May 16, 2022
d89964d
Bump dockers, fix misc. workflow bugs
julianhess May 16, 2022
a9956b3
Properly export segment-level covMCMC files
julianhess May 16, 2022
49ea358
Temporarily disable saving visualization
julianhess May 16, 2022
fe309f3
ML_approx -> ML_gaussint
julianhess May 16, 2022
3fdc006
Initial commit of covMCMC cache
julianhess May 17, 2022
a5831fa
Fix sparse matrix definitions
julianhess May 17, 2022
1c7e098
tmp commit of breakpoints
julianhess May 17, 2022
f974844
Remove cruft code
julianhess May 17, 2022
65829ad
Index cov MCMC shards WRT seg index, not job number
julianhess May 17, 2022
9fc6ac3
Fix segment likelihood computation function
julianhess May 17, 2022
c818a01
Fix bug in 65829ad
julianhess May 19, 2022
36b823a
Add back log transform to covariates
julianhess May 19, 2022
7f6eb1f
Initial commit of covMCMC gather
julianhess May 23, 2022
6c43e33
Save covMCMC likelihood samples
julianhess Jun 2, 2022
f2d933b
Better starting values for mu/beta
julianhess Jun 7, 2022
dfa7681
Return Poisson Hessian
julianhess May 23, 2022
000b7fa
Add offset to Poisson regression
julianhess Jun 10, 2022
d41cdd6
Add simple normal prior to Poisson regression
julianhess Jun 10, 2022
5718c70
Allow PoisRegr priors to be specified; allow running without intercept
julianhess Jun 14, 2022
57e551a
Pass Poisson Hessian to downstream tasks
julianhess Jun 14, 2022
6502b35
Compute initial Poisson regression on ADP segment level
julianhess Jun 14, 2022
2c69a10
Bump covMCMC/prep dockers
julianhess Jun 14, 2022
fc9f1b5
Rename import
julianhess Jun 14, 2022
602e432
Fix SNP -> coverage bin mapping bug
julianhess Jun 14, 2022
5cd7cf2
Bump docker
julianhess Jun 14, 2022
ad094cd
Forgot to pass bin_width to coverage preprocessor
julianhess Jun 14, 2022
a5487f1
Bump Docker
julianhess Jun 14, 2022
0f2c8cd
Add covariate scale factor
julianhess Jun 30, 2022
93c53cd
Use nonlinear GC model
julianhess Jul 17, 2022
bfd6fa8
Save allelic clusters for each ADP segment
julianhess Jul 17, 2022
0858136
Add sim forcecalling workflow
julianhess Jul 23, 2022
a2170a6
Merge branch 'master' into coverage_mcmc_integration
julianhess Jul 23, 2022
181fff8
Explorations on quadratic GC content estimator
julianhess Jul 28, 2022
15796f4
Regenerate FAIRE tracks
julianhess Jul 28, 2022
92546dc
Use quadratic GC content on raw data rather than binned data
julianhess Jul 28, 2022
5107c3c
Load multiple FAIRE tracks
julianhess Jul 28, 2022
4af5402
Load in update covcollect format that counts bad reads
julianhess Jul 28, 2022
7bdb15e
Use covcollect branch that tallies bad reads
julianhess Jul 28, 2022
8695dc4
Draft code of force calling at het sites only
julianhess Jul 28, 2022
a8e965b
Specify workflow path locally
julianhess Jul 28, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
**/*.bam
**/*.call_stats.txt
**/*.fw?
**/*.bigWig
**/*.npz
23 changes: 23 additions & 0 deletions 21_genome.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,26 @@
normal_bai = "gs://fc-secure-e2772064-386d-4911-b242-d6ade82bf172/360c5959-3827-4b24-92e3-d57dbc5de2f6/gdc_api_file_download/15788922-9cf8-4c83-8040-47fa60b7d374/call-download_file/98e061cd-0586-4e56-85fb-c6cc6688dbff_wgs_gdc_realn.bai",
target_list = 200
)

# Richter's test (hg19)
import wolf
from wolF import workflow

import dalmatian
wm = dalmatian.WorkspaceManager("broad-firecloud-ibmwatson/Getz_Wu_Richters_WGS_UK")

wic = wolf.fc.WorkspaceInputConnector("broad-firecloud-ibmwatson/Getz_Wu_Richters_WGS_UK")
Pj = wic.get_pairs_as_joint_samples()

with wolf.Workflow(workflow = workflow.workflow, namespace = "HapASeg_Richters") as w:
for pair, p in Pj.loc[Pj["sample_type_T"] == "Richter"].iterrows():
w.run(
RUN_NAME = pair,
tumor_bam = p["output_bam_T"],
tumor_bai = p["output_bam_index_T"],
normal_bam = p["output_bam_N"],
normal_bai = p["output_bam_index_N"],
target_list = 2000,
ref_genome_build = "hg19"
)
break
85 changes: 85 additions & 0 deletions 40_het_selection.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import colorama
import copy
import itertools
import matplotlib.pyplot as plt
import matplotlib as mpl
import ncls
import numpy as np
import numpy_groupies as npg
import pandas as pd
import scipy.stats as s
import scipy.sparse as sp
import scipy.special as ss
import sortedcontainers as sc

plt.figure(1); plt.clf()
plt.figure(2); plt.clf()
plt.figure(30); plt.clf()
cut20_dens = {}
cut20_lod = {}
cut80_dens = {}
cut80_lod = {}
leg = []
for depth in [15, 20, 30, 60, 80, 200]:
# simulate good hets
cov = s.poisson.rvs(depth, size = 10000)
A = s.binom.rvs(cov, 0.5)
B = cov - A

# simulate bad hets
bad_cov = s.poisson.rvs(depth, size = 10000)
bad_frac = np.ones_like(bad_cov).astype(float)
for i in range(len(bad_frac)):
bad_frac[i] = np.random.choice([0.1, 0.2, 0.3, 0.4, 0.6, 0.7, 0.8, 0.9])
A_bad = s.binom.rvs(bad_cov, bad_frac)
B_bad = bad_cov - A_bad

# old criterion: beta density between 0.6 and 0.4
betafrac = np.diff(s.beta.cdf([0.4, 0.6], A[:, None] + 1, B[:, None] + 1))
betafrac_bad = np.diff(s.beta.cdf([0.4, 0.6], A_bad[:, None] + 1, B_bad[:, None] + 1))

# new criterion: log-odds ratio
betalod = s.beta.logsf(0.5, A + 1, B + 1) - s.beta.logcdf(0.5, A + 1, B + 1)
betalod_bad = s.beta.logsf(0.5, A_bad + 1, B_bad + 1) - s.beta.logcdf(0.5, A_bad + 1, B_bad + 1)

# ROC curves
dens_cdf = np.zeros([1000, 2])
for i, cut in enumerate(np.linspace(0, 1, 1000)):
dens_cdf[i, 0] = (betafrac >= cut).mean()
dens_cdf[i, 1] = (betafrac_bad >= cut).mean()

lod_cdf = np.zeros([1000, 2])
for i, cut in enumerate(np.linspace(0, np.abs(np.r_[betalod_bad, betalod]).max(), 1000)):
lod_cdf[i, 0] = (np.abs(betalod) <= cut).mean()
lod_cdf[i, 1] = (np.abs(betalod_bad) <= cut).mean()

plt.figure(30)
st = plt.step(dens_cdf[:, 1], dens_cdf[:, 0])
color = st[0].get_color()
plt.step(lod_cdf[:, 1], lod_cdf[:, 0], color = color, linestyle = ":")

leg.append(st)

cut20_dens[depth] = np.linspace(0, 1, 1000)[np.flatnonzero(dens_cdf[:, 1] <= 0.2)[0]]
cut80_dens[depth] = np.linspace(0, 1, 1000)[np.flatnonzero(dens_cdf[:, 0] <= 0.8)[0]]
cut20_lod[depth] = np.linspace(0, np.abs(np.r_[betalod_bad, betalod]).max(), 1000)[np.flatnonzero(lod_cdf[:, 1] >= 0.2)[0]]
cut80_lod_idx = np.flatnonzero(lod_cdf[:, 0] >= 0.8)[0]
cut80_lod[depth] = np.linspace(0, np.abs(np.r_[betalod_bad, betalod]).max(), 1000)[cut80_lod_idx]

plt.scatter(lod_cdf[cut80_lod_idx, 1], lod_cdf[cut80_lod_idx, 0], marker = 'x', color = color)
plt.text(lod_cdf[cut80_lod_idx, 1], lod_cdf[cut80_lod_idx, 0], "{0:.2f}".format(cut80_lod[depth]), color = color)

plt.figure(1)
sc = plt.scatter(cov, betafrac, alpha = 0.1, s = 10)
plt.scatter(depth, np.diff(s.beta.cdf([0.4, 0.6], depth/2 + 1, depth/2 + 1)), color = color, marker = "x")

cov_range = np.r_[cov.min():cov.max()]
cov_cum = np.nan*np.ones_like(cov_range)
for i, c in enumerate(cov_range):
cov_cum[i] = betafrac[cov >= c].mean()

plt.figure(2)
plt.scatter(cov_range, cov_cum)

plt.figure(3)
plt.legend([x[0] for x in leg], ["15x", "20x", "30x", "60x", "80x", "200x"])
Loading