Source code for src.infer.zebraness

import numpy as np

from ..obj.motif_trajectory import MotifTrajectory, _motif_trajectory_as_array

[docs] def system_level_motif_zebraness( motif_trajectory : MotifTrajectory, axis=0 ) -> np.ndarray: c, _ = _motif_trajectory_as_array(motif_trajectory) shape = c.shape if axis == 0: c = c.reshape((1,)+shape) if axis > 1: raise NotImplementedError("compute_system_level_motif_zebraness so for only defined for maximum first axis being time axis or static motif concentration vector") shape = c.shape if shape[1]>3: raise NotImplementedError("Zebraness only defined for binary alphabet.") if len(shape)!=5: raise NotImplementedError("Zebraness only implemented for four-letter motifs.") number_of_timesteps = shape[0] concentration_of_zebra_ligations = np.zeros(number_of_timesteps) concentration_of_zebra_ligations += np.sum(c[:,:,-2,-1,:].reshape((number_of_timesteps,-1)), axis =1) concentration_of_zebra_ligations += np.sum(c[:,:,-1,-2,:].reshape((number_of_timesteps,-1)), axis=1) concentration_of_ligations_in_total = np.zeros(number_of_timesteps) concentration_of_ligations_in_total += np.sum( c[:,:,-2:,-2:,:].reshape((number_of_timesteps,-1)), axis=1 ) return concentration_of_zebra_ligations/concentration_of_ligations_in_total
[docs] def individual_motif_zebraness(c): shape = c.shape if len(shape)==4: c = c.reshape((-1,)+shape) if shape[1]>3: raise NotImplementedError("Zebraness only defined for binary alphabet.") if len(shape)!=5: raise NotImplementedError("Zebraness only implemented for four-letter motifs.") # Monomers don't have zebraness z = np.zeros(shape) # Zebraness of first binary motif z[:,-1,-2,-2:,:]+=1 z[:,-2,-1,-2:,:]+=1 # Zebraness of second binary motif z[:,:,-1,-2,:]+=1 z[:,:,-2,-1,:]+=1 # Zebraness of last binary motif z[:,:,-2:,-1,-2]+=1 z[:,:,-2:,-2,-1]+=1 # multiply by length y = np.zeros(shape) y[:,0,-2:,-2:,0] = 1. y[:,0,-2:,-2:,-2:] = 2. y[:,-2:,-2:,-2:,0] = 2. y[:,-2:,-2:,-2:,-2:] = 3. return z/y