crast 1.0.4

CRAST, Context RNA Alignment Search Tool
Documentation
import os
import subprocess as sbprcs
import shutil as shtl
from Bio import SeqIO as SqIO
import matplotlib.pylab as pylb
import matplotlib as mtpltlb
from bx.align import maf

def gt_drs():
  cr_wrk_dr = os.getcwd()
  hd, tl = os.path.split(cr_wrk_dr)
  ast_dr = hd + "/asts"
  prgrm_dr = "/usr/local" if not cr_wrk_dr.find("/home/masaki") != -1 else "/home/masaki/prgrms"
  cnd_prgrm_dr = "/usr/local/ancnd/envs/rsrch" if not cr_wrk_dr.find("/home/masaki") != -1 else "/home/masaki/prgrms/ancnd/envs/rsrch"
  return (cr_wrk_dr, ast_dr, prgrm_dr, cnd_prgrm_dr)

def rmv_al(dr):
  for entry in os.listdir(dr):
    entry_pth = os.path.join(dr, entry)
    if os.path.isfile(entry_pth):
      os.unlink(entry_pth)
    elif os.path.isdir(entry_pth):
      shtl.rmtree(entry_pth)

def rn_cmnd(cmnd):
  sb_prcs = sbprcs.Popen(
    cmnd,
    stdout = sbprcs.PIPE,
    shell = True
  )
  (otpt, er) = sb_prcs.communicate()
  rtrn_cd = sb_prcs.wait()
  return (otpt, er, rtrn_cd)

def gt_nm_of_prcs():
  nslts = os.getenv("NSLOTS")
  if nslts is not None: 
    return int(nslts)
  else: 
    (otpt, er, stts) = rn_cmnd("nproc")
    return int(otpt)

def st_dr_cln(dr):
  if os.path.isdir(dr):
    rmv_al(dr)
  else:
    os.mkdir(dr)

def int_mtpltlb(): 
  prms = {
    "legend.fontsize": "x-large",
    "axes.labelsize": "x-large",
    "axes.titlesize":"x-large",
    "xtick.labelsize":"x-large",
    "ytick.labelsize":"x-large"
  }
  pylb.rcParams.update(prms)
  mtpltlb.rcParams['ps.fonttype'] = 42

def gt_prs_algns(algn_fl):
  prs_algns = []
  for algn in maf.Reader(open(algn_fl)):
    prs_algns.append((
      gt_algn_e_vl(algn),
      algn.components[0].src,
      algn.components[1].src
    ))
  return prs_algns

def gt_algn_e_vl(algn):
  if "E" in algn.attributes:
    return float(algn.attributes["E"])
  elif "E1" in algn.attributes:
    return float(algn.attributes["E1"])

def gt_prs_hmlg_rlts(inpt_fl):
  prs_hmlg_rlts = {}
  with open(inpt_fl) as inpt_hndl:
    lns = inpt_hndl.readlines()[1 :]
    for ln in lns:
      hmlg_rlt = ln.split()
      prs_hmlg_rlts[hmlg_rlt[0]] = hmlg_rlt[1]
  return prs_hmlg_rlts

def is_gn_prdctd(gn, rc_id, rf_sq_fl):
  for rc in SqIO.parse(rf_sq_fl, "fasta"):
    if rc.id == rc_id:
      if str(rc.description).find(gn) != -1:
        return True
      else:
        return False