prodigal-rs 0.2.0

Prokaryotic gene prediction — Prodigal rewritten in Rust
Documentation
use crate::types::{MetagenomicBin, Training};
use crate::training::{
    initialize_metagenome_0,  initialize_metagenome_1,  initialize_metagenome_2,
    initialize_metagenome_3,  initialize_metagenome_4,  initialize_metagenome_5,
    initialize_metagenome_6,  initialize_metagenome_7,  initialize_metagenome_8,
    initialize_metagenome_9,  initialize_metagenome_10, initialize_metagenome_11,
    initialize_metagenome_12, initialize_metagenome_13, initialize_metagenome_14,
    initialize_metagenome_15, initialize_metagenome_16, initialize_metagenome_17,
    initialize_metagenome_18, initialize_metagenome_19, initialize_metagenome_20,
    initialize_metagenome_21, initialize_metagenome_22, initialize_metagenome_23,
    initialize_metagenome_24, initialize_metagenome_25, initialize_metagenome_26,
    initialize_metagenome_27, initialize_metagenome_28, initialize_metagenome_29,
    initialize_metagenome_30, initialize_metagenome_31, initialize_metagenome_32,
    initialize_metagenome_33, initialize_metagenome_34, initialize_metagenome_35,
    initialize_metagenome_36, initialize_metagenome_37, initialize_metagenome_38,
    initialize_metagenome_39, initialize_metagenome_40, initialize_metagenome_41,
    initialize_metagenome_42, initialize_metagenome_43, initialize_metagenome_44,
    initialize_metagenome_45, initialize_metagenome_46, initialize_metagenome_47,
    initialize_metagenome_48, initialize_metagenome_49,
};

static DESCS: [(&[u8], &[u8], f64); 50] = [
    (b"Mycoplasma_bovis_PG45\0", b"B\0", 29.31),
    (b"Mycoplasma_pneumoniae_M129\0", b"B\0", 40.01),
    (b"Mycoplasma_suis_Illinois\0", b"B\0", 31.08),
    (b"Aeropyrum_pernix_K1\0", b"A\0", 56.31),
    (b"Akkermansia_muciniphila_ATCC_BAA_835\0", b"B\0", 55.76),
    (b"Anaplasma_marginale_Maries\0", b"B\0", 49.76),
    (b"Anaplasma_phagocytophilum_HZ\0", b"B\0", 41.64),
    (b"Archaeoglobus_fulgidus_DSM_4304\0", b"A\0", 48.58),
    (b"Bacteroides_fragilis_NCTC_9343\0", b"B\0", 43.19),
    (b"Brucella_canis_ATCC_23365\0", b"B\0", 57.21),
    (b"Burkholderia_rhizoxinica_HKI_454\0", b"B\0", 59.70),
    (b"Candidatus_Amoebophilus_asiaticus_5a2\0", b"B\0", 35.05),
    (b"Candidatus_Korarchaeum_cryptofilum_OPF8\0", b"A\0", 49.00),
    (b"Catenulispora_acidiphila_DSM_44928\0", b"B\0", 69.77),
    (b"Cenarchaeum_symbiosum_B\0", b"A\0", 57.19),
    (b"Chlorobium_phaeobacteroides_BS1\0", b"B\0", 48.93),
    (b"Chlorobium_tepidum_TLS\0", b"B\0", 56.53),
    (b"Desulfotomaculum_acetoxidans_DSM_771\0", b"B\0", 41.55),
    (b"Desulfurococcus_kamchatkensis_1221n\0", b"B\0", 45.34),
    (b"Erythrobacter_litoralis_HTCC2594\0", b"B\0", 63.07),
    (b"Escherichia_coli_UMN026\0", b"B\0", 50.72),
    (b"Haloquadratum_walsbyi_DSM_16790\0", b"A\0", 47.86),
    (b"Halorubrum_lacusprofundi_ATCC_49239\0", b"A\0", 57.14),
    (b"Hyperthermus_butylicus_DSM_5456\0", b"A\0", 53.74),
    (b"Ignisphaera_aggregans_DSM_17230\0", b"A\0", 35.69),
    (b"Marinobacter_aquaeolei_VT8\0", b"B\0", 57.27),
    (b"Methanopyrus_kandleri_AV19\0", b"A\0", 61.16),
    (b"Methanosphaerula_palustris_E1_9c\0", b"A\0", 55.35),
    (b"Methanothermobacter_thermautotrophicus_Delta_H\0", b"B\0", 49.54),
    (b"Methylacidiphilum_infernorum_V4\0", b"B\0", 45.48),
    (b"Mycobacterium_leprae_TN\0", b"B\0", 57.80),
    (b"Natrialba_magadii_ATCC_43099\0", b"A\0", 61.42),
    (b"Orientia_tsutsugamushi_Boryong\0", b"B\0", 30.53),
    (b"Pelotomaculum_thermopropionicum_SI\0", b"B\0", 52.96),
    (b"Prochlorococcus_marinus_MIT_9313\0", b"B\0", 50.74),
    (b"Pyrobaculum_aerophilum_IM2\0", b"A\0", 51.36),
    (b"Ralstonia_solanacearum_PSI07\0", b"B\0", 66.13),
    (b"Rhizobium_NGR234\0", b"B\0", 58.49),
    (b"Rhodococcus_jostii_RHA1\0", b"B\0", 65.05),
    (b"Rickettsia_conorii_Malish_7\0", b"B\0", 32.44),
    (b"Rothia_dentocariosa_ATCC_17931\0", b"B\0", 53.69),
    (b"Shigella_dysenteriae_Sd197\0", b"B\0", 51.25),
    (b"Synechococcus_CC9605\0", b"B\0", 59.22),
    (b"Synechococcus_JA_2_3B_a_2_13_\0", b"B\0", 58.45),
    (b"Thermoplasma_volcanium_GSS1\0", b"A\0", 39.92),
    (b"Treponema_pallidum_Nichols\0", b"B\0", 52.77),
    (b"Tropheryma_whipplei_TW08_27\0", b"B\0", 46.31),
    (b"Xenorhabdus_nematophila_ATCC_19061\0", b"B\0", 44.15),
    (b"Xylella_fastidiosa_Temecula1\0", b"B\0", 51.78),
    (b"_Nostoc_azollae__0708\0", b"B\0", 38.45),
];

static INIT_FNS: [unsafe fn(*mut Training); 50] = [
    initialize_metagenome_0,  initialize_metagenome_1,
    initialize_metagenome_2,  initialize_metagenome_3,
    initialize_metagenome_4,  initialize_metagenome_5,
    initialize_metagenome_6,  initialize_metagenome_7,
    initialize_metagenome_8,  initialize_metagenome_9,
    initialize_metagenome_10, initialize_metagenome_11,
    initialize_metagenome_12, initialize_metagenome_13,
    initialize_metagenome_14, initialize_metagenome_15,
    initialize_metagenome_16, initialize_metagenome_17,
    initialize_metagenome_18, initialize_metagenome_19,
    initialize_metagenome_20, initialize_metagenome_21,
    initialize_metagenome_22, initialize_metagenome_23,
    initialize_metagenome_24, initialize_metagenome_25,
    initialize_metagenome_26, initialize_metagenome_27,
    initialize_metagenome_28, initialize_metagenome_29,
    initialize_metagenome_30, initialize_metagenome_31,
    initialize_metagenome_32, initialize_metagenome_33,
    initialize_metagenome_34, initialize_metagenome_35,
    initialize_metagenome_36, initialize_metagenome_37,
    initialize_metagenome_38, initialize_metagenome_39,
    initialize_metagenome_40, initialize_metagenome_41,
    initialize_metagenome_42, initialize_metagenome_43,
    initialize_metagenome_44, initialize_metagenome_45,
    initialize_metagenome_46, initialize_metagenome_47,
    initialize_metagenome_48, initialize_metagenome_49,
];

pub unsafe fn initialize_metagenomic_bins(meta: *mut MetagenomicBin) {
    for i in 0..50 {
        let m = &mut *meta.add(i);
        INIT_FNS[i](m.tinf);
        let name = std::str::from_utf8_unchecked(&DESCS[i].0[..DESCS[i].0.len() - 1]);
        let domain = std::str::from_utf8_unchecked(&DESCS[i].1[..DESCS[i].1.len() - 1]);
        let s = format!(
            "{}|{}|{}|{:.1}|{}|{}\0",
            i, name, domain, DESCS[i].2, (*m.tinf).trans_table, (*m.tinf).uses_sd
        );
        std::ptr::copy_nonoverlapping(
            s.as_ptr(),
            m.desc.as_mut_ptr() as *mut u8,
            s.len().min(500),
        );
    }
}