Example #1
0
    def check_populate_initial(self, prob, target_counts):
        istate = InitialState(0, 0, 0, pcoord=[0.0])
        self.system.bin_target_counts = np.array(
            [target_counts, target_counts])

        self.we_driver.populate_initial([istate], [prob], system=self.system)
        assert len(self.we_driver.next_iter_binning[0]) == target_counts
Example #2
0
    def test_recycle(self):
        segments = [
            self.segment(0.0, 1.5, weight=0.5),
            self.segment(0.0, 0.5, weight=0.5)
        ]
        tstate = TargetState('recycle', [1.5], 0)
        istate = InitialState(0, 0, 0, pcoord=[0.0])

        self.we_driver.new_iteration(initial_states=[istate],
                                     target_states=[tstate])
        n_needed = self.we_driver.assign(segments)
        assert n_needed == 0
        self.we_driver.construct_next()

        n_recycled = len(list(self.we_driver.recycling_segments))
        assert n_recycled == 1

        assert len(self.we_driver.next_iter_binning[0]) == 4
        assert len(self.we_driver.next_iter_binning[1]) == 0
        assert abs(
            sum(seg.weight for seg in self.we_driver.next_iter_binning[0]) -
            1.0) < 4 * EPS
        assert np.allclose(
            [seg.weight for seg in self.we_driver.next_iter_binning[0]],
            [0.25 for _i in range(4)])
        assert segments[0].endpoint_type == Segment.SEG_ENDPOINT_RECYCLED
Example #3
0
    def parent(self):
        """Walker or InitialState: The parent of the walker."""
        parent_id = self.iteration.h5group['seg_index']['parent_id'][
            self.index]

        if parent_id >= 0:
            return Walker(parent_id, self.iteration.prev)

        istate_id = -(parent_id + 1)
        row = self.iteration.h5group['ibstates']['istate_index'][istate_id]

        # Initial states may or may not be generated from a basis state.
        bstate_id = row['basis_state_id']
        try:
            bstate = self.iteration.basis_state(bstate_id)
        except IndexError:
            bstate = None
            bstate_id = None

        return InitialState(
            istate_id,
            bstate_id,
            row['iter_created'],
            iter_used=row['iter_used'],
            istate_type=row['istate_type'],
            istate_status=row['istate_status'],
            pcoord=self.iteration.h5group['ibstates']['istate_pcoord']
            [istate_id],
            basis_state=bstate,
        )
Example #4
0
File: core.py Project: SHZ66/westpa
 def initial_states(self):
     """list[InitialState]: Initial states."""
     return [
         InitialState(
             row.Index,
             row.basis_state_id,
             row.iter_created,
             iter_used=row.iter_used,
             istate_type=row.istate_type,
             istate_status=row.istate_status,
             pcoord=pcoord,
         ) for row, pcoord in zip(self.initial_state_info.itertuples(),
                                  self.initial_state_pcoords)
     ]
Example #5
0
    def from_data_manager(cls, n_iter, seg_id, data_manager=None):
        '''Construct and return a trajectory trace whose last segment is identified
        by ``seg_id`` in the iteration number ``n_iter``.'''

        data_manager = data_manager or westpa.rc.get_data_manager()

        # These values are used later on
        endpoint_type = None
        pcoord_dtype = None
        pcoord_pt_shape = None

        seginfo = []
        parent_id = seg_id

        while n_iter > 0 and parent_id >= 0:
            seg_id = parent_id
            iter_group = data_manager.get_iter_group(n_iter)
            pcoord_ds = iter_group['pcoord']
            seg_index = iter_group['seg_index']
            n_segs = pcoord_ds.shape[0]
            pcoord_len = pcoord_ds.shape[1]

            assert seg_id < n_segs

            indexrow = seg_index[seg_id]
            final_pcoord = pcoord_ds[seg_id, pcoord_len - 1]
            weight = indexrow['weight']
            cputime = indexrow['cputime']
            walltime = indexrow['walltime']

            try:
                parent_id = int(indexrow['parent_id'])
            except IndexError:
                # old HDF5 version
                parent_id = int(
                    iter_group['parents'][indexrow['parents_offset']])

            if endpoint_type is None:
                endpoint_type = indexrow['endpoint_type']
                pcoord_pt_shape = pcoord_ds.shape[2:]
                pcoord_dtype = pcoord_ds.dtype

            seginfo.append(
                (n_iter, seg_id, weight, walltime, cputime, final_pcoord))

            del iter_group, pcoord_ds, seg_index
            n_iter -= 1

        # loop terminates with parent_id set to the identifier of the initial state,
        # seg_id set to the identifier of the first segment in the trajectory, and
        # n_iter set to one less than the iteration of the first segment
        first_iter = n_iter + 1
        first_seg_id = seg_id
        first_parent_id = parent_id

        # Initial segment (for fetching initial state)
        first_segment = Segment(n_iter=first_iter,
                                seg_id=first_seg_id,
                                parent_id=first_parent_id)

        seginfo.reverse()

        summary_dtype = np.dtype([
            ('n_iter', n_iter_dtype),
            ('seg_id', seg_id_dtype),
            ('weight', weight_dtype),
            ('walltime', utime_dtype),
            ('cputime', utime_dtype),
            ('final_pcoord', pcoord_dtype, pcoord_pt_shape),
        ])

        summary = np.array(seginfo, dtype=summary_dtype)

        try:
            initial_state = data_manager.get_segment_initial_states(
                [first_segment], first_iter)[0]
        except KeyError:
            # old HDF5 version
            assert parent_id < 0
            istate_pcoord = data_manager.get_iter_group(first_iter)['pcoord'][
                first_seg_id, 0]
            istate_id = -(first_parent_id + 1)
            basis_state = None
            initial_state = InitialState(istate_id,
                                         None,
                                         iter_created=0,
                                         pcoord=istate_pcoord)

        else:
            basis_state = data_manager.get_basis_states(first_iter)[
                initial_state.basis_state_id]

        return cls(summary, endpoint_type, basis_state, initial_state,
                   data_manager)