1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
use std::collections::HashMap; 

use scoring::score;
use conformation::Pose;

// Sampling (smaller to larger, Move > Protocol)

// Available_protocols
//
//
//
//
//


//let mut protocols = HashMap::new(); 

//protocols.insert(String::from("score"), Protocol { components: vec![Box::new(ScoreOnlyMove {})] }) 

pub fn get_protocol(protocol_name: &str) -> Protocol {
    // this can get a protocol from a dict of protocols defined in
    // protocols.rs. But, for now, we hard-code a protocol in
    let protocol = Protocol {
        components: vec![
            // go ahread, try it, it's fun!
            Box::new(ScoreOnlyMove {}),
            // Box::new(GridMove {}),
            Box::new(ScoreOnlyMove {}),
        ]
    };

    protocol
}

// protocol object
pub struct Protocol {
    pub components: Vec<Box<Move>>,
}

impl Protocol {
    pub fn run(&self, pose: &mut Pose) {
        for component in self.components.iter() {
            component.apply(pose);
        }
    }
}

// mover trait
pub trait Move {
    fn apply(&self, pose: &mut Pose);
}

// list of movers
pub struct ScoreOnlyMove {}
pub struct GridMove {}

// implementations for movers
impl Move for ScoreOnlyMove {
    fn apply(&self, pose: &mut Pose) {
        // code to run when applying

        let result: f64 = score(pose);
        println!("ScoreOnlyMove: result is {}", result);
    }
}

// impl Move for GridMove {
//     fn apply(&self, pose: &mut Pose) {
//         // get extents of the active site
//         // or can read in from a argument the 6 XYZ objects at the corners

//         // construct the grid
//         // this will be like the Submaranian paper
//         // we will evaluate hydro and electrostatic terms on each grid point
//         // this makes it sequence-independent (and structure-independent)
//         // just like our PLOS paper

//         println!("GridMove: activating grid"); 

//         let grid = vec!(f64);  

//         for atom in pose.atoms {
//             //println!(atom.xyz()); 
//         }



//     }
// }