|
29 | 29 |
|
30 | 30 | import pandas as pd |
31 | 31 |
|
32 | | -from . import db |
| 32 | +from . import db, broad_splits |
33 | 33 | from .broad_splits import broad_splits_dna_mapping |
34 | | -from .broad_splits import broad_splits_ser_mapping |
| 34 | +from .load import load_serology_broad_split_mapping |
35 | 35 | from .misc import ( |
36 | 36 | get_2field_allele, |
37 | 37 | get_3field_allele, |
@@ -390,7 +390,7 @@ def generate_alleles_and_xx_codes_and_who( |
390 | 390 | xx_codes = xx_df.groupby(["1d"]).apply(lambda x: list(x["Allele"])).to_dict() |
391 | 391 |
|
392 | 392 | # Update xx codes with broads and splits |
393 | | - for broad, splits in broad_splits_dna_mapping.items(): |
| 393 | + for broad, splits in broad_splits.broad_splits_dna_mapping.items(): |
394 | 394 | for split in splits: |
395 | 395 | if broad in xx_codes: |
396 | 396 | xx_codes[broad].extend(xx_codes[split]) |
@@ -635,15 +635,15 @@ def generate_serology_mapping(db_connection: sqlite3.Connection, imgt_version): |
635 | 635 |
|
636 | 636 | # map alleles for split serology to their corresponding broad |
637 | 637 | # Update xx codes with broads and splits |
638 | | - for broad, splits in broad_splits_ser_mapping.items(): |
| 638 | + for broad, splits in broad_splits.broad_splits_ser_mapping.items(): |
639 | 639 | for split in splits: |
640 | 640 | try: |
641 | 641 | sero_mapping[broad] = "/".join( |
642 | 642 | [sero_mapping[broad], sero_mapping[split]] |
643 | 643 | ) |
644 | | - |
645 | 644 | except KeyError: |
646 | | - sero_mapping[broad] = sero_mapping[split] |
| 645 | + if split in sero_mapping: |
| 646 | + sero_mapping[broad] = sero_mapping[split] |
647 | 647 |
|
648 | 648 | # re-sort allele lists into smartsort order |
649 | 649 | for sero in sero_mapping.keys(): |
@@ -724,3 +724,23 @@ def set_db_version(db_connection: sqlite3.Connection, imgt_version): |
724 | 724 |
|
725 | 725 | def get_db_version(db_connection: sqlite3.Connection): |
726 | 726 | return db.get_user_version(db_connection) |
| 727 | + |
| 728 | + |
| 729 | +def generate_serology_broad_split_mapping(db_connection, imgt_version): |
| 730 | + if not db.table_exists(db_connection, "serology_broad_split_mapping"): |
| 731 | + sero_mapping = load_serology_broad_split_mapping(imgt_version) |
| 732 | + # Save the `splits` as a "/" delimited string to db |
| 733 | + sero_splits = {sero: "/".join(splits) for sero, splits in sero_mapping.items()} |
| 734 | + db.save_dict( |
| 735 | + db_connection, |
| 736 | + table_name="serology_broad_split_mapping", |
| 737 | + dictionary=sero_splits, |
| 738 | + columns=("serology", "splits"), |
| 739 | + ) |
| 740 | + return sero_mapping |
| 741 | + |
| 742 | + sero_mapping = db.load_dict( |
| 743 | + db_connection, "serology_broad_split_mapping", ("serology", "splits") |
| 744 | + ) |
| 745 | + sero_splits = {k: v.split("/") for k, v in sero_mapping.items()} |
| 746 | + return sero_splits |
0 commit comments