chiral-computing-unit 0.1.2

Computing Units of Chiral: An All-in-One Data Processing Tool
Documentation
// #[cfg(feature = "openbabel")]
pub mod ob_similarity;

pub fn to_ob_fp_kind(kind: &chiral_common::kinds::Fingerprint) -> openbabel::fingerprint::Kind {
    match kind {
        chiral_common::kinds::Fingerprint::OpenBabel { kind: common_op_fp_kind } => {
            match common_op_fp_kind {
                chiral_common::kinds::FingerprintOpenBabel::FP2 { nbits } => openbabel::fingerprint::Kind::FP2 { nbits: *nbits },
                chiral_common::kinds::FingerprintOpenBabel::FP3 { nbits } => openbabel::fingerprint::Kind::FP2 { nbits: *nbits },
                chiral_common::kinds::FingerprintOpenBabel::FP4 { nbits } => openbabel::fingerprint::Kind::FP2 { nbits: *nbits },
                chiral_common::kinds::FingerprintOpenBabel::ECFP0 { nbits } => openbabel::fingerprint::Kind::ECFP0 { nbits: *nbits },
                chiral_common::kinds::FingerprintOpenBabel::ECFP2 { nbits } => openbabel::fingerprint::Kind::ECFP2 { nbits: *nbits },
                chiral_common::kinds::FingerprintOpenBabel::ECFP4 { nbits } => openbabel::fingerprint::Kind::ECFP4 { nbits: *nbits },
                chiral_common::kinds::FingerprintOpenBabel::ECFP6 { nbits } => openbabel::fingerprint::Kind::ECFP6 { nbits: *nbits },
                chiral_common::kinds::FingerprintOpenBabel::ECFP8 { nbits } => openbabel::fingerprint::Kind::ECFP8 { nbits: *nbits },
                chiral_common::kinds::FingerprintOpenBabel::ECFP10 { nbits } => openbabel::fingerprint::Kind::ECFP10 { nbits: *nbits },
            }
        }
    }
}

/// Tanimoto coefficient
pub fn similarity_tanimoto(fpd_1: &[u32], fpd_2: &[u32]) -> f32 {
    let mut andbits: u32 = 0;
    let mut orbits: u32 = 0;
    for i in 0..fpd_1.len() {
        let andfp: u32 = fpd_1[i] & fpd_2[i];
        let orfp: u32 = fpd_1[i] | fpd_2[i];
        andbits += andfp.count_ones();
        orbits += orfp.count_ones();
    }

    if orbits > 0 {
        andbits as f32 / orbits as f32
    } else {
        0.0
    }
}