コード例 #1
0
def add_state_loop(factor=1,
                   pause=2.0,
                   first=-1,
                   last=-1,
                   loop=1,
                   start=0,
                   _self=cmd):
    cmd = _self
    if not start:
        start = cmd.get_movie_length() + 1
    loop = int(loop)
    fps = float(cmd.get('movie_fps'))
    n_state = cmd.count_states()
    duration = (pause) + (factor * n_state) / fps
    n_frame = int(round(fps * duration))
    if n_frame > 0:
        cmd.mset("1 x%d" % n_frame, start, freeze=1)
        cmd.mview("store", start, state=1, freeze=1)
        cmd.mview("store",
                  start + (n_frame * pause * 0.5) / duration,
                  state=1,
                  freeze=1)
        cmd.mview("store",
                  start + n_state * factor +
                  (n_frame * pause * 0.5) / duration,
                  state=n_state,
                  freeze=1)
        cmd.mview("store", start + n_frame - 1, state=n_state, freeze=1)
        if loop and (start == 1):
            cmd.mview("interpolate", wrap=1)
        else:
            cmd.mview("interpolate")
        cmd.frame(start)
コード例 #2
0
ファイル: querying.py プロジェクト: gratefulfrog/lib
    def get_object_state(name):
        '''
DESCRIPTION

    Returns the effective object state.
        '''
        states = cmd.count_states(name)
        if states < 2 and cmd.get_setting_boolean('static_singletons'):
            return 1
        state = cmd.get_setting_int('state', name)
        if state > states:
            raise pymol.CmdException('Invalid state %d for object %s' % (state, name))
        return state
コード例 #3
0
ファイル: querying.py プロジェクト: jchodera/pymol
    def get_object_state(name):
        '''
DESCRIPTION

    Returns the effective object state.
        '''
        states = cmd.count_states(name)
        if states < 2 and cmd.get_setting_boolean('static_singletons'):
            return 1
        state = cmd.get_setting_int('state', name)
        if state > states:
            raise pymol.CmdException('Invalid state %d for object %s' %
                                     (state, name))
        return state
コード例 #4
0
ファイル: selecting.py プロジェクト: evonove/pymol
    def objsele_state_iter(selection, state=0, _self=cmd):
        '''
DESCRIPTION

    API only. Get (object-specific-selection, object-state) tuples for all
    objects in selection.
        '''
        for oname in _self.get_object_list('(' + selection + ')'):
            osele = '(%s) & ?%s' % (selection, oname)
            if state < 0:
                first = last = pymol.querying.get_object_state(oname)
            elif state == 0:
                first = 1
                last = cmd.count_states('%' + oname)
            else:
                first = last = state
            for ostate in range(first, last + 1):
                yield osele, ostate
コード例 #5
0
ファイル: movie.py プロジェクト: aghozlane/pymol
def add_state_loop(factor=1,pause=2.0,first=-1,last=-1,loop=1,start=0,_self=cmd):
    cmd = _self
    if not start:
        start = cmd.get_movie_length() + 1
    loop = int(loop)
    fps = float(cmd.get('movie_fps'))
    n_state = cmd.count_states()
    duration = (pause) + (factor * n_state) / fps
    n_frame = int(round(fps * duration))
    if n_frame > 0:
        cmd.mset("1 x%d"%n_frame, start, freeze=1)
        cmd.mview("store",start, state=1, freeze=1)
        cmd.mview("store",start + (n_frame * pause * 0.5) / duration, state=1, freeze=1)
        cmd.mview("store",start + n_state * factor + (n_frame * pause * 0.5) / duration, state=n_state, freeze=1)
        cmd.mview("store",start + n_frame-1, state=n_state, freeze=1)
        if loop and (start == 1):
            cmd.mview("interpolate",wrap=1)
        else:
            cmd.mview("interpolate")
        cmd.frame(start)
コード例 #6
0
    def save(filename,
             selection='(all)',
             state=-1,
             format='',
             ref='',
             ref_state=-1,
             quiet=1,
             partial=0,
             _self=cmd):
        '''
DESCRIPTION

    "save" writes content to a file.
    
USAGE

    save filename [, selection [, state [, format ]]]

ARGUMENTS

    filename = string: file path to be written

    selection = string: atoms to save {default: (all)}

    state = integer: state to save {default: -1 (current state)}
    
PYMOL API

    cmd.save(string file, string selection, int state, string format)

NOTES

    The file format is automatically chosen if the extesion is one of
    the supported output formats: pdb, pqr, mol, pkl, mmd, mmod, pov,
    png, pse, aln, obj, mtl, or wrl.

    If the file format is not recognized, then a PDB file is written
    by default.

    For molecular files and where applicable and supported:
    
    * if state = -1 (default), then only the current state is written.

    * if state = 0, then a multi-state output file is written.
    
SEE ALSO

    load, get_model
        '''
        # preprocess selection
        input_selection = selection
        selection = selector.process(input_selection)
        #
        r = DEFAULT_ERROR
        lc_filename = string.lower(filename)
        if format == '':
            format = 'unknown'
            # refactor following if/elif cascade
            # with a dictionary lookup
            if re.search("\.pdb$|\.ent$", lc_filename):
                format = 'pdb'
            elif re.search("\.pqr$", lc_filename):
                format = 'pqr'
            elif re.search("\.mol$", lc_filename):
                format = 'mol'
            elif re.search("\.sdf$", lc_filename):
                format = 'sdf'
            elif re.search("\.pkl$", lc_filename):
                format = 'pkl'
            elif re.search("\.pkl$", lc_filename):
                format = 'pkla'
            elif re.search("\.mmd$", lc_filename):
                format = 'mmod'
            elif re.search("\.out$", lc_filename):
                format = 'mmod'
            elif re.search("\.dat$", lc_filename):
                format = 'mmod'
            elif re.search("\.mmod$", lc_filename):
                format = 'mmod'
            elif re.search("\.pmo$", lc_filename):
                format = 'pmo'
            elif re.search("\.pov$", lc_filename):
                format = 'pov'
            elif re.search("\.png$", lc_filename):
                format = 'png'
            elif re.search("\.pse$|\.psw$", lc_filename):
                format = 'pse'
            elif re.search("\.aln$", lc_filename):
                format = 'aln'
            elif re.search("\.fasta$", lc_filename):
                format = 'fasta'
            elif re.search("\.obj$", lc_filename):
                format = 'obj'
            elif re.search("\.mtl$", lc_filename):
                format = 'mtl'
            elif re.search("\.wrl$", lc_filename):
                format = 'wrl'
            elif re.search("\.idtf$", lc_filename):
                format = 'idtf'
            elif re.search("\.mol2$", lc_filename):
                format = 'mol2'
            else:
                format = str(format)
        if format == 'unknown':
            if not quiet:
                print " Save-Warning: Unrecognized file type -- defaulting to PDB format."
            format = 'pdb'
        filename = _self.exp_path(filename)
        if format == 'pdb':  # standard PDB file
            f = open(filename, "w")
            if f:
                st = ''
                try:
                    _self.lock(_self)
                    st = _cmd.get_pdb(_self._COb, "(" + str(selection) + ")",
                                      int(state) - 1, 0, str(ref),
                                      int(ref_state) - 1, int(quiet))
                    if st != None:
                        r = DEFAULT_SUCCESS
                finally:
                    _self.unlock(r, _self=_self)
                f.write(st)
                f.close()
                if not quiet:
                    print " Save: wrote \"" + filename + "\"."
        elif format == 'aln':
            st = ''
            try:
                _self.lock(_self)
                st = _cmd.get_seq_align_str(_self._COb, str(selection),
                                            int(state) - 1, 0, int(quiet))
                if st != None:
                    r = DEFAULT_SUCCESS
            finally:
                _self.unlock(r, _self)
            if st != None:
                f = open(filename, "w")
                f.write(st)
                f.close()
                if not quiet:
                    print " Save: wrote \"" + filename + "\"."
            else:
                r = DEFAULT_ERROR
        elif format == 'fasta':
            st = _self.get_fastastr(selection)
            if st != None:
                r = DEFAULT_SUCCESS
                f = open(filename, "w")
                f.write(st)
                f.close()
                if not quiet:
                    print " Save: wrote \"" + filename + "\"."
            else:
                r = DEFAULT_ERROR
        elif format == 'pqr':  # PQR (modified PDB file)
            f = open(filename, "w")
            if f:
                st = ''
                try:
                    _self.lock(_self)
                    st = _cmd.get_pdb(_self._COb, "(" + str(selection) + ")",
                                      int(state) - 1, 1, str(ref),
                                      int(ref_state) - 1, int(quiet))
                    if st != None:
                        r = DEFAULT_SUCCESS
                finally:
                    _self.unlock(r, _self)
                f.write(st)
                f.close()
                if not quiet:
                    print " Save: wrote \"" + filename + "\"."
        elif format == 'pkl':  # python binary
            io.pkl.toFile(_self.get_model(selection, state, ref, ref_state),
                          filename)
            r = DEFAULT_SUCCESS
            if not quiet:
                print " Save: wrote \"" + filename + "\"."
        elif format == 'pkla':  # ascii override
            io.pkl.toFile(_self.get_model(selection, state, ref, ref_state),
                          filename,
                          bin=0)
            r = DEFAULT_SUCCESS
            if not quiet:
                print " Save: wrote \"" + filename + "\"."
        elif format == 'pse':  # PyMOL session
            filename = filename.replace(
                "\\", "/")  # always use unix-like path separators
            _self.set("session_file", filename, quiet=1)
            if '(' in input_selection:  # ignore selections
                input_selection = ''
            if not quiet:
                print " Save: Please wait -- writing session file..."
            io.pkl.toFile(
                _self.get_session(str(input_selection), int(partial),
                                  int(quiet)), filename)
            r = DEFAULT_SUCCESS
            if not quiet:
                print " Save: wrote \"" + filename + "\"."
        elif format == 'mmod':  # macromodel
            io.mmd.toFile(_self.get_model(selection, state, ref, ref_state),
                          filename)
            r = DEFAULT_SUCCESS
            if not quiet:
                print " Save: wrote \"" + filename + "\"."
        elif format == 'sdf':
            state = int(state)
            if state == 0:
                first_state = 1
                last_state = cmd.count_states(selection)
            else:
                first_state = state
                last_state = state
            sdf = SDF(filename, 'w')
            for state in range(first_state, last_state + 1):
                rec = SDFRec(
                    io.mol.toList(
                        _self.get_model(selection, state, ref, ref_state)) +
                    ["$$$$\n"])
                sdf.write(rec)
            r = DEFAULT_SUCCESS
            if not quiet:
                print " Save: wrote %d states to \"%s\"." % (
                    1 + last_state - first_state, filename)
        elif format == 'mol':
            io.mol.toFile(_self.get_model(selection, state, ref, ref_state),
                          filename)
            r = DEFAULT_SUCCESS
            if not quiet:
                print " Save: wrote \"" + filename + "\"."
        elif format == "mol2":
            state = int(state)
            if state == 0:
                first_state = 1
                last_state = cmd.count_states(selection)
            else:
                first_state = state
                last_state = state
            recList = []
            for state in range(first_state, last_state + 1):
                # assign_atom_types selection, format [ mol2, macromodel ], state, quiet
                assign_atom_types(selection, "mol2", state, 1, _self)
                recList.extend(
                    io.mol2.toList(_self.get_model(selection, state, ref,
                                                   ref_state),
                                   selection=selection,
                                   state=state))
            m = MOL2(cmd=cmd)
            m.strToFile(recList, filename)
            r = DEFAULT_SUCCESS
            if not quiet:
                print " Save: wrote %d states to \"%s\"." % (
                    1 + last_state - first_state, filename)
        elif format == 'png':
            r = _self.png(filename, quiet=quiet)
        # refactor below to lift repeated code
        elif format == 'pov':
            tup = _self.get_povray()
            f = open(filename, "w")
            f.write(tup[0])
            f.write(tup[1])
            f.flush()
            f.close()
            if not quiet:
                print " Save: wrote \"" + filename + "\"."
            r = DEFAULT_SUCCESS
        elif format == 'obj':
            tup = _self.get_mtl_obj()
            f = open(filename, "w")
            f.write(tup[1])
            f.flush()
            f.close()
            r = DEFAULT_SUCCESS
        elif format == 'mtl':
            tup = _self.get_mtl_obj()
            f = open(filename, "w")
            f.write(tup[0])
            f.flush()
            f.close()
            r = DEFAULT_SUCCESS
        elif format == 'wrl':
            txt = _self.get_vrml()
            f = open(filename, "w")
            f.write(txt)
            f.flush()
            f.close()
            if not quiet:
                print " Save: wrote \"" + filename + "\"."
            r = DEFAULT_SUCCESS
        elif format == 'idtf':
            tup = _self.get_idtf()
            f = open(filename, "w")
            f.write(tup[0])
            f.write(tup[1])
            f.flush()
            f.close()
            if not quiet:
                fov = float(cmd.get("field_of_view"))
                dist = cmd.get_view()[11]
                print " 3Daac=%3.1f, 3Droll=0, 3Dc2c=0 0 1, 3Droo=%1.2f, 3Dcoo=0 0 %1.2f" % (
                    fov, -dist, dist)
                print " Save: wrote \"" + filename + "\"."
            r = DEFAULT_SUCCESS

        if _self._raising(r, _self): raise QuietException
        return r
コード例 #7
0
ファイル: exporting.py プロジェクト: aghozlane/pymol
    def save(filename, selection='(all)', state=-1, format='', ref='',
             ref_state=-1, quiet=1, partial=0,_self=cmd):
        '''
DESCRIPTION

    "save" writes content to a file.
    
USAGE

    save filename [, selection [, state [, format ]]]

ARGUMENTS

    filename = string: file path to be written

    selection = string: atoms to save {default: (all)}

    state = integer: state to save {default: -1 (current state)}
    
PYMOL API

    cmd.save(string file, string selection, int state, string format)

NOTES

    The file format is automatically chosen if the extesion is one of
    the supported output formats: pdb, pqr, mol, pkl, mmd, mmod, pov,
    png, pse, aln, obj, mtl, or wrl.

    If the file format is not recognized, then a PDB file is written
    by default.

    For molecular files and where applicable and supported:
    
    * if state = -1 (default), then only the current state is written.

    * if state = 0, then a multi-state output file is written.
    
SEE ALSO

    load, get_model
        '''
        # preprocess selection
        input_selection = selection
        selection = selector.process(input_selection)
        #   
        r = DEFAULT_ERROR
        lc_filename=string.lower(filename)
        if format=='':
            format = 'unknown'
            # refactor following if/elif cascade 
            # with a dictionary lookup
            if re.search("\.pdb$|\.ent$",lc_filename):
                format = 'pdb'
            elif re.search("\.pqr$",lc_filename):
                format = 'pqr'
            elif re.search("\.mol$",lc_filename):
                format = 'mol'
            elif re.search("\.sdf$",lc_filename):
                format = 'sdf'
            elif re.search("\.pkl$",lc_filename):
                format = 'pkl'
            elif re.search("\.pkl$",lc_filename):
                format = 'pkla'
            elif re.search("\.mmd$",lc_filename):
                format = 'mmod'
            elif re.search("\.out$",lc_filename):
                format = 'mmod'
            elif re.search("\.dat$",lc_filename):
                format = 'mmod'
            elif re.search("\.mmod$",lc_filename):
                format = 'mmod'
            elif re.search("\.pmo$",lc_filename):
                format = 'pmo'
            elif re.search("\.pov$",lc_filename):
                format = 'pov'
            elif re.search("\.png$",lc_filename):
                format = 'png'
            elif re.search("\.pse$|\.psw$",lc_filename):
                format = 'pse'
            elif re.search("\.aln$",lc_filename):
                format = 'aln'
            elif re.search("\.fasta$",lc_filename):
                format = 'fasta'
            elif re.search("\.obj$",lc_filename):
                format = 'obj'
            elif re.search("\.mtl$",lc_filename):
                format = 'mtl'
            elif re.search("\.wrl$",lc_filename):
                format = 'wrl'
            elif re.search("\.idtf$",lc_filename):
                format = 'idtf'
            elif re.search("\.mol2$",lc_filename):
                format = 'mol2'
            else:
                format = str(format)
        if format=='unknown':
            if not quiet:
                print " Save-Warning: Unrecognized file type -- defaulting to PDB format."
            format='pdb'
        filename = _self.exp_path(filename)
        if format=='pdb': # standard PDB file 
            f=open(filename,"w")
            if f:
                st = ''
                try:
                    _self.lock(_self)
                    st = _cmd.get_pdb(_self._COb,"("+str(selection)+")",int(state)-1,0,
                                      str(ref),int(ref_state)-1,int(quiet))
                    if st != None:
                        r = DEFAULT_SUCCESS                    
                finally:
                    _self.unlock(r,_self=_self)
                f.write(st)
                f.close()
                if not quiet:
                    print " Save: wrote \""+filename+"\"."
        elif format=='aln':
            st = ''
            try:
                _self.lock(_self)
                st = _cmd.get_seq_align_str(_self._COb,str(selection),int(state)-1,0,int(quiet))
                if st != None:
                    r = DEFAULT_SUCCESS
            finally:
                _self.unlock(r,_self)
            if st!=None:
                f=open(filename,"w")
                f.write(st)
                f.close()
                if not quiet:
                    print " Save: wrote \""+filename+"\"."
            else:
                r = DEFAULT_ERROR
        elif format=='fasta':
            st = _self.get_fastastr(selection)
            if st != None:
                r = DEFAULT_SUCCESS
                f=open(filename,"w")
                f.write(st)
                f.close()
                if not quiet:
                    print " Save: wrote \""+filename+"\"."
            else:
                r = DEFAULT_ERROR
        elif format=='pqr': # PQR (modified PDB file)
            f=open(filename,"w")
            if f:
                st = ''
                try:
                    _self.lock(_self)
                    st = _cmd.get_pdb(_self._COb,"("+str(selection)+")",int(state)-1,1,
                                      str(ref),int(ref_state)-1,int(quiet))
                    if st != None:
                        r = DEFAULT_SUCCESS
                finally:
                    _self.unlock(r,_self)
                f.write(st)
                f.close()
                if not quiet:
                    print " Save: wrote \""+filename+"\"."
        elif format=='pkl': # python binary
            io.pkl.toFile(_self.get_model(selection,state,ref,ref_state),filename)
            r = DEFAULT_SUCCESS
            if not quiet:
                print " Save: wrote \""+filename+"\"."
        elif format=='pkla': # ascii override
            io.pkl.toFile(_self.get_model(selection,state,ref,ref_state),filename,bin=0)
            r = DEFAULT_SUCCESS
            if not quiet:
                print " Save: wrote \""+filename+"\"."
        elif format=='pse': # PyMOL session
            filename = filename.replace("\\","/") # always use unix-like path separators	
            _self.set("session_file",filename,quiet=1)
            if '(' in input_selection: # ignore selections 
                input_selection=''
            if not quiet:
                print " Save: Please wait -- writing session file..."
            io.pkl.toFile(_self.get_session(str(input_selection),int(partial),int(quiet)),filename)
            r = DEFAULT_SUCCESS
            if not quiet:
                print " Save: wrote \""+filename+"\"."
        elif format=='mmod': # macromodel
            io.mmd.toFile(_self.get_model(selection,state,ref,ref_state),filename)
            r = DEFAULT_SUCCESS
            if not quiet:
                print " Save: wrote \""+filename+"\"."
        elif format=='sdf':
            state = int(state)
            if state==0:
                first_state = 1
                last_state = cmd.count_states(selection)
            else:
                first_state = state
                last_state = state
            sdf = SDF(filename,'w')
            for state in range(first_state, last_state+1):
                rec = SDFRec(io.mol.toList(_self.get_model(selection,state,ref,ref_state))
                             + ["$$$$\n"])
                sdf.write(rec)
            r = DEFAULT_SUCCESS
            if not quiet:
                print " Save: wrote %d states to \"%s\"."%(1+last_state-first_state,filename)
        elif format=='mol':
            io.mol.toFile(_self.get_model(selection,state,ref,ref_state),filename)
            r = DEFAULT_SUCCESS
            if not quiet:
                print " Save: wrote \""+filename+"\"."
        elif format=="mol2":
            state = int(state)
            if state==0:
                first_state = 1
                last_state = cmd.count_states(selection)
            else:
                first_state = state
                last_state = state
            recList=[]
            for state in range(first_state, last_state+1):
                # assign_atom_types selection, format [ mol2, macromodel ], state, quiet
                assign_atom_types(selection, "mol2", state, 1, _self)
                recList.extend(io.mol2.toList(_self.get_model(selection,state,ref,ref_state),selection=selection,state=state))
            m = MOL2(cmd=cmd)
            m.strToFile(recList,filename)
            r = DEFAULT_SUCCESS
            if not quiet:
                print " Save: wrote %d states to \"%s\"."%(1+last_state-first_state,filename)
        elif format=='png':
            r = _self.png(filename,quiet=quiet)
        # refactor below to lift repeated code
        elif format=='pov':
            tup = _self.get_povray()
            f=open(filename,"w")
            f.write(tup[0])
            f.write(tup[1])
            f.flush()
            f.close()
            if not quiet:
                print " Save: wrote \""+filename+"\"."
            r = DEFAULT_SUCCESS
        elif format=='obj':
            tup = _self.get_mtl_obj()
            f=open(filename,"w")
            f.write(tup[1])
            f.flush()
            f.close()
            r = DEFAULT_SUCCESS
        elif format=='mtl':
            tup = _self.get_mtl_obj()
            f=open(filename,"w")
            f.write(tup[0])
            f.flush()
            f.close()
            r = DEFAULT_SUCCESS
        elif format=='wrl':
            txt = _self.get_vrml()
            f=open(filename,"w")
            f.write(txt)
            f.flush()
            f.close()
            if not quiet:
                print " Save: wrote \""+filename+"\"."
            r = DEFAULT_SUCCESS
        elif format=='idtf':
            tup = _self.get_idtf()
            f=open(filename,"w")
            f.write(tup[0]);
            f.write(tup[1]);
            f.flush()
            f.close()
            if not quiet:
                fov = float(cmd.get("field_of_view"))
                dist = cmd.get_view()[11]
                print " 3Daac=%3.1f, 3Droll=0, 3Dc2c=0 0 1, 3Droo=%1.2f, 3Dcoo=0 0 %1.2f"%(fov,-dist,dist)
                print " Save: wrote \""+filename+"\"."
            r = DEFAULT_SUCCESS
            
        if _self._raising(r,_self): raise QuietException
        return r