Пример #1
0
    def make_movers(self, scheme):
        (ensemble_weights, mover_weights) = self.get_weights(
            scheme=scheme,
            sorted_movers=scheme.movers,
            sort_weights_override=self.ensemble_weights,
            mover_weights_override=self.mover_weights)
        scheme.choice_probability = self.choice_probability(
            scheme, ensemble_weights, mover_weights)
        self.ensemble_weights = ensemble_weights
        self.mover_weights = mover_weights
        root_info = self.chooser_root_weights(scheme, ensemble_weights,
                                              mover_weights)

        chooser_dict = {}
        for ens in root_info.keys():
            weight_dict = self.chooser_mover_weights(scheme, ens,
                                                     mover_weights)
            choosername = ens.name + "Chooser"
            chooser_dict[ens] = self.make_chooser(scheme, weight_dict,
                                                  choosername)

        root_couples = [(root_info[g], chooser_dict[g])
                        for g in root_info.keys()]
        (root_weights, choosers) = zip(*root_couples)
        root_chooser = paths.RandomChoiceMover(movers=choosers,
                                               weights=root_weights)
        root_chooser.named("RootMover")
        scheme.root_mover = root_chooser
        return root_chooser
Пример #2
0
    def make_movers(self, scheme):
        (group_weights, mover_weights) = self.get_weights(
            scheme=scheme,
            sorted_movers=scheme.movers,
            sort_weights_override=self.group_weights,
            mover_weights_override=self.mover_weights)
        scheme.choice_probability = self.choice_probability(
            scheme, group_weights, mover_weights)
        self.group_weights = group_weights
        self.mover_weights = mover_weights
        root_info = self.chooser_root_weights(scheme, group_weights,
                                              mover_weights)
        chooser_dict = {}
        for group in root_info.keys():
            # care to the order of weights
            weight_dict = self.chooser_mover_weights(scheme, group,
                                                     mover_weights)
            choosername = group.capitalize() + "Chooser"
            chooser_dict[group] = self.make_chooser(scheme, weight_dict,
                                                    choosername)

        root_couples = [(root_info[g], chooser_dict[g])
                        for g in root_info.keys()]
        (root_weights, choosers) = zip(*root_couples)
        root_chooser = paths.RandomChoiceMover(movers=choosers,
                                               weights=root_weights)
        root_chooser.named("RootMover")
        scheme.root_mover = root_chooser
        return root_chooser
Пример #3
0
    def __init__(self, storage, engine, starting_volume, forward_ensemble,
                 backward_ensemble, randomizer, initial_snapshots):
        super(ShootFromSnapshotsSimulation, self).__init__(storage)
        self.engine = engine
        # FIXME: this next line seems weird; but tests fail without it
        paths.EngineMover.default_engine = engine
        try:
            initial_snapshots = list(initial_snapshots)
        except TypeError:
            initial_snapshots = [initial_snapshots]
        self.initial_snapshots = initial_snapshots
        self.randomizer = randomizer

        self.starting_ensemble = (paths.AllInXEnsemble(starting_volume)
                                  & paths.LengthEnsemble(1))

        self.forward_ensemble = forward_ensemble
        self.backward_ensemble = backward_ensemble

        self.forward_mover = paths.ForwardExtendMover(
            ensemble=self.starting_ensemble,
            target_ensemble=self.forward_ensemble)
        self.backward_mover = paths.BackwardExtendMover(
            ensemble=self.starting_ensemble,
            target_ensemble=self.backward_ensemble)

        # subclasses will often override this
        self.mover = paths.RandomChoiceMover(
            [self.forward_mover, self.backward_mover])
Пример #4
0
    def __init__(self, storage, engine=None, states=None, randomizer=None,
                 initial_snapshots=None, direction=None):
        all_state_volume = paths.join_volumes(states)
        no_state_volume = ~all_state_volume
        # shoot forward until we hit a state
        forward_ensemble = paths.SequentialEnsemble([
            paths.AllOutXEnsemble(all_state_volume),
            paths.AllInXEnsemble(all_state_volume) & paths.LengthEnsemble(1)
        ])
        # or shoot backward until we hit a state
        backward_ensemble = paths.SequentialEnsemble([
            paths.AllInXEnsemble(all_state_volume) & paths.LengthEnsemble(1),
            paths.AllOutXEnsemble(all_state_volume)
        ])
        super(CommittorSimulation, self).__init__(
            storage=storage,
            engine=engine,
            starting_volume=no_state_volume,
            forward_ensemble=forward_ensemble,
            backward_ensemble=backward_ensemble,
            randomizer=randomizer,
            initial_snapshots=initial_snapshots
        )
        self.states = states
        self.direction = direction

        # override the default self.mover given by the superclass
        if self.direction is None:
            self.mover = paths.RandomChoiceMover([self.forward_mover,
                                                  self.backward_mover])
        elif self.direction > 0:
            self.mover = self.forward_mover
        elif self.direction < 0:
            self.mover = self.backward_mover
Пример #5
0
 def make_chooser(self, scheme, mover_weights, choosername):
     """
     Make RandomChoiceMover based on the movers and weights in
     mover_weights.
     """
     chooser = paths.RandomChoiceMover(movers=list(mover_weights.keys()),
                                       weights=list(mover_weights.values()))
     chooser.named(choosername)
     return chooser
    def __init__(self,
                 storage,
                 engine=None,
                 states=None,
                 randomizer=None,
                 initial_snapshots=None,
                 direction=None):
        super(CommittorSimulation, self).__init__(storage)
        self.engine = engine
        paths.EngineMover.default_engine = engine
        self.states = states
        self.randomizer = randomizer
        try:
            initial_snapshots = list(initial_snapshots)
        except TypeError:
            initial_snapshots = [initial_snapshots]
        self.initial_snapshots = initial_snapshots
        self.direction = direction

        all_state_volume = paths.join_volumes(states)

        # we should always start from a single frame not in any state
        self.starting_ensemble = (paths.AllOutXEnsemble(all_state_volume)
                                  & paths.LengthEnsemble(1))
        # shoot forward until we hit a state
        self.forward_ensemble = paths.SequentialEnsemble([
            paths.AllOutXEnsemble(all_state_volume),
            paths.AllInXEnsemble(all_state_volume) & paths.LengthEnsemble(1)
        ])
        # or shoot backward until we hit a state
        self.backward_ensemble = paths.SequentialEnsemble([
            paths.AllInXEnsemble(all_state_volume) & paths.LengthEnsemble(1),
            paths.AllOutXEnsemble(all_state_volume)
        ])

        self.forward_mover = paths.ForwardExtendMover(
            ensemble=self.starting_ensemble,
            target_ensemble=self.forward_ensemble)
        self.backward_mover = paths.BackwardExtendMover(
            ensemble=self.starting_ensemble,
            target_ensemble=self.backward_ensemble)

        if self.direction is None:
            self.mover = paths.RandomChoiceMover(
                [self.forward_mover, self.backward_mover])
        elif self.direction > 0:
            self.mover = self.forward_mover
        elif self.direction < 0:
            self.mover = self.backward_mover