o
    Uݢg                     @   s  d Z ddlmZ ddlZddlZddlmZmZ dZ	dZ
dZdZd	Zd
ZdZdZdZdZeee	eeeeegZdZdZdZdZedg dZeeededZeeededZeegZdZdZdZdZdZ edg dZ!edg dZ"d Z#d!Z$d"Z%d#Z&d$Z'e%e&e'gZ(d%d& Z)d,d(d)Z*d*d+ Z+dS )-z1Utilities for dealing with targeted and features.    )
namedtupleN)OFF_TARGET_SUBSAMPLEON_TARGET_SUBSAMPLEis_targetedZ	num_readsZnum_umisZnum_reads_cellsZnum_umis_cellsZmean_reads_per_umi_cells_log10Zmean_reads_per_umiZenriched_rpuZ
feature_idZfeature_namez#0071D9ZdarkgreyZ
_on_targetZ_off_targetZws_label)Zsubsample_suffixmetric_suffixlabelcolorZTargetedzNon-TargetedZrpu_estimate_pre_umi_filteringZrpu_estimate_post_umi_filteringZis_rpu_estimate_confident      RpuFitParamslog_rpu_thresholdZmu_highZmu_lowZsd_highZsd_lowZ
alpha_highZ	alpha_low
ClassStatsn_targeted_enrichedn_targeted_not_enrichedn_offtgt_enrichedn_offtgt_not_enrichedZ	sphericalZtiedZofftargets_onlyZ	both_tiedZboth_sphericalc                 C   s   | dk|dk@   }| dk|dk@   }|ttfv r/| dk|dk@   }| dk|dk@   }ntjtj}}t||||d}|S )zTGet number of targeted and off-target genes classified as enriched and non-enriched.TFr   )sum	BOTH_TIEDBOTH_SPHERICALnpnanr   )labelscallsmethodr   r   r   r   Zclass_stats r   h/oak/stanford/groups/akundaje/marinovg/programs/cellranger-9.0.1/lib/python/cellranger/targeted/utils.pyget_class_statsh   s   r   MbP?c              	   C   sn   d}d}t | }t|t | dt | d | }tjjjd| ||d}t|t j	|t j	|t j	t j	d}|S )zEstimates the mean and sd of the provided values (log reads per umi).

    using the median and quartiles. Sets the threshold at an FPR of 0.001 for
    calling genes as significantly different from this distribution.
    g{Gz?g{Gz@Z   
   g      ?)locscaler   )
r   medianmax
percentilescipystatsnormZppfr   r   )valuesZFPRZMIN_SDZNORM_10_90_NUM_SDSmusdr   paramsr   r   r   fit_offtarget_gaussianz   s   
"	r.   c                 C   s,   |   dv r	tjS |   dv rtjS |  S )z8Reformat internal labels to nicer labels for websummary.)ontargetz	on-target)	offtargetz
off-target)lowerTARGETED_WS_LABELr   OFFTARGET_WS_LABELtitle)targeting_groupr   r   r   reformat_targeted_label   s
   r6   )r   ),__doc__collectionsr   numpyr   r'   cellranger.constantsr   r   ZTARGETING_COLNAMEZREADS_COLNAMEZUMIS_COLNAMEZREADS_IN_CELLS_COLNAMEZUMIS_IN_CELLS_COLNAMEZLOG_RPU_CELLS_COLNAMEZRPU_COLNAMEZENRICHMENT_COLNAMEZFEATURE_ID_COLNAMEZFEATURE_NAME_COLNAMEZTARGET_FEATURE_METRICS_COLSZON_TARGET_COLORZOFF_TARGET_COLORZON_TARGET_METRIC_SUFFIXZOFF_TARGET_METRIC_SUFFIXZWsLabelr2   r3   ZTARGETING_WS_LABELSZEST_PREFILTER_RPU_COLNAMEZPOSTFILTER_RPU_COLNAMEZRPU_IS_CONF_EST_COLNAMEZMIN_OFFTARGET_GENESZMIN_RPU_THRESHOLDr   r   Z	SPHERICALZTIEDZOFFTARGETS_ONLYr   r   ZENRICH_METHODSr   r.   r6   r   r   r   r   <module>   s   	

