Exemplo n.º 1
0
    def trip_time(
        self,
        traj=None,
        from_state=None,
        from_segment=None,
        to_state=None,
        to_segment=None,
        no_return=False,
        mean=False,
        norm=False,
        verbose=False,
    ):

        opt_mean = 0
        opt_norm = 0
        opt_no_return = 0
        opt_to_segment = 0
        opt_from_segment = 0
        opt_to_state = 0
        opt_from_state = 0

        if mean:
            opt_mean = 1
        if norm:
            opt_norm = 1
        if no_return:
            opt_no_return = 1

        if from_state != None:
            opt_from_state = 1
        else:
            from_state = 0

        if from_segment != None:
            opt_from_segment = 1
        else:
            from_segment = [0.0, 0.0]

        if to_state != None:
            opt_to_state = 1
        else:
            to_state = 0

        if to_segment != None:
            opt_to_segment = 1
        else:
            to_segment = [0.0, 0.0]

        if opt_to_segment == 0 and opt_to_state == 0:
            print "# the input variable to_state or to_segment is needed"
            return

        if traj == None:
            traj_inp = self.traj
            aux_dims = self.dimensions
        elif traj in ["CLUSTERS", "Clusters", "clusters"]:
            traj_inp = self.traj_clusters
            aux_dims = 1
        elif traj in ["NODES", "Nodes", "nodes"]:
            traj_inp = self.traj_nodes
            aux_dims = 1
        else:
            print "# A readable traj is needed"
            return

        traj_inp = pyn_math.standard_traj(traj_inp, particles=self.particles, dimensions=aux_dims)

        if type(from_state) in [int, float]:
            from_num_states = 1
            from_state = [from_state]
        elif type(state) in [list, tuple]:
            from_num_states = len(from_state)

        if type(to_state) in [int, float]:
            to_num_states = 1
            to_state = [to_state]
        elif type(to_state) in [list, tuple]:
            to_num_states = len(to_state)

        tt_mean = f_kin_anal.tt_dist(
            opt_norm,
            opt_no_return,
            opt_from_state,
            opt_from_segment,
            opt_to_state,
            opt_to_segment,
            from_state,
            from_segment,
            to_state,
            to_segment,
            traj_inp,
            traj_inp.shape[0],
            traj_inp.shape[1],
            traj_inp.shape[2],
            from_num_states,
            to_num_states,
        )

        tt_dist = copy.deepcopy(f_kin_anal.distrib)
        tt_x = copy.deepcopy(f_kin_anal.distrib_x)
        f_kin_anal.free_distrib()

        if verbose:
            print "# Mean first passage time:", tt_mean, "frames."

        if mean:
            return tt_mean
        else:
            return tt_x, tt_dist
Exemplo n.º 2
0
    def committed_trip_time(
        self,
        traj=None,
        states=None,
        segments=None,
        commitment=None,
        no_return=False,
        mean=False,
        norm=False,
        verbose=False,
    ):

        opt_mean = 0
        opt_norm = 0
        opt_segments = 0
        opt_states = 0
        opt_noreturn = 0

        if mean:
            opt_mean = 1
        if norm:
            opt_norm = 1
        if no_return:
            opt_noreturn = 1

        if states != None:
            opt_states = 1
            segments = [[0, 0]]
            num_segments = 1
        else:
            opt_segments = 0
            states = [0]
            num_states = 1

        if opt_segments == 0 and opt_states == 0:
            print "# the input variable states or segments is needed"
            return

        if traj == None:
            traj_inp = self.traj
            aux_dims = self.dimensions
        elif traj in ["CLUSTERS", "Clusters", "clusters"]:
            traj_inp = self.traj_clusters
            aux_dims = 1
        elif traj in ["NODES", "Nodes", "nodes"]:
            traj_inp = self.traj_nodes
            aux_dims = 1
        else:
            print "# A readable traj is needed"
            return

        traj_inp = pyn_math.standard_traj(traj_inp, particles=self.particles, dimensions=aux_dims)

        if type(states) in [int, float]:
            num_states = 1
            states = [states]
        elif type(states) in [list, tuple]:
            num_states = len(states)

        if opt_segments:
            num_segments = len(segments)

        if commitment == None:
            if opt_segments:
                num_commits = num_segments
            else:
                num_commits = num_states
            commitment = [True for ii in range(num_commits)]
        else:
            num_commits = len(commitment)

        commitment_in = [int(ii) for ii in commitment]
        ctt_mean = f_kin_anal.ctt_dist(
            opt_norm,
            opt_noreturn,
            opt_states,
            opt_segments,
            states,
            segments,
            commitment_in,
            traj_inp,
            traj_inp.shape[0],
            traj_inp.shape[1],
            traj_inp.shape[2],
            num_states,
            num_segments,
            num_commits,
        )

        ctt_dist = copy.deepcopy(f_kin_anal.distrib)
        ctt_x = copy.deepcopy(f_kin_anal.distrib_x)
        f_kin_anal.free_distrib()

        if verbose:
            print "# Mean first passage time:", ctt_mean, "frames."

        if mean:
            return ctt_mean
        else:
            return ctt_x, ctt_dist
Exemplo n.º 3
0
    def life_time(self, traj=None, state=None, segment=None, sel_dim=0, mean=False, norm=False, verbose=False):

        opt_mean = 0
        opt_norm = 0
        opt_segm = 0
        if mean:
            opt_mean = 1
        if norm:
            opt_norm = 1
        if segment:
            opt_segm = 1

        if type(sel_dim) in [int, float]:
            sel_dim = [sel_dim]
            num_sel_dim = 1
        elif type(sel_dim) in [list, tuple]:
            num_sel_dim = len(sel_dim)

        segments = numpy.zeros((self.dimensions, 2), dtype=float, order="F")
        if opt_segm:
            segment = numpy.array(segment)
            if len(segment.shape) == 1:
                segment.resize(1, segment.shape[0])
            for ii in range(num_sel_dim):
                segments[sel_dim[ii], 0] = segment[ii, 0]
                segments[sel_dim[ii], 1] = segment[ii, 1]
            num_states = 1
            state = [0]
        else:
            if type(state) in [int, float]:
                num_states = 1
                state = [state]
            elif type(state) in [list, tuple]:
                num_states = len(state)

        if traj == None:
            if self.__tr_mode_in_file__:
                infile = self.file_traj
                infile.unit = len(pyn_math.pyn_f90units) + 1
                pyn_math.pyn_f90units.append(infile.unit)
                lt_mean = f_kin_anal.life_time_dist_infile(
                    infile.name,
                    infile.binary,
                    infile.unit,
                    opt_norm,
                    opt_segm,
                    state,
                    segments,
                    sel_dim,
                    self.particles,
                    self.dimensions,
                    num_states,
                    num_sel_dim,
                )
                pyn_math.pyn_f90units.remove(infile.unit)
                infile.unit = None

            else:
                traj_inp = pyn_math.standard_traj(self.traj, particles=self.particles, dimensions=self.dimensions)
                lt_mean = f_kin_anal.life_time_dist(
                    opt_norm,
                    opt_segm,
                    traj_inp,
                    state,
                    segments,
                    traj_inp.shape[0],
                    traj_inp.shape[1],
                    traj_inp.shape[2],
                    num_states,
                )

        elif traj in ["CLUSTERS", "Clusters", "clusters"]:
            traj_inp = pyn_math.standard_traj(self.traj_clusters, particles=self.particles, dimensions=1)
            lt_mean = f_kin_anal.life_time_dist(
                opt_norm, traj_inp, state, traj_inp.shape[0], traj_inp.shape[1], traj_inp.shape[2], num_states
            )
        elif traj in ["NODES", "Nodes", "nodes"]:
            traj_inp = pyn_math.standard_traj(self.traj_nodes, particles=self.particles, dimensions=1)
            lt_mean = f_kin_anal.life_time_dist(
                opt_norm, traj_inp, state, traj_inp.shape[0], traj_inp.shape[1], traj_inp.shape[2], num_states
            )
        else:
            print "# A readable traj is needed"
            return

        lt_dist = copy.deepcopy(f_kin_anal.distrib)
        lt_x = copy.deepcopy(f_kin_anal.distrib_x)
        f_kin_anal.free_distrib()

        if verbose:
            print "# Mean life time:", lt_mean, "frames."

        if mean:
            return lt_mean
        else:
            return lt_x, lt_dist