about summary refs log tree commit diff
path: root/r_qtl
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2023-12-27 08:08:31 +0300
committerFrederick Muriuki Muriithi2023-12-27 08:08:31 +0300
commit46410163ca402660434b09a8fc8ec7b12b89d8a1 (patch)
tree7fc55ed054a4770ca4fd72c44e6dd501deb668b6 /r_qtl
parent8ababbb1cfbdbf3c26d9599253c6d45670c49046 (diff)
downloadgn-uploader-46410163ca402660434b09a8fc8ec7b12b89d8a1.tar.gz
Tests: Add tests for parsing gmap files.
Diffstat (limited to 'r_qtl')
-rw-r--r--r_qtl/r_qtl2.py31
1 files changed, 18 insertions, 13 deletions
diff --git a/r_qtl/r_qtl2.py b/r_qtl/r_qtl2.py
index 26d6dd4..a221f26 100644
--- a/r_qtl/r_qtl2.py
+++ b/r_qtl/r_qtl2.py
@@ -65,20 +65,27 @@ def genotype_data(zfile: ZipFile, cdata: dict) -> Iterator[dict]:
 def map_data(zfile: ZipFile, map_type: str, cdata: dict) -> dict:
     """Read gmap files to get the genome mapping data"""
     assert map_type in ("genetic-map", "physical-map"), "Invalid map type"
-    map_key = {"genetic-map": "gmap", "physical-map": "pmap"}[map_type]
-    if not cdata.get("geno_transposed", False):
-        with zfile.open(cdata[map_key]) as gmapfile:
+    map_file = cdata[{
+        "genetic-map": "gmap",
+        "physical-map": "pmap"
+    }[map_type]]
+    # TODO: Might need to check `gmap_transposed` and `pmap_transposed` instead
+    #  of `geno_transposed` -- see
+    #  https://github.com/rqtl/qtl2data/blob/main/ArabMAGIC/arabmagic_tair8.json
+    #  for the *_transposed values
+    transposed_dict = {
+        "genetic-map": "gmap_transposed",
+        "physical-map": "pmap_transposed"
+    }
+    if not cdata.get(transposed_dict[map_type], False):
+        with zfile.open(map_file) as gmapfile:
             reader = csv.DictReader(
                 filter(lambda line: not line.startswith("#"),
                        io.TextIOWrapper(gmapfile)),
                 delimiter=cdata.get("sep", ","))
-            return {
-                line["marker"]: {
-                    key: value for key,value in line.items() if key != "marker"
-                } for line in reader
-            }
+            return tuple(row for row in reader)
 
-    with zfile.open(cdata["gmap"]) as gmapfile:
+    with zfile.open(map_file) as gmapfile:
         lines = [[field.strip() for field in
                   line.strip().split(cdata.get("sep", ","))]
                  for line in
@@ -87,11 +94,9 @@ def map_data(zfile: ZipFile, map_type: str, cdata: dict) -> dict:
 
     headers = tuple(line[0] for line in lines)
     return reduce(
-        lambda gmap, row: {
-            **gmap,
-            row[0]: dict(zip(headers[1:], row[1:]))},
+        lambda gmap, row: gmap + (dict(zip(headers, row)),),
         zip(*(line[1:] for line in lines)),
-        {})
+        tuple())
 
 def read_r_qtl2_files(filepath: Path):
     """Read R/qtl2 format zip files."""