use clap::Parser;
use crate::molecule::Molecule;
use crate::ff::forcefield::Forcefield;
use crate::ff::rb::core::RB;
use crate::ff::uff::core::UFF;
#[derive(Parser, Debug)]
#[clap(author, version, about, long_about = None)]
pub struct CommandLineArguments {
#[clap(index = 1)]
xyz_filename: String,
#[clap(short, long, default_value="UFF")]
forcefield: String,
}
pub fn run(args: CommandLineArguments) {
let mut mol = Molecule::from_xyz_file(&args.xyz_filename);
match args.forcefield.as_str() {
"UFF" => mol.optimise(&mut UFF::new(&mol)),
"RB" => mol.optimise(&mut RB::new(&mol)),
_ => panic!("Cannot set a forcefield. Unknown type")
}
mol.write_xyz_file("opt.xyz");
}
#[cfg(test)]
mod tests{
use super::*;
use crate::utils::*;
#[test]
fn test_simple_cli(){
let filename = "h2_tscli.xyz";
print_dihydrogen_xyz_file(filename);
let args = CommandLineArguments{xyz_filename: filename.to_string(),
forcefield: "UFF".to_string()};
run(args);
remove_file_or_panic(filename);
remove_file_or_panic("opt.xyz")
}
}