%23%20%2F%2F%2F%20script%0A%23%20requires-python%20%3D%20%22%3E%3D3.14%22%0A%23%20dependencies%20%3D%20%5B%0A%23%20%20%20%20%20%22altair%3E%3D5.5.0%22%2C%0A%23%20%20%20%20%20%22cassetter%3E%3D0.14.0%22%2C%0A%23%20%20%20%20%20%22h2%3E%3D4.4.1%22%2C%0A%23%20%20%20%20%20%22httpx2%3E%3D2.13.0%22%2C%0A%23%20%20%20%20%20%22kbank%22%2C%0A%23%20%20%20%20%20%22marimo%3E%3D0.23.1%22%2C%0A%23%20%20%20%20%20%22numpy%3E%3D2.4.4%22%2C%0A%23%20%20%20%20%20%22scipy%3E%3D1.17.1%22%2C%0A%23%20%20%20%20%20%22serogen%22%2C%0A%23%20%5D%0A%23%0A%23%20%5Btool.uv.sources%5D%0A%23%20serogen%20%3D%20%7B%20path%20%3D%20%22..%2F..%2FSeroGen%22%2C%20editable%20%3D%20true%20%7D%0A%23%20kbank%20%3D%20%7B%20path%20%3D%20%22..%22%2C%20editable%20%3D%20true%20%7D%0A%23%20%2F%2F%2F%0A%0A%22%22%22Unified%20KBank%20Bacterial%20Surface%20Glycan%20%26%20Biosynthetic%20Locus%20Curation%20Marimo%20Slide%20Deck.%22%22%22%0A%0Aimport%20marimo%0A%0A__generated_with%20%3D%20%220.25.2%22%0Aapp%20%3D%20marimo.App(%0A%20%20%20%20width%3D%22full%22%2C%0A%20%20%20%20app_title%3D%22KBank%20%E2%80%94%20Bacterial%20Surface%20Glycan%20%26%20Biosynthetic%20Locus%20Curation%22%2C%0A%20%20%20%20layout_file%3D%22data%3Aapplication%2Fjson%3Bbase64%2CeyJ0eXBlIjogInNsaWRlcyIsICJkYXRhIjogeyJjZWxscyI6IFt7ImlkIjogIkhib2wiLCAiY29kZV9oYXNoIjogIjllM2QxYTgwYjAzZTU5Mjc0M2ZkYzVjYzk2ZmY3YjhkIn0sIHsiaWQiOiAiTUpVZSIsICJjb2RlX2hhc2giOiAiNTYyYzU5NWY3M2UxMjQ3NzYwZjkxZjI2NTFhOGYyNWIifSwgeyJpZCI6ICJ2YmxBIiwgImNvZGVfaGFzaCI6ICJjOTkyYjYwNmIxNTE5MTE3ZDM5ZmE3ZGY4Mzc3ZmEyZSJ9LCB7ImlkIjogImJrSEMiLCAiY29kZV9oYXNoIjogIjJkYmI2OWZlNTc1Y2NlYjE5ZjA2NGQzMzVjYjc2ZTRkIn0sIHsiaWQiOiAibEVRYSIsICJjb2RlX2hhc2giOiAiMGU4NjljNjA4NjFlYzczN2FhM2EwMWM5NjExZGI5ZGIifSwgeyJpZCI6ICJQS3JpIiwgImNvZGVfaGFzaCI6ICJkMWJlNDkxZWVmOGExZGY2ZDdhNjgzYTU2NmIxY2FhYSJ9LCB7ImlkIjogIlhyZWYiLCAiY29kZV9oYXNoIjogImQxOTYwZDM4Mzk1OGJhNjA4NjZkNjdiYWY2YWQxNjQ5In0sIHsiaWQiOiAiU0ZQTCIsICJjb2RlX2hhc2giOiAiMGU3NTVlNjRlYTZhYTU3Y2I0M2EyNzI0M2JiMTgyZmMifV19fQ%3D%3D%22%2C%0A)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20asyncio%0A%20%20%20%20import%20os%0A%20%20%20%20import%20time%0A%20%20%20%20from%20collections%20import%20Counter%0A%0A%20%20%20%20import%20altair%20as%20alt%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20from%20cassetter%20import%20Cassetter%2C%20RawRequest%2C%20RawResponse%2C%20SkipRecording%0A%20%20%20%20from%20serogen.genes.roles%20import%20GeneRole%0A%20%20%20%20from%20serogen.loci.archetypes%20import%20LocusArchetype%0A%0A%20%20%20%20from%20kbank.db.curation%20import%20(%0A%20%20%20%20%20%20%20%20DEFAULT_LOCI_CACHE_PATH%2C%0A%20%20%20%20%20%20%20%20build_curated_glycan_records%2C%0A%20%20%20%20%20%20%20%20normalize_raw_record_taxonomy%2C%0A%20%20%20%20%20%20%20%20resolve_and_predict_loci%2C%0A%20%20%20%20)%0A%20%20%20%20from%20kbank.db.records%20import%20DEFAULT_DB_PATH%2C%20GlycanRecords%0A%20%20%20%20from%20kbank.glycan%20import%20Anomer%2C%20LinkageType%0A%20%20%20%20from%20kbank.io.csdb%20import%20CSDBParser%0A%20%20%20%20from%20kbank.io.iupac%20import%20IUPACParser%0A%20%20%20%20from%20kbank.io.sources%20import%20(%0A%20%20%20%20%20%20%20%20DEFAULT_CACHE_DIR%2C%0A%20%20%20%20%20%20%20%20DEFAULT_CSDB_CACHE_PATH%2C%0A%20%20%20%20%20%20%20%20fetch_ecodab_records%2C%0A%20%20%20%20%20%20%20%20fetch_ek3d_records%2C%0A%20%20%20%20%20%20%20%20fetch_epsdb_records%2C%0A%20%20%20%20%20%20%20%20fetch_glytoucan_records%2C%0A%20%20%20%20%20%20%20%20fetch_kegg_glycan_records%2C%0A%20%20%20%20%20%20%20%20stream_csdb_database%2C%0A%20%20%20%20)%0A%20%20%20%20from%20kbank.sugars%20import%20Sugars%0A%0A%20%20%20%20alt.data_transformers.disable_max_rows()%0A%0A%20%20%20%20CASSETTE_DIR%20%3D%20DEFAULT_CACHE_DIR%20%2F%20%22cassettes%22%0A%20%20%20%20CASSETTE_DIR.mkdir(parents%3DTrue%2C%20exist_ok%3DTrue)%0A%0A%20%20%20%20def%20_skip_efetch_requests(request%3A%20RawRequest)%20-%3E%20RawRequest%3A%0A%20%20%20%20%20%20%20%20if%20%22efetch.fcgi%22%20in%20request.uri%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20SkipRecording%0A%20%20%20%20%20%20%20%20return%20request%0A%0A%20%20%20%20def%20_skip_error_responses(response%3A%20RawResponse)%20-%3E%20RawResponse%3A%0A%20%20%20%20%20%20%20%20if%20response.status%20%3E%3D%20400%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20SkipRecording%0A%20%20%20%20%20%20%20%20return%20response%0A%0A%20%20%20%20RECORDER%20%3D%20Cassetter(%0A%20%20%20%20%20%20%20%20cassette_library_dir%3DCASSETTE_DIR%2C%0A%20%20%20%20%20%20%20%20record_mode%3Dos.environ.get(%22KBANK_RECORD_MODE%22%2C%20%22new_episodes%22)%2C%0A%20%20%20%20%20%20%20%20match_on%3D%5B%22method%22%2C%20%22uri%22%2C%20%22body%22%5D%2C%0A%20%20%20%20%20%20%20%20filter_query_parameters%3D%5B%22api_key%22%5D%2C%0A%20%20%20%20%20%20%20%20ignore_hosts%3D%5B%22ftp.ncbi.nlm.nih.gov%22%2C%20%22osf.io%22%2C%20%22*.osf.io%22%5D%2C%0A%20%20%20%20%20%20%20%20before_record_request%3D_skip_efetch_requests%2C%0A%20%20%20%20%20%20%20%20before_record_response%3D_skip_error_responses%2C%0A%20%20%20%20)%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20Anomer%2C%0A%20%20%20%20%20%20%20%20CSDBParser%2C%0A%20%20%20%20%20%20%20%20Counter%2C%0A%20%20%20%20%20%20%20%20DEFAULT_CSDB_CACHE_PATH%2C%0A%20%20%20%20%20%20%20%20DEFAULT_DB_PATH%2C%0A%20%20%20%20%20%20%20%20DEFAULT_LOCI_CACHE_PATH%2C%0A%20%20%20%20%20%20%20%20GeneRole%2C%0A%20%20%20%20%20%20%20%20GlycanRecords%2C%0A%20%20%20%20%20%20%20%20IUPACParser%2C%0A%20%20%20%20%20%20%20%20LinkageType%2C%0A%20%20%20%20%20%20%20%20LocusArchetype%2C%0A%20%20%20%20%20%20%20%20RECORDER%2C%0A%20%20%20%20%20%20%20%20Sugars%2C%0A%20%20%20%20%20%20%20%20alt%2C%0A%20%20%20%20%20%20%20%20asyncio%2C%0A%20%20%20%20%20%20%20%20build_curated_glycan_records%2C%0A%20%20%20%20%20%20%20%20fetch_ecodab_records%2C%0A%20%20%20%20%20%20%20%20fetch_ek3d_records%2C%0A%20%20%20%20%20%20%20%20fetch_epsdb_records%2C%0A%20%20%20%20%20%20%20%20fetch_glytoucan_records%2C%0A%20%20%20%20%20%20%20%20fetch_kegg_glycan_records%2C%0A%20%20%20%20%20%20%20%20mo%2C%0A%20%20%20%20%20%20%20%20normalize_raw_record_taxonomy%2C%0A%20%20%20%20%20%20%20%20np%2C%0A%20%20%20%20%20%20%20%20resolve_and_predict_loci%2C%0A%20%20%20%20%20%20%20%20stream_csdb_database%2C%0A%20%20%20%20%20%20%20%20time%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell%0Aasync%20def%20_(%0A%20%20%20%20Anomer%2C%0A%20%20%20%20CSDBParser%2C%0A%20%20%20%20Counter%2C%0A%20%20%20%20DEFAULT_CSDB_CACHE_PATH%2C%0A%20%20%20%20DEFAULT_DB_PATH%2C%0A%20%20%20%20DEFAULT_LOCI_CACHE_PATH%2C%0A%20%20%20%20GeneRole%2C%0A%20%20%20%20GlycanRecords%2C%0A%20%20%20%20IUPACParser%2C%0A%20%20%20%20LinkageType%2C%0A%20%20%20%20LocusArchetype%2C%0A%20%20%20%20RECORDER%2C%0A%20%20%20%20Sugars%2C%0A%20%20%20%20alt%2C%0A%20%20%20%20asyncio%2C%0A%20%20%20%20build_curated_glycan_records%2C%0A%20%20%20%20fetch_ecodab_records%2C%0A%20%20%20%20fetch_ek3d_records%2C%0A%20%20%20%20fetch_epsdb_records%2C%0A%20%20%20%20fetch_glytoucan_records%2C%0A%20%20%20%20fetch_kegg_glycan_records%2C%0A%20%20%20%20normalize_raw_record_taxonomy%2C%0A%20%20%20%20np%2C%0A%20%20%20%20resolve_and_predict_loci%2C%0A%20%20%20%20stream_csdb_database%2C%0A%20%20%20%20time%2C%0A)%3A%0A%20%20%20%20t0%20%3D%20time.perf_counter()%0A%20%20%20%20csdb_parser%20%3D%20CSDBParser()%0A%20%20%20%20iupac_parser%20%3D%20IUPACParser()%0A%0A%20%20%20%20if%20DEFAULT_DB_PATH.exists()%3A%0A%20%20%20%20%20%20%20%20glycan_records%20%3D%20GlycanRecords.load(DEFAULT_DB_PATH)%0A%20%20%20%20%20%20%20%20csdb_index_count%20%3D%2016908%0A%20%20%20%20%20%20%20%20assembly_cache_count%20%3D%20int(len(np.unique(glycan_records.assembly_ids))%20-%201)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20csdb_records%2C%20csdb_index%20%3D%20await%20asyncio.to_thread(%0A%20%20%20%20%20%20%20%20%20%20%20%20stream_csdb_database%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20csdb_parser%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20iupac_parser%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20cache_path%3DDEFAULT_CSDB_CACHE_PATH%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20ecodab_records%2C%20ek3d_records%2C%20epsdb_records%2C%20kegg_records%2C%20canonical_to_gtc%20%3D%20await%20asyncio.gather(%0A%20%20%20%20%20%20%20%20%20%20%20%20fetch_ecodab_records(csdb_index%2C%20csdb_parser%2C%20iupac_parser%2C%20recorder%3DRECORDER)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20fetch_ek3d_records(csdb_index%2C%20csdb_parser%2C%20iupac_parser%2C%20recorder%3DRECORDER)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20fetch_epsdb_records(csdb_index%2C%20csdb_parser%2C%20iupac_parser%2C%20recorder%3DRECORDER)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20fetch_kegg_glycan_records(recorder%3DRECORDER%2C%20allow_composition%3DFalse)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20fetch_glytoucan_records(csdb_parser%2C%20iupac_parser%2C%20recorder%3DRECORDER)%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20all_raw_records%20%3D%20normalize_raw_record_taxonomy(%0A%20%20%20%20%20%20%20%20%20%20%20%20csdb_records%20%2B%20ecodab_records%20%2B%20ek3d_records%20%2B%20epsdb_records%20%2B%20kegg_records%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20assembly_loci_cache%2C%20strain_to_assembly%2C%20pmid_to_doi%20%3D%20await%20resolve_and_predict_loci(%0A%20%20%20%20%20%20%20%20%20%20%20%20all_raw_records%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20max_assemblies%3D100%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20recorder%3DRECORDER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20loci_cache_path%3DDEFAULT_LOCI_CACHE_PATH%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20glycan_records%20%3D%20build_curated_glycan_records(%0A%20%20%20%20%20%20%20%20%20%20%20%20all_raw_records%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20assembly_loci_cache%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20strain_to_assembly%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20pmid_to_doi%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20canonical_to_gtc%3Dcanonical_to_gtc%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20csdb_index_count%20%3D%20len(csdb_index)%0A%20%20%20%20%20%20%20%20assembly_cache_count%20%3D%20len(assembly_loci_cache)%0A%0A%20%20%20%20curation_elapsed_s%20%3D%20time.perf_counter()%20-%20t0%0A%0A%20%20%20%20npz_path%20%3D%20glycan_records.save(DEFAULT_DB_PATH)%0A%20%20%20%20_reloaded%20%3D%20GlycanRecords.load(npz_path)%0A%20%20%20%20npz_parity%20%3D%20bool(%0A%20%20%20%20%20%20%20%20len(_reloaded)%20%3D%3D%20len(glycan_records)%0A%20%20%20%20%20%20%20%20and%20np.array_equal(_reloaded.compound_keys%2C%20glycan_records.compound_keys)%0A%20%20%20%20%20%20%20%20and%20np.array_equal(_reloaded.glycans.node_types%2C%20glycan_records.glycans.node_types)%0A%20%20%20%20%20%20%20%20and%20np.array_equal(_reloaded.loci.node_types%2C%20glycan_records.loci.node_types)%0A%20%20%20%20)%0A%20%20%20%20npz_kb%20%3D%20npz_path.stat().st_size%20%2F%201024.0%0A%0A%20%20%20%20%23%201.%20Source%20Database%20x%20Antigen%20Class%20Stacked%20Bar%20Chart%0A%20%20%20%20_src_ag_counts%3A%20Counter%5Btuple%5Bstr%2C%20str%5D%5D%20%3D%20Counter()%0A%20%20%20%20_src_totals%3A%20Counter%5Bstr%5D%20%3D%20Counter()%0A%20%20%20%20for%20_db_b%2C%20_ag_b%20in%20zip(glycan_records.source_dbs%2C%20glycan_records.antigen_types%2C%20strict%3DFalse)%3A%0A%20%20%20%20%20%20%20%20_db_s%20%3D%20_db_b.decode(%22utf-8%22%2C%20errors%3D%22replace%22)%0A%20%20%20%20%20%20%20%20_ag_s%20%3D%20_ag_b.decode(%22utf-8%22%2C%20errors%3D%22replace%22)%20or%20%22Other%22%0A%20%20%20%20%20%20%20%20_src_ag_counts%5B(_db_s%2C%20_ag_s)%5D%20%2B%3D%201%0A%20%20%20%20%20%20%20%20_src_totals%5B_db_s%5D%20%2B%3D%201%0A%0A%20%20%20%20_source_rows%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22source_db%22%3A%20_db_s%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22antigen_type%22%3A%20_ag_s%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22count%22%3A%20_cnt%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22db_total%22%3A%20_src_totals%5B_db_s%5D%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20for%20(_db_s%2C%20_ag_s)%2C%20_cnt%20in%20_src_ag_counts.items()%0A%20%20%20%20%5D%0A%20%20%20%20source_chart%20%3D%20(%0A%20%20%20%20%20%20%20%20alt.Chart(alt.Data(values%3D_source_rows))%0A%20%20%20%20%20%20%20%20.mark_bar(cornerRadiusTopLeft%3D3%2C%20cornerRadiusTopRight%3D3)%0A%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22source_db%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sort%3Dalt.EncodingSortField(field%3D%22db_total%22%2C%20op%3D%22max%22%2C%20order%3D%22descending%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Source%20Database%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20axis%3Dalt.Axis(labelAngle%3D0)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3Dalt.Y(%22count%3AQ%22%2C%20title%3D%22Curated%20GlycanRecords%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3Dalt.Color(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22antigen_type%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Surface%20Antigen%20Class%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(scheme%3D%22tableau10%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22source_db%3AN%22%2C%20title%3D%22Source%20DB%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22antigen_type%3AN%22%2C%20title%3D%22Antigen%20Class%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22count%3AQ%22%2C%20title%3D%22Records%22%2C%20format%3D%22%2C%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22db_total%3AQ%22%2C%20title%3D%22DB%20Total%22%2C%20format%3D%22%2C%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20.properties(title%3D%22Curated%20GlycanRecords%20by%20Source%20Database%20%26%20Antigen%20Class%22%2C%20width%3D360%2C%20height%3D320)%0A%20%20%20%20)%0A%0A%20%20%20%20%23%202.%20Top%2015%20Bacterial%20Species%20Horizontal%20Stacked%20Bar%20Chart%0A%20%20%20%20_orgs%2C%20_org_counts%20%3D%20np.unique(glycan_records.organisms%2C%20return_counts%3DTrue)%0A%20%20%20%20_org_order%20%3D%20np.argsort(-_org_counts)%5B%3A15%5D%0A%20%20%20%20_species_rows%20%3D%20%5B%5D%0A%20%20%20%20for%20_idx%20in%20_org_order%3A%0A%20%20%20%20%20%20%20%20_org_b%20%3D%20_orgs%5B_idx%5D%0A%20%20%20%20%20%20%20%20_org_name%20%3D%20_org_b.decode(%22utf-8%22%2C%20errors%3D%22replace%22)%0A%20%20%20%20%20%20%20%20_tot_c%20%3D%20int(_org_counts%5B_idx%5D)%0A%20%20%20%20%20%20%20%20_mask%20%3D%20glycan_records.organisms%20%3D%3D%20_org_b%0A%20%20%20%20%20%20%20%20_paired_cnt%20%3D%20int(np.sum(glycan_records.has_locus%5B_mask%5D))%0A%20%20%20%20%20%20%20%20_unpaired_cnt%20%3D%20_tot_c%20-%20_paired_cnt%0A%20%20%20%20%20%20%20%20_species_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22organism%22%3A%20_org_name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22status%22%3A%20%22Paired%20SeroGen%20Locus%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22records%22%3A%20_paired_cnt%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22total_count%22%3A%20_tot_c%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22paired_loci%22%3A%20_paired_cnt%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20_species_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22organism%22%3A%20_org_name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22status%22%3A%20%22Glycan%20Structure%20Only%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22records%22%3A%20_unpaired_cnt%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22total_count%22%3A%20_tot_c%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22paired_loci%22%3A%20_paired_cnt%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20species_chart%20%3D%20(%0A%20%20%20%20%20%20%20%20alt.Chart(alt.Data(values%3D_species_rows))%0A%20%20%20%20%20%20%20%20.mark_bar(cornerRadiusTopRight%3D3%2C%20cornerRadiusBottomRight%3D3)%0A%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3Dalt.Y(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22organism%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sort%3Dalt.EncodingSortField(field%3D%22total_count%22%2C%20op%3D%22max%22%2C%20order%3D%22descending%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Bacterial%20Species%20%2F%20Taxon%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X(%22records%3AQ%22%2C%20title%3D%22Curated%20GlycanRecords%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3Dalt.Color(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22status%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Locus%20Pairing%20Status%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20domain%3D%5B%22Paired%20SeroGen%20Locus%22%2C%20%22Glycan%20Structure%20Only%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20range%3D%5B%22%23059669%22%2C%20%22%23a7f3d0%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20order%3Dalt.Order(%22status%3AN%22%2C%20sort%3D%22descending%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22organism%3AN%22%2C%20title%3D%22Organism%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22status%3AN%22%2C%20title%3D%22Status%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22records%3AQ%22%2C%20title%3D%22Records%22%2C%20format%3D%22%2C%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22paired_loci%3AQ%22%2C%20title%3D%22Paired%20SeroGen%20Loci%22%2C%20format%3D%22%2C%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22total_count%3AQ%22%2C%20title%3D%22Species%20Total%22%2C%20format%3D%22%2C%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20.properties(title%3D%22Top%2015%20Bacterial%20Species%20%26%20Paired%20SeroGen%20Loci%22%2C%20width%3D380%2C%20height%3D320)%0A%20%20%20%20)%0A%0A%20%20%20%20%23%203.%20Top%2018%20Monosaccharides%20%26%20Modifiers%20Horizontal%20Bar%20Chart%0A%20%20%20%20_node_types%20%3D%20glycan_records.glycans.node_types%0A%20%20%20%20_sugar_ids%20%3D%20_node_types%20%26%200xFF%0A%20%20%20%20_u_sugars%2C%20_s_counts%20%3D%20np.unique(_sugar_ids%2C%20return_counts%3DTrue)%0A%20%20%20%20_s_order%20%3D%20np.argsort(-_s_counts)%5B%3A18%5D%0A%20%20%20%20_sugar_rows%20%3D%20%5B%5D%0A%20%20%20%20for%20_idx%20in%20_s_order%3A%0A%20%20%20%20%20%20%20%20_sid%20%3D%20int(_u_sugars%5B_idx%5D)%0A%20%20%20%20%20%20%20%20_sname%20%3D%20Sugars.names%5B_sid%5D.decode(%22ascii%22%2C%20errors%3D%22replace%22)%0A%20%20%20%20%20%20%20%20_is_mod%20%3D%20bool(Sugars.classes%5B_sid%5D%20%3D%3D%20b%22Mod%22)%0A%20%20%20%20%20%20%20%20_sugar_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22residue%22%3A%20_sname%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22count%22%3A%20int(_s_counts%5B_idx%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22kind%22%3A%20%22Modifier%20%2F%20Aglycon%22%20if%20_is_mod%20else%20%22Monosaccharide%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20sugar_chart%20%3D%20(%0A%20%20%20%20%20%20%20%20alt.Chart(alt.Data(values%3D_sugar_rows))%0A%20%20%20%20%20%20%20%20.mark_bar(cornerRadiusTopRight%3D3%2C%20cornerRadiusBottomRight%3D3)%0A%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3Dalt.Y(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22residue%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sort%3Dalt.EncodingSortField(field%3D%22count%22%2C%20order%3D%22descending%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Residue%20%2F%20Modifier%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X(%22count%3AQ%22%2C%20title%3D%22Total%20Node%20Occurrences%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3Dalt.Color(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22kind%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Node%20Type%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(domain%3D%5B%22Monosaccharide%22%2C%20%22Modifier%20%2F%20Aglycon%22%5D%2C%20range%3D%5B%22%23059669%22%2C%20%22%23d97706%22%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22residue%3AN%22%2C%20title%3D%22Residue%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22kind%3AN%22%2C%20title%3D%22Node%20Type%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22count%3AQ%22%2C%20title%3D%22Occurrences%22%2C%20format%3D%22%2C%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20.properties(title%3D%22Top%2018%20Monosaccharides%20%26%20Modifiers%20across%20KBank%22%2C%20width%3D360%2C%20height%3D350)%0A%20%20%20%20)%0A%0A%20%20%20%20%23%204.%20Top%2018%20Glycosidic%20Linkages%20Horizontal%20Bar%20Chart%0A%20%20%20%20_edge_types%20%3D%20glycan_records.glycans.edge_types%0A%20%20%20%20_u_edges%2C%20_e_counts%20%3D%20np.unique(_edge_types%2C%20return_counts%3DTrue)%0A%20%20%20%20_e_order%20%3D%20np.argsort(-_e_counts)%5B%3A18%5D%0A%20%20%20%20_linkage_rows%20%3D%20%5B%5D%0A%20%20%20%20for%20_idx%20in%20_e_order%3A%0A%20%20%20%20%20%20%20%20_lt%20%3D%20LinkageType(int(_u_edges%5B_idx%5D))%0A%20%20%20%20%20%20%20%20_lname%20%3D%20_lt.name.decode(%22ascii%22%2C%20errors%3D%22replace%22)%0A%20%20%20%20%20%20%20%20_anom_label%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Alpha%20(a)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20_lt.anomer%20%3D%3D%20Anomer.ALPHA%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20(%22Beta%20(b)%22%20if%20_lt.anomer%20%3D%3D%20Anomer.BETA%20else%20%22Unknown%20%2F%20Non-glycosidic%22)%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20_linkage_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22linkage%22%3A%20_lname%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22count%22%3A%20int(_e_counts%5B_idx%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22anomer%22%3A%20_anom_label%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20linkage_chart%20%3D%20(%0A%20%20%20%20%20%20%20%20alt.Chart(alt.Data(values%3D_linkage_rows))%0A%20%20%20%20%20%20%20%20.mark_bar(cornerRadiusTopRight%3D3%2C%20cornerRadiusBottomRight%3D3)%0A%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3Dalt.Y(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22linkage%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sort%3Dalt.EncodingSortField(field%3D%22count%22%2C%20order%3D%22descending%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Glycosidic%20Linkage%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X(%22count%3AQ%22%2C%20title%3D%22Total%20Edge%20Occurrences%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3Dalt.Color(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22anomer%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Anomeric%20Configuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20domain%3D%5B%22Alpha%20(a)%22%2C%20%22Beta%20(b)%22%2C%20%22Unknown%20%2F%20Non-glycosidic%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20range%3D%5B%22%23d97706%22%2C%20%22%23059669%22%2C%20%22%230284c7%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22linkage%3AN%22%2C%20title%3D%22Linkage%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22anomer%3AN%22%2C%20title%3D%22Anomer%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22count%3AQ%22%2C%20title%3D%22Occurrences%22%2C%20format%3D%22%2C%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20.properties(title%3D%22Top%2018%20Glycosidic%20Linkages%20across%20KBank%22%2C%20width%3D380%2C%20height%3D350)%0A%20%20%20%20)%0A%0A%20%20%20%20%23%205.%20Assigned%20SeroGen%20LocusArchetype%20Distribution%20Bar%20Chart%0A%20%20%20%20_u_arch%2C%20_a_counts%20%3D%20np.unique(glycan_records.archetypes%2C%20return_counts%3DTrue)%0A%20%20%20%20_a_order%20%3D%20np.argsort(-_a_counts)%0A%20%20%20%20_arch_rows%20%3D%20%5B%5D%0A%20%20%20%20for%20_idx%20in%20_a_order%3A%0A%20%20%20%20%20%20%20%20_arch%20%3D%20LocusArchetype(int(_u_arch%5B_idx%5D))%0A%20%20%20%20%20%20%20%20_arch_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22archetype%22%3A%20_arch.name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22category%22%3A%20_arch.category.value%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22count%22%3A%20int(_a_counts%5B_idx%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20archetype_chart%20%3D%20(%0A%20%20%20%20%20%20%20%20alt.Chart(alt.Data(values%3D_arch_rows))%0A%20%20%20%20%20%20%20%20.mark_bar(cornerRadiusTopRight%3D3%2C%20cornerRadiusBottomRight%3D3)%0A%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3Dalt.Y(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22archetype%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sort%3Dalt.EncodingSortField(field%3D%22count%22%2C%20order%3D%22descending%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22SeroGen%20LocusArchetype%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X(%22count%3AQ%22%2C%20title%3D%22Curated%20GlycanRecords%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3Dalt.Color(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22category%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Archetype%20Category%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(scheme%3D%22set2%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22archetype%3AN%22%2C%20title%3D%22LocusArchetype%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22category%3AN%22%2C%20title%3D%22Category%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22count%3AQ%22%2C%20title%3D%22Records%22%2C%20format%3D%22%2C%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20.properties(title%3D%22Assigned%20SeroGen%20LocusArchetype%20Distribution%22%2C%20width%3D360%2C%20height%3D320)%0A%20%20%20%20)%0A%0A%20%20%20%20%23%206.%20GeneRole%20-%3E%20Glycan%20Component%20Assignments%20(GeneGlycanAssignments%20SoA)%0A%20%20%20%20_assigns%20%3D%20glycan_records.assignments%0A%20%20%20%20_role_target_counts%3A%20Counter%5Btuple%5Bint%2C%20str%5D%5D%20%3D%20Counter()%0A%20%20%20%20_role_aligned_counts%3A%20Counter%5Bint%5D%20%3D%20Counter()%0A%20%20%20%20_role_totals%3A%20Counter%5Bint%5D%20%3D%20Counter()%0A%20%20%20%20_target_names%20%3D%20%5B%22NONE%22%2C%20%22REDUCING_END%22%2C%20%22LINKAGE%22%2C%20%22MODIFIED_MONO%22%2C%20%22MONOSACCHARIDE%22%2C%20%22ANY%22%5D%0A%20%20%20%20for%20_r_id%2C%20_t_id%2C%20_ev_id%20in%20zip(_assigns.roles%2C%20_assigns.target_types%2C%20_assigns.evidences%2C%20strict%3DFalse)%3A%0A%20%20%20%20%20%20%20%20_r_int%20%3D%20int(_r_id)%0A%20%20%20%20%20%20%20%20_t_str%20%3D%20_target_names%5Bint(_t_id)%5D%20if%200%20%3C%3D%20int(_t_id)%20%3C%20len(_target_names)%20else%20%22ANY%22%0A%20%20%20%20%20%20%20%20_role_target_counts%5B(_r_int%2C%20_t_str)%5D%20%2B%3D%201%0A%20%20%20%20%20%20%20%20_role_totals%5B_r_int%5D%20%2B%3D%201%0A%20%20%20%20%20%20%20%20if%20int(_ev_id)%20%3E%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_role_aligned_counts%5B_r_int%5D%20%2B%3D%201%0A%0A%20%20%20%20_role_rows%20%3D%20%5B%5D%0A%20%20%20%20for%20(_r_int%2C%20_t_str)%2C%20_cnt%20in%20_role_target_counts.items()%3A%0A%20%20%20%20%20%20%20%20_role%20%3D%20GeneRole(_r_int)%0A%20%20%20%20%20%20%20%20_role_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22abbreviation%22%3A%20_role.abbreviation%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22role_name%22%3A%20_role.name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22target_type%22%3A%20_t_str%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22count%22%3A%20int(_cnt)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22role_total%22%3A%20int(_role_totals%5B_r_int%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22aligned_count%22%3A%20int(_role_aligned_counts%5B_r_int%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20roles_chart%20%3D%20(%0A%20%20%20%20%20%20%20%20alt.Chart(alt.Data(values%3D_role_rows))%0A%20%20%20%20%20%20%20%20.mark_bar(cornerRadiusTopRight%3D3%2C%20cornerRadiusBottomRight%3D3)%0A%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3Dalt.Y(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22abbreviation%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sort%3Dalt.EncodingSortField(field%3D%22role_total%22%2C%20op%3D%22max%22%2C%20order%3D%22descending%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22GeneRole%20(Abbrev)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X(%22count%3AQ%22%2C%20title%3D%22Assigned%20Glycan%20Components%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3Dalt.Color(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22target_type%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Glycan%20Target%20Type%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20domain%3D%5B%22LINKAGE%22%2C%20%22MONOSACCHARIDE%22%2C%20%22MODIFIED_MONO%22%2C%20%22REDUCING_END%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20range%3D%5B%22%230284c7%22%2C%20%22%23059669%22%2C%20%22%23e15759%22%2C%20%22%23d97706%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22abbreviation%3AN%22%2C%20title%3D%22Abbrev%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22role_name%3AN%22%2C%20title%3D%22GeneRole%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22target_type%3AN%22%2C%20title%3D%22Target%20Component%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22count%3AQ%22%2C%20title%3D%22Assignments%22%2C%20format%3D%22%2C%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22aligned_count%3AQ%22%2C%20title%3D%22Locus-Aligned%20ORFs%22%2C%20format%3D%22%2C%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20.properties(title%3D%22GeneRole%20-%3E%20Glycan%20Component%20Assignments%20across%20KBank%22%2C%20width%3D380%2C%20height%3D320)%0A%20%20%20%20)%0A%0A%20%20%20%20_dbs%2C%20_db_counts%20%3D%20np.unique(glycan_records.source_dbs%2C%20return_counts%3DTrue)%0A%20%20%20%20_db_order%20%3D%20np.argsort(-_db_counts)%0A%20%20%20%20source_summary_rows%20%3D%20%5B%5D%0A%20%20%20%20for%20_idx%20in%20_db_order%3A%0A%20%20%20%20%20%20%20%20_db_b%20%3D%20_dbs%5B_idx%5D%0A%20%20%20%20%20%20%20%20_db_name%20%3D%20_db_b.decode(%22utf-8%22%2C%20errors%3D%22replace%22)%0A%20%20%20%20%20%20%20%20_sub%20%3D%20glycan_records.where_source_db(_db_b)%0A%20%20%20%20%20%20%20%20source_summary_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22db%22%3A%20_db_name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22records%22%3A%20len(_sub)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22nodes%22%3A%20len(_sub.glycans.node_types)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22edges%22%3A%20len(_sub.glycans.edge_types)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22assigns%22%3A%20_sub.assignments.total_assignments%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22species%22%3A%20len(np.unique(_sub.organisms))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22paired%22%3A%20int(np.sum(_sub.has_locus))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20_paired%20%3D%20glycan_records.where_has_locus()%0A%20%20%20%20_paired_order%20%3D%20np.argsort(-_paired.alignment_scores)%20if%20len(_paired)%20%3E%200%20else%20np.empty(0%2C%20dtype%3Dnp.int64)%0A%20%20%20%20top_paired_rows%20%3D%20%5B%5D%0A%20%20%20%20for%20_rank_idx%20in%20_paired_order%5B%3A25%5D%3A%0A%20%20%20%20%20%20%20%20_rec%20%3D%20_paired%5Bint(_rank_idx)%5D%0A%20%20%20%20%20%20%20%20_loc%20%3D%20_rec.locus%0A%20%20%20%20%20%20%20%20top_paired_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22key%22%3A%20_rec.compound_key.decode(%22utf-8%22%2C%20errors%3D%22replace%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22organism%22%3A%20_rec.organism.decode(%22utf-8%22%2C%20errors%3D%22replace%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22serotype%22%3A%20_rec.serotype.decode(%22utf-8%22%2C%20errors%3D%22replace%22)%20or%20%22%E2%80%94%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22antigen%22%3A%20_rec.antigen_type.decode(%22utf-8%22%2C%20errors%3D%22replace%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22assembly%22%3A%20_rec.assembly_id.decode(%22utf-8%22%2C%20errors%3D%22replace%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22archetype%22%3A%20_rec.archetype.name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22genes%22%3A%20len(_loc.nodes)%20if%20_loc%20is%20not%20None%20else%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22completeness%22%3A%20float(_loc.completeness)%20*%20100.0%20if%20_loc%20is%20not%20None%20else%200.0%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22nodes%22%3A%20len(_rec.glycan.nodes)%20if%20_rec.glycan%20is%20not%20None%20else%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22edges%22%3A%20len(_rec.glycan.edges)%20if%20_rec.glycan%20is%20not%20None%20else%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22score%22%3A%20float(_rec.alignment_score)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20archetype_chart%2C%0A%20%20%20%20%20%20%20%20assembly_cache_count%2C%0A%20%20%20%20%20%20%20%20csdb_index_count%2C%0A%20%20%20%20%20%20%20%20curation_elapsed_s%2C%0A%20%20%20%20%20%20%20%20glycan_records%2C%0A%20%20%20%20%20%20%20%20linkage_chart%2C%0A%20%20%20%20%20%20%20%20npz_kb%2C%0A%20%20%20%20%20%20%20%20npz_parity%2C%0A%20%20%20%20%20%20%20%20roles_chart%2C%0A%20%20%20%20%20%20%20%20source_chart%2C%0A%20%20%20%20%20%20%20%20source_summary_rows%2C%0A%20%20%20%20%20%20%20%20species_chart%2C%0A%20%20%20%20%20%20%20%20sugar_chart%2C%0A%20%20%20%20%20%20%20%20top_paired_rows%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20assembly_cache_count%2C%0A%20%20%20%20csdb_index_count%2C%0A%20%20%20%20curation_elapsed_s%2C%0A%20%20%20%20glycan_records%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20np%2C%0A%20%20%20%20npz_kb%2C%0A%20%20%20%20npz_parity%2C%0A)%3A%0A%20%20%20%20%23%20Slide%201%3A%20Hero%20Title%2C%20Executive%20Summary%20%26%20KPI%20Cards%0A%20%20%20%20_n_total%20%3D%20len(glycan_records)%0A%20%20%20%20_n_loci%20%3D%20int(np.sum(glycan_records.has_locus))%0A%20%20%20%20_n_orgs%20%3D%20len(np.unique(glycan_records.organisms))%0A%20%20%20%20_tot_nodes%20%3D%20len(glycan_records.glycans.node_types)%0A%20%20%20%20_tot_edges%20%3D%20len(glycan_records.glycans.edge_types)%0A%20%20%20%20_tot_assigns%20%3D%20glycan_records.assignments.total_assignments%0A%20%20%20%20_tot_aligned%20%3D%20int(np.sum(glycan_records.assignments.evidences%20%3E%200))%0A%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20%60KBank%60%20%E2%80%94%20Bacterial%20Surface%20Glycan%20%26%20Biosynthetic%20Locus%20Curation%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Streaming%2C%20parsing%2C%20and%20canonicalizing%20bacterial%20surface%20polysaccharides%20across%20**CSDB**%2C%20**KEGG%20Glycan**%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20**ECODAB**%2C%20**CERMAV%20EPS-DB**%2C%20**EK3D**%2C%20and%20**GlyTouCan**%20via%20%5B%60kbank.io%60%5D%5Bkbank.io%5D%2C%20paired%20*de%20novo*%20with%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%60SeroGen%60%5D%5Bserogen.loci.LocusPredictor%5D%20biosynthetic%20gene%20clusters%20and%20%5B%60BiosyntheticAssigner%60%5D%5Bkbank.biosynthesis.BiosyntheticAssigner%5D%20alignments.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.hstack(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22Curated%20GlycanRecords%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%7B_n_total%3A%2C%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3Df%225%20Databases%20%7C%20%7Bcsdb_index_count%3A%2C%7D%20CSDB%20indexed%20(%7Bcuration_elapsed_s%3A.1f%7Ds)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22Glycan%20CSR%20Topology%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%7B_tot_nodes%3A%2C%7D%20Nodes%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3Df%22%7B_tot_edges%3A%2C%7D%20Linkages%20%7C%20%7B_n_orgs%3A%2C%7D%20Species%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22Paired%20SeroGen%20Loci%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%7B_n_loci%3A%2C%7D%20Loci%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3Df%22%7Blen(glycan_records.loci.node_types)%3A%2C%7D%20BGC%20ORFs%20(%7Bassembly_cache_count%3A%2C%7D%20Assemblies)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22Bipartite%20Assignments%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%7B_tot_assigns%3A%2C%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3Df%22ORF-Aligned%3A%20%7B_tot_aligned%3A%2C%7D%20%7C%20Rule%3A%20%7B_tot_assigns%20-%20_tot_aligned%3A%2C%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22Zero-Pickle%20SoA%20Archive%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%7Bnpz_kb%3A.1f%7D%20KB%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3Df%22src%2Fkbank%2Fdata%2Fglycans.npz%20%7C%20Parity%3A%20%7B'PASS'%20if%20npz_parity%20else%20'FAIL'%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20widths%3D%22equal%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gap%3D1.0%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22**Exported%20Production%20Database%20(%60src%2Fkbank%2Fdata%2Fglycans.npz%60)**%3A%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22%60%7B_n_total%3A%2C%7D%60%20canonicalized%20repeat%2Foligosaccharide%20graphs%20paired%20with%20%60%7B_n_loci%3A%2C%7D%60%20segmented%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22biosynthetic%20gene%20clusters%20(%60allow_pickle%3DFalse%60%2C%20round-trip%20bit%20parity%3A%20%60%7Bnpz_parity%7D%60).%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind%3D%22success%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20gap%3D1.2%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(alt%2C%20mo%2C%20source_chart%2C%20species_chart)%3A%0A%20%20%20%20%23%20Slide%202%3A%20Source%20Database%20Coverage%20%26%20Top%2015%20Bacterial%20Species%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%23%201.%20Multi-Database%20Surface%20Antigen%20Coverage%20%26%20Taxonomic%20Distribution%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Consolidating%20repeating%20O-antigens%2C%20capsular%20polysaccharides%20(CPS%2FK-antigens)%2C%20exopolysaccharides%20(EPS)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20and%20lipooligosaccharides%20(LOS)%20across%20**CSDB**%2C%20**KEGG**%2C%20**ECODAB**%2C%20**EPS-DB**%2C%20and%20**EK3D**%2C%20with%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%204-tier%20NCBI%20Assembly%20and%20nucleotide%20BGC%20resolution.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20alt.hconcat(source_chart%2C%20species_chart).resolve_scale(color%3D%22independent%22)%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20gap%3D0.8%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(alt%2C%20linkage_chart%2C%20mo%2C%20sugar_chart)%3A%0A%20%20%20%20%23%20Slide%203%3A%20Monosaccharide%2C%20Modifier%20%26%20Glycosidic%20Linkage%20Repertoire%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%23%202.%20Monosaccharide%2C%20Substituent%20Modifier%20%26%20Glycosidic%20Linkage%20Repertoire%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Distribution%20of%20the%20top%2018%20monosaccharide%2Fmodifier%20nodes%20(%60Sugars%60)%20and%20glycosidic%20linkages%20(%60LinkageType%60)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20encoded%20in%20KBank's%20packed%2016-bit%20CSR%20chemical%20graph%20representation.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20alt.hconcat(sugar_chart%2C%20linkage_chart).resolve_scale(color%3D%22independent%22)%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20gap%3D0.8%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(alt%2C%20archetype_chart%2C%20mo%2C%20roles_chart)%3A%0A%20%20%20%20%23%20Slide%204%3A%20SeroGen%20LocusArchetype%20%26%20Bipartite%20GeneRole%20-%3E%20Glycan%20Component%20Assignments%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%23%203.%20%60SeroGen%60%20%60LocusArchetype%60%20%26%20Bipartite%20%60GeneRole%60%20%E2%86%92%20Glycan%20Component%20Alignment%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Automated%20assignment%20of%20biosynthetic%20pathway%20archetypes%20(%60CPS_WZY%60%2C%20%60LPS_WZY%60%2C%20%60LPS_ABC%60%2C%20%60CPS_ABC%60%2C%20%60CPS_SYNTHASE%60)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20and%20stoichiometric%20enzyme-to-glycan%20mappings%20across%20%60LINKAGE%60%2C%20%60MONOSACCHARIDE%60%2C%20%60MODIFIED_MONO%60%2C%20and%20%60REDUCING_END%60%20targets.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20alt.hconcat(archetype_chart%2C%20roles_chart).resolve_scale(color%3D%22independent%22)%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20gap%3D0.8%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(glycan_records%2C%20mo%2C%20np%2C%20source_summary_rows)%3A%0A%20%20%20%20%23%20Slide%205%3A%20Multi-Database%20Coverage%20%26%20Pan-Graph%20Evidence%20Breakdown%0A%20%20%20%20_ev%20%3D%20glycan_records.assignments.evidences%0A%20%20%20%20_n_pan%20%3D%20int(np.sum(_ev%20%3D%3D%203))%0A%20%20%20%20_n_graph%20%3D%20int(np.sum(_ev%20%3D%3D%202))%0A%20%20%20%20_n_comp%20%3D%20int(np.sum(_ev%20%3D%3D%204))%0A%20%20%20%20_n_rule%20%3D%20int(np.sum(_ev%20%3D%3D%201))%0A%20%20%20%20_paired%20%3D%20glycan_records.where_has_locus()%0A%20%20%20%20_mean_score%20%3D%20float(np.mean(_paired.alignment_scores))%20if%20len(_paired)%20%3E%200%20else%200.0%0A%0A%20%20%20%20_db_md%20%3D%20%22%5Cn%22.join(%0A%20%20%20%20%20%20%20%20f%22%7C%20%60%7Br%5B'db'%5D%7D%60%20%7C%20**%7Br%5B'records'%5D%3A%2C%7D**%20%7C%20%7Br%5B'nodes'%5D%3A%2C%7D%20%7C%20%7Br%5B'edges'%5D%3A%2C%7D%20%7C%20%7Br%5B'assigns'%5D%3A%2C%7D%20%7C%20%7Br%5B'species'%5D%3A%2C%7D%20%7C%20**%7Br%5B'paired'%5D%3A%2C%7D**%20%7C%22%0A%20%20%20%20%20%20%20%20for%20r%20in%20source_summary_rows%0A%20%20%20%20)%0A%20%20%20%20_db_table%20%3D%20%22%5Cn%22.join(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%7C%20Source%20Database%20%7C%20Curated%20Records%20%7C%20Residue%20%2F%20Modifier%20Nodes%20%7C%20Glycosidic%20Linkages%20%7C%20Gene-Glycan%20Assignments%20%7C%20Unique%20Species%20%7C%20Paired%20%60SeroGen%60%20Loci%20%7C%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%7C%20%3A---%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20_db_md%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%23%204.%20Source%20Database%20Synthesis%20%26%20Bipartite%20Alignment%20Evidence%20Tiers%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Cross-referencing%20structural%20databases%20with%20%60PanGraphConsensusPrior%60%20homology-transfer%20and%20Hungarian%20bipartite%20graph%20alignment.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.hstack(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22PAN_GRAPH_CONSENSUS%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%7B_n_pan%3A%2C%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3D%22Multi-record%20homology%20%26%20synteny%20consensus%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22GRAPH_ALIGNED%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%7B_n_graph%3A%2C%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3D%22Bipartite%20Hungarian%20locus-to-glycan%20match%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22LOCUS_COMPLETED%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%7B_n_comp%3A%2C%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3D%22Tail%20modifier%20ORF%20completion%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22RULE_INFERRED%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%7B_n_rule%3A%2C%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3D%22Stoichiometric%20rule%20registry%20fallback%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22Mean%20Locus%20Alignment%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%7B_mean_score%3A.3f%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3Df%22Across%20%7Blen(_paired)%3A%2C%7D%20paired%20BGCs%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20widths%3D%22equal%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gap%3D1.0%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(_db_table)%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20gap%3D0.8%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo%2C%20source_summary_rows%2C%20top_paired_rows)%3A%0A%20%20%20%20%23%20Slide%206%3A%20Reference%20Tables%20(Source%20Databases%20%26%20Top%20Paired%20SeroGen%20Loci)%0A%20%20%20%20_db_md%20%3D%20%22%5Cn%22.join(%0A%20%20%20%20%20%20%20%20f%22%7C%20%60%7Br%5B'db'%5D%7D%60%20%7C%20**%7Br%5B'records'%5D%3A%2C%7D**%20%7C%20%7Br%5B'nodes'%5D%3A%2C%7D%20%7C%20%7Br%5B'edges'%5D%3A%2C%7D%20%7C%20%7Br%5B'assigns'%5D%3A%2C%7D%20%7C%20%7Br%5B'species'%5D%3A%2C%7D%20%7C%20**%7Br%5B'paired'%5D%3A%2C%7D**%20%7C%22%0A%20%20%20%20%20%20%20%20for%20r%20in%20source_summary_rows%0A%20%20%20%20)%0A%20%20%20%20_db_table%20%3D%20%22%5Cn%22.join(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%7C%20Source%20DB%20%7C%20Curated%20Records%20%7C%20Residue%20Nodes%20%7C%20Linkages%20%7C%20Assignments%20%7C%20Species%20%7C%20Paired%20Loci%20%7C%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%7C%20%3A---%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20_db_md%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%0A%20%20%20%20_paired_md%20%3D%20%22%5Cn%22.join(%0A%20%20%20%20%20%20%20%20f%22%7C%20%60%7Br%5B'key'%5D%7D%60%20%7C%20*%7Br%5B'organism'%5D%7D*%20%7C%20%60%7Br%5B'serotype'%5D%7D%60%20%7C%20%7Br%5B'antigen'%5D%7D%20%7C%20%60%7Br%5B'assembly'%5D%7D%60%20%7C%20%60%7Br%5B'archetype'%5D%7D%60%20%7C%20%7Br%5B'genes'%5D%7D%20%7C%20%7Br%5B'completeness'%5D%3A.1f%7D%25%20%7C%20%7Br%5B'nodes'%5D%7D%2F%7Br%5B'edges'%5D%7D%20%7C%20**%7Br%5B'score'%5D%3A.3f%7D**%20%7C%22%0A%20%20%20%20%20%20%20%20for%20r%20in%20top_paired_rows%0A%20%20%20%20)%0A%20%20%20%20_paired_table%20%3D%20%22%5Cn%22.join(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%7C%20Record%20Key%20%7C%20Organism%20%7C%20Serotype%20%7C%20Antigen%20%7C%20NCBI%20Accession%20%7C%20Archetype%20%7C%20BGC%20ORFs%20%7C%20Completeness%20%7C%20Nodes%2FEdges%20%7C%20Alignment%20Score%20%7C%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%7C%20%3A---%20%7C%20%3A---%20%7C%20%3A---%20%7C%20%3A---%20%7C%20%3A---%20%7C%20%3A---%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20_paired_md%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22%23%23%205.%20Reference%20Tables%3A%20Top%20De%20Novo%20Paired%20%60SeroGen%60%20Loci%20%26%20Source%20Coverage%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.ui.tabs(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Top%2025%20Paired%20SeroGen%20Loci%22%3A%20mo.md(_paired_table)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Source%20Database%20Coverage%22%3A%20mo.md(_db_table)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20gap%3D0.8%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
3cc21640430c654d29075654440f0c9a