[d01132]: / bin / convert_to_10x_dir_files.py

Download this file

61 lines (48 with data), 1.5 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
"""
Convert input file to 10x data dir
"""
import os
import sys
import argparse
import logging
import numpy as np
import pandas as pd
from scipy import io
import scanpy as sc
import anndata as ad
SRC_DIR = os.path.join(
os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "babel"
)
assert os.path.isdir(SRC_DIR)
sys.path.append(SRC_DIR)
from genomic_interval import GenomicInterval as GI
import adata_utils
import utils
logging.basicConfig(level=logging.INFO)
def build_parser():
parser = argparse.ArgumentParser()
parser.add_argument("input", type=str, help="Input file to convert")
parser.add_argument("outdir", type=str, help="Output directory to create")
parser.add_argument(
"--mode", "-m", type=str, default="ATAC", choices=["ATAC", "RNA"]
)
parser.add_argument(
"--transpose", "-t", action="store_true", help="Transpose before saving"
)
return parser
def main():
parser = build_parser()
args = parser.parse_args()
_, input_ext = os.path.splitext(args.input)
if input_ext == ".h5ad":
x = ad.read_h5ad(args.input)
elif input_ext == ".h5":
if args.mode == "RNA":
x = sc.read_10x_h5(args.input)
else:
x = utils.sc_read_10x_h5_ft_type(args.input, "Peaks")
else:
raise ValueError(f"Unrecongized file extension: {input_ext}")
adata_utils.write_adata_as_10x_dir(x, args.outdir, transpose=args.transpose)
if __name__ == "__main__":
main()