pub fn get_epsilon(atom: &str) -> Option<f64> {
match atom {
"C135" | "C136" | "C137" | "C149" | "C157" | "C158" | "C206" | "C209" | "C210" | "C214"
| "C223" | "C224" | "C242" | "C245" | "C246" | "C267" | "C271" | "C274" | "C283"
| "C284" | "C285" | "C292" | "C293" | "C295" | "C296" | "C307" | "C308" | "C505" => {
Some(-0.066000)
}
"C145" | "C166" | "C500" | "C501" | "C502" | "C506" | "C507" | "C508" | "C509" | "C510"
| "C514" => Some(-0.070000),
"C235" => Some(-0.105000),
"H140" => Some(-0.030000),
"H146" => Some(-0.030000),
"C302" => Some(-0.050000),
"H155" | "H168" | "H204" | "H240" | "H241" | "H270" | "H290" | "H301" | "H304" | "H310"
| "H504" | "H513" => Some(0.000000),
"N237" | "N238" | "N239" | "N287" | "N300" | "N303" | "N309" | "N503" | "N511" | "N512"
| "O154" | "O167" | "O268" => Some(-0.170000),
"O236" | "O269" | "O272" => Some(-0.210000),
"S200" => Some(-0.425000),
"S202" | "S203" => Some(-0.355000),
"OT" => Some(-0.152100),
"HT" => Some(-0.046000),
"SOD" => Some(-0.000500),
"CLA" => Some(-0.710000),
_ => None, }
}
pub fn get_rmin2(atom: &str) -> Option<f64> {
match atom {
"C135" | "C136" | "C137" | "C149" | "C157" | "C158" | "C206" | "C209" | "C210" | "C214"
| "C223" | "C224" | "C242" | "C245" | "C246" | "C267" | "C271" | "C274" | "C283"
| "C284" | "C285" | "C292" | "C293" | "C295" | "C296" | "C307" | "C308" | "C505" => {
Some(1.9643086)
}
"C145" | "C166" | "C500" | "C501" | "C502" | "C506" | "C507" | "C508" | "C509" | "C510"
| "C514" => Some(1.9923701),
"C235" => Some(2.1046163),
"H140" => Some(1.4030776),
"H146" => Some(1.3581791),
"C302" => Some(1.2627698),
"H155" | "H168" | "H204" | "H240" | "H241" | "H270" | "H290" | "H301" | "H304" | "H310"
| "H504" | "H513" => Some(0.0000000),
"N237" | "N238" | "N239" | "N287" | "N300" | "N303" | "N309" | "N503" | "N511" | "N512" => {
Some(1.8240008)
}
"O154" => Some(1.7510408),
"O167" => Some(1.7229792),
"O268" => Some(1.6836931),
"O236" | "O269" | "O272" => Some(1.6612438),
"S200" => Some(2.0204317),
"S202" | "S203" => Some(2.0204317),
"OT" => Some(1.768200),
"HT" => Some(0.224500),
"SOD" => Some(2.9969737),
"CLA" => Some(2.2561487),
_ => None, }
}
pub fn get_eps_1_4(atom: &str) -> Option<f64> {
match atom {
"C135" | "C136" | "C137" | "C149" | "C157" | "C158" | "C206" | "C209" | "C210" | "C214"
| "C223" | "C224" | "C242" | "C245" | "C246" | "C267" | "C271" | "C274" | "C283"
| "C284" | "C285" | "C292" | "C293" | "C295" | "C296" | "C307" | "C308" | "C505" => {
Some(-0.033000)
}
"C145" | "C166" | "C500" | "C501" | "C502" | "C506" | "C507" | "C508" | "C509" | "C510"
| "C514" => Some(-0.035000),
"C235" => Some(-0.052500),
"H140" => Some(-0.015000),
"H146" => Some(-0.015000),
"C302" => Some(-0.025000),
"H155" | "H168" | "H204" | "H240" | "H241" | "H270" | "H290" | "H301" | "H304" | "H310"
| "H504" | "H513" => Some(0.000000),
"N237" | "N238" | "N239" | "N287" | "N300" | "N303" | "N309" | "N503" | "N511" | "N512"
| "O154" | "O167" | "O268" => Some(-0.085000),
"O236" | "O269" | "O272" => Some(-0.105000),
"S200" => Some(-0.212500),
"S202" | "S203" => Some(-0.177500),
"OT" => Some(-0.152100),
"HT" => Some(-0.046000),
"SOD" => Some(-0.000500),
"CLA" => Some(-0.710000),
_ => None, }
}
pub fn get_rmin2_1_4(atom: &str) -> Option<f64> {
match atom {
"C135" | "C136" | "C137" | "C149" | "C157" | "C158" | "C206" | "C209" | "C210" | "C214"
| "C223" | "C224" | "C242" | "C245" | "C246" | "C267" | "C271" | "C274" | "C283"
| "C284" | "C285" | "C292" | "C293" | "C295" | "C296" | "C307" | "C308" | "C505" => {
Some(1.9643086)
}
"C145" | "C166" | "C500" | "C501" | "C502" | "C506" | "C507" | "C508" | "C509" | "C510"
| "C514" => Some(1.9923701),
"C235" => Some(2.1046163),
"H140" => Some(1.4030776),
"H146" => Some(1.3581791),
"C302" => Some(1.2627698),
"H155" | "H168" | "H204" | "H240" | "H241" | "H270" | "H290" | "H301" | "H304" | "H310"
| "H504" | "H513" => Some(0.0000000),
"N237" | "N238" | "N239" | "N287" | "N300" | "N303" | "N309" | "N503" | "N511" | "N512" => {
Some(1.8240008)
}
"O154" => Some(1.7510408),
"O167" => Some(1.7229792),
"O268" => Some(1.6836931),
"O236" | "O269" | "O272" => Some(1.6612438),
"S200" => Some(2.0204317),
"S202" | "S203" => Some(2.0204317),
"OT" => Some(1.768200),
"HT" => Some(0.224500),
"SOD" => Some(2.9969737),
"CLA" => Some(2.2561487),
_ => None, }
}
pub fn get_atom(residue_name: &str, atom_name: &str) -> Option<&'static str> {
match residue_name {
"ALA" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C135"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"HB3" => Some("H140"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"ARG" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C136"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"CG" => Some("C308"),
"HG1" => Some("H140"),
"HG2" => Some("H140"),
"CD" => Some("C307"),
"HD1" => Some("H140"),
"HD2" => Some("H140"),
"NE" => Some("N303"),
"HE" => Some("H304"),
"CZ" => Some("C302"),
"NH1" => Some("N300"),
"HH11" => Some("H301"),
"HH12" => Some("H301"),
"NH2" => Some("N300"),
"HH21" => Some("H301"),
"HH22" => Some("H301"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"ASN" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C136"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"CG" => Some("C235"),
"OD1" => Some("O236"),
"ND2" => Some("N237"),
"HD21" => Some("H240"),
"HD22" => Some("H240"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"ASP" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C274"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"CG" => Some("C271"),
"OD1" => Some("O272"),
"OD2" => Some("O272"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"CYS" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C206"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"SG" => Some("S200"),
"HG1" => Some("H204"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"GLN" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C136"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"CG" => Some("C136"),
"HG1" => Some("H140"),
"HG2" => Some("H140"),
"CD" => Some("C235"),
"OE1" => Some("O236"),
"NE2" => Some("N237"),
"HE21" => Some("H240"),
"HE22" => Some("H240"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"GLU" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C136"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"CG" => Some("C274"),
"HG1" => Some("H140"),
"HG2" => Some("H140"),
"CD" => Some("C271"),
"OE1" => Some("O272"),
"OE2" => Some("O272"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"GLY" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C223"),
"HA1" => Some("H140"),
"HA2" => Some("H140"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"HIS" | "HSD" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C505"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"ND1" => Some("N503"),
"HD1" => Some("H504"),
"CG" => Some("C508"),
"CE1" => Some("C506"),
"HE1" => Some("H146"),
"NE2" => Some("N511"),
"CD2" => Some("C507"),
"HD2" => Some("H146"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"HSE" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C505"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"ND1" => Some("N511"),
"CG" => Some("C507"),
"CE1" => Some("C506"),
"HE1" => Some("H146"),
"NE2" => Some("N503"),
"HE2" => Some("H504"),
"CD2" => Some("C508"),
"HD2" => Some("H146"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"HSP" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C505"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"CD2" => Some("C510"),
"HD2" => Some("H146"),
"CG" => Some("C510"),
"NE2" => Some("N512"),
"HE2" => Some("H513"),
"ND1" => Some("N512"),
"HD1" => Some("H513"),
"CE1" => Some("C509"),
"HE1" => Some("H146"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"ILE" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C137"),
"HB" => Some("H140"),
"CG2" => Some("C135"),
"HG21" => Some("H140"),
"HG22" => Some("H140"),
"HG23" => Some("H140"),
"CG1" => Some("C136"),
"HG11" => Some("H140"),
"HG12" => Some("H140"),
"CD" => Some("C135"),
"HD1" => Some("H140"),
"HD2" => Some("H140"),
"HD3" => Some("H140"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"LEU" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C136"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"CG" => Some("C137"),
"HG" => Some("H140"),
"CD1" => Some("C135"),
"HD11" => Some("H140"),
"HD12" => Some("H140"),
"HD13" => Some("H140"),
"CD2" => Some("C135"),
"HD21" => Some("H140"),
"HD22" => Some("H140"),
"HD23" => Some("H140"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"LYS" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C136"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"CG" => Some("C136"),
"HG1" => Some("H140"),
"HG2" => Some("H140"),
"CD" => Some("C136"),
"HD1" => Some("H140"),
"HD2" => Some("H140"),
"CE" => Some("C292"),
"HE1" => Some("H140"),
"HE2" => Some("H140"),
"NZ" => Some("N287"),
"HZ1" => Some("H290"),
"HZ2" => Some("H290"),
"HZ3" => Some("H290"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"MET" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C136"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"CG" => Some("C210"),
"HG1" => Some("H140"),
"HG2" => Some("H140"),
"SD" => Some("S202"),
"CE" => Some("C209"),
"HE1" => Some("H140"),
"HE2" => Some("H140"),
"HE3" => Some("H140"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"PHE" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C149"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"CG" => Some("C145"),
"CD1" => Some("C145"),
"HD1" => Some("H146"),
"CE1" => Some("C145"),
"HE1" => Some("H146"),
"CZ" => Some("C145"),
"HZ" => Some("H146"),
"CD2" => Some("C145"),
"HD2" => Some("H146"),
"CE2" => Some("C145"),
"HE2" => Some("H146"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"PRO" => match atom_name {
"N" => Some("N239"),
"CD" => Some("C245"),
"HD1" => Some("H140"),
"HD2" => Some("H140"),
"CA" => Some("C246"),
"HA" => Some("H140"),
"CB" => Some("C136"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"CG" => Some("C136"),
"HG1" => Some("H140"),
"HG2" => Some("H140"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"SER" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C157"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"OG" => Some("O154"),
"HG1" => Some("H155"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"THR" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C158"),
"HB" => Some("H140"),
"OG1" => Some("O154"),
"HG1" => Some("H155"),
"CG2" => Some("C135"),
"HG21" => Some("H140"),
"HG22" => Some("H140"),
"HG23" => Some("H140"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"TRP" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C136"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"CG" => Some("C500"),
"CD1" => Some("C514"),
"HD1" => Some("H146"),
"NE1" => Some("N503"),
"HE1" => Some("H504"),
"CE2" => Some("C502"),
"CD2" => Some("C501"),
"CE3" => Some("C145"),
"HE3" => Some("H146"),
"CZ3" => Some("C145"),
"HZ3" => Some("H146"),
"CZ2" => Some("C145"),
"HZ2" => Some("H146"),
"CH2" => Some("C145"),
"HH2" => Some("H146"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"TYR" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C149"),
"HB1" => Some("H140"),
"HB2" => Some("H140"),
"CG" => Some("C145"),
"CD1" => Some("C145"),
"HD1" => Some("H146"),
"CE1" => Some("C145"),
"HE1" => Some("H146"),
"CZ" => Some("C166"),
"OH" => Some("O167"),
"HH" => Some("H168"),
"CD2" => Some("C145"),
"HD2" => Some("H146"),
"CE2" => Some("C145"),
"HE2" => Some("H146"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
"VAL" => match atom_name {
"N" => Some("N238"),
"HN" => Some("H241"),
"CA" => Some("C224"),
"HA" => Some("H140"),
"CB" => Some("C137"),
"HB" => Some("H140"),
"CG1" => Some("C135"),
"HG11" => Some("H140"),
"HG12" => Some("H140"),
"HG13" => Some("H140"),
"CG2" => Some("C135"),
"HG21" => Some("H140"),
"HG22" => Some("H140"),
"HG23" => Some("H140"),
"C" => Some("C235"),
"O" => Some("O236"),
_ => None,
},
_ => None,
}
}
pub fn get_charge(atom: &str) -> Option<f64> {
match atom {
"N238" => Some(-0.500),
"H241" => Some(0.300),
"C224" => Some(0.140),
"H140" => Some(0.060),
"C136" => Some(-0.120),
"C210" => Some(0.0475),
"S202" => Some(-0.335),
"C209" => Some(-0.0125),
"C235" => Some(0.500),
"O236" => Some(-0.500),
"C135" => Some(-0.180),
"C308" => Some(-0.050),
"C307" => Some(0.190),
"N303" => Some(-0.700),
"H304" => Some(0.440),
"C302" => Some(0.640),
"N300" => Some(-0.800),
"H301" => Some(0.460),
"N237" => Some(-0.760),
"H240" => Some(0.380),
"C274" => Some(-0.220),
"C271" => Some(0.700),
"O272" => Some(-0.800),
"C206" => Some(0.060),
"S200" => Some(-0.335),
"H204" => Some(0.155),
"C505" => Some(-0.005),
"N503" => Some(-0.570),
"H504" => Some(0.420),
"C508" => Some(0.015),
"C506" => Some(0.295),
"H146" => Some(0.115),
"N511" => Some(-0.490),
"C507" => Some(-0.015),
"C510" => Some(0.215),
"N512" => Some(-0.540),
"H513" => Some(0.460),
"C509" => Some(0.385),
"C137" => Some(-0.060),
"C500" => Some(0.075),
"C514" => Some(-0.115),
"C502" => Some(0.130),
"C501" => Some(-0.055),
"C145" => Some(-0.115),
"C166" => Some(0.150),
"O167" => Some(-0.585),
"H168" => Some(0.435),
"N239" => Some(-0.140),
"C245" => Some(-0.050),
"C246" => Some(0.010),
"C157" => Some(0.145),
"O154" => Some(-0.683),
"H155" => Some(0.418),
"C158" => Some(0.205),
"C149" => Some(-0.005),
"N287" => Some(-0.300),
"H290" => Some(0.330),
"C293" => Some(0.250),
"C292" => Some(0.190),
"N309" => Some(-0.200),
"H310" => Some(0.310),
"C296" => Some(0.170),
"C295" => Some(0.230),
"C283" => Some(0.040),
"C267" => Some(0.52),
"O269" => Some(-0.44),
"O268" => Some(-0.53),
"H270" => Some(0.45),
"C223" => Some(0.08),
"C242" => Some(0.020),
"C284" => Some(-0.020),
"C285" => Some(-0.090),
"C214" => Some(0.0975),
"S203" => Some(-0.2175),
"OT" => Some(-0.834),
"HT" => Some(0.417),
_ => None, }
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_get_epsilon_carbon() {
let epsilon = get_epsilon("C135");
assert!(epsilon.is_some());
assert!((epsilon.unwrap() - (-0.066000)).abs() < 1e-6);
}
#[test]
fn test_get_epsilon_nitrogen() {
let epsilon = get_epsilon("N238");
assert!(epsilon.is_some());
assert!((epsilon.unwrap() - (-0.170000)).abs() < 1e-6);
}
#[test]
fn test_get_epsilon_unknown() {
let epsilon = get_epsilon("UNKNOWN");
assert!(epsilon.is_none());
}
#[test]
fn test_get_rmin2_carbon() {
let rmin2 = get_rmin2("C135");
assert!(rmin2.is_some());
assert!((rmin2.unwrap() - 1.9643086).abs() < 1e-6);
}
#[test]
fn test_get_rmin2_hydrogen() {
let rmin2 = get_rmin2("H140");
assert!(rmin2.is_some());
assert!((rmin2.unwrap() - 1.4030776).abs() < 1e-6);
}
#[test]
fn test_get_rmin2_unknown() {
let rmin2 = get_rmin2("INVALID");
assert!(rmin2.is_none());
}
#[test]
fn test_get_eps_1_4_carbon() {
let eps = get_eps_1_4("C135");
assert!(eps.is_some());
assert!((eps.unwrap() - (-0.033000)).abs() < 1e-6);
}
#[test]
fn test_get_eps_1_4_sulfur() {
let eps = get_eps_1_4("S200");
assert!(eps.is_some());
assert!((eps.unwrap() - (-0.212500)).abs() < 1e-6);
}
#[test]
fn test_get_eps_1_4_unknown() {
let eps = get_eps_1_4("NOTFOUND");
assert!(eps.is_none());
}
#[test]
fn test_get_rmin2_1_4_oxygen() {
let rmin2 = get_rmin2_1_4("O154");
assert!(rmin2.is_some());
assert!((rmin2.unwrap() - 1.7510408).abs() < 1e-6);
}
#[test]
fn test_get_rmin2_1_4_chloride() {
let rmin2 = get_rmin2_1_4("CLA");
assert!(rmin2.is_some());
assert!((rmin2.unwrap() - 2.2561487).abs() < 1e-6);
}
#[test]
fn test_get_rmin2_1_4_unknown() {
let rmin2 = get_rmin2_1_4("XYZ");
assert!(rmin2.is_none());
}
#[test]
fn test_get_atom_alanine() {
assert_eq!(get_atom("ALA", "N"), Some("N238"));
assert_eq!(get_atom("ALA", "CA"), Some("C224"));
assert_eq!(get_atom("ALA", "CB"), Some("C135"));
assert_eq!(get_atom("ALA", "C"), Some("C235"));
assert_eq!(get_atom("ALA", "O"), Some("O236"));
}
#[test]
fn test_get_atom_glycine() {
assert_eq!(get_atom("GLY", "N"), Some("N238"));
assert_eq!(get_atom("GLY", "CA"), Some("C223"));
assert_eq!(get_atom("GLY", "C"), Some("C235"));
assert_eq!(get_atom("GLY", "O"), Some("O236"));
}
#[test]
fn test_get_atom_proline() {
assert_eq!(get_atom("PRO", "N"), Some("N239"));
assert_eq!(get_atom("PRO", "CD"), Some("C245"));
assert_eq!(get_atom("PRO", "CA"), Some("C246"));
}
#[test]
fn test_get_atom_arginine() {
assert_eq!(get_atom("ARG", "NE"), Some("N303"));
assert_eq!(get_atom("ARG", "CZ"), Some("C302"));
assert_eq!(get_atom("ARG", "NH1"), Some("N300"));
assert_eq!(get_atom("ARG", "NH2"), Some("N300"));
}
#[test]
fn test_get_atom_tryptophan() {
assert_eq!(get_atom("TRP", "NE1"), Some("N503"));
assert_eq!(get_atom("TRP", "CG"), Some("C500"));
assert_eq!(get_atom("TRP", "CD2"), Some("C501"));
}
#[test]
fn test_get_atom_unknown_residue() {
let atom = get_atom("XXX", "CA");
assert!(atom.is_none());
}
#[test]
fn test_get_atom_unknown_atom() {
let atom = get_atom("ALA", "NOTEXIST");
assert!(atom.is_none());
}
#[test]
fn test_get_charge_backbone() {
assert_eq!(get_charge("N238"), Some(-0.500));
assert_eq!(get_charge("H241"), Some(0.300));
assert_eq!(get_charge("C235"), Some(0.500));
assert_eq!(get_charge("O236"), Some(-0.500));
}
#[test]
fn test_get_charge_lysine_sidechain() {
assert_eq!(get_charge("N287"), Some(-0.300));
assert_eq!(get_charge("H290"), Some(0.330));
}
#[test]
fn test_get_charge_arginine_sidechain() {
assert_eq!(get_charge("N303"), Some(-0.700));
assert_eq!(get_charge("H304"), Some(0.440));
assert_eq!(get_charge("C302"), Some(0.640));
assert_eq!(get_charge("N300"), Some(-0.800));
}
#[test]
fn test_get_charge_aspartate() {
assert_eq!(get_charge("C271"), Some(0.700));
assert_eq!(get_charge("O272"), Some(-0.800));
}
#[test]
fn test_get_charge_unknown() {
let charge = get_charge("NOTFOUND");
assert!(charge.is_none());
}
#[test]
fn test_get_charge_sulfur() {
assert_eq!(get_charge("S200"), Some(-0.335));
assert_eq!(get_charge("S202"), Some(-0.335));
}
#[test]
fn test_get_atom_histidine_variants() {
assert_eq!(get_atom("HSD", "ND1"), Some("N503"));
assert_eq!(get_atom("HSD", "NE2"), Some("N511"));
assert_eq!(get_atom("HSE", "ND1"), Some("N511"));
assert_eq!(get_atom("HSE", "NE2"), Some("N503"));
assert_eq!(get_atom("HSP", "ND1"), Some("N512"));
assert_eq!(get_atom("HSP", "NE2"), Some("N512"));
assert_eq!(get_atom("HIS", "ND1"), Some("N503"));
}
#[test]
fn test_parameters_consistency() {
let test_atom = "C135";
assert!(get_epsilon(test_atom).is_some());
assert!(get_rmin2(test_atom).is_some());
assert!(get_eps_1_4(test_atom).is_some());
assert!(get_rmin2_1_4(test_atom).is_some());
}
#[test]
fn test_complete_alanine_mapping() {
let ala_atoms = vec!["N", "HN", "CA", "HA", "CB", "HB1", "HB2", "HB3", "C", "O"];
for atom_name in ala_atoms {
assert!(
get_atom("ALA", atom_name).is_some(),
"Failed to map ALA {}",
atom_name
);
}
}
}