layer3/Selector.h (170 lines of code) (raw):
/*
A* -------------------------------------------------------------------
B* This file contains source code for the PyMOL computer program
C* copyright 1998-2000 by Warren Lyford Delano of DeLano Scientific.
D* -------------------------------------------------------------------
E* It is unlawful to modify or remove this copyright notice.
F* -------------------------------------------------------------------
G* Please see the accompanying LICENSE file for further information.
H* -------------------------------------------------------------------
I* Additional authors of this source file include:
-*
-*
-*
Z* -------------------------------------------------------------------
*/
#ifndef _H_Selector
#define _H_Selector
#include"os_python.h"
#include"ObjectMolecule.h"
#include"CoordSet.h"
#include"DistSet.h"
#include"ObjectMap.h"
#include"OVOneToAny.h"
#include"Match.h"
#include "AtomIterators.h"
#define cSelectionAll 0
#define cSelectionNone 1
int SelectorInit(PyMOLGlobals * G);
int SelectorInitImpl(PyMOLGlobals * G, CSelector **I, short init2);
int SelectorCreate(PyMOLGlobals * G, const char *name, const char *sele, ObjectMolecule * obj,
int quiet, Multipick * mp);
int SelectorCreateWithStateDomain(PyMOLGlobals * G, const char *name, const char *sele,
ObjectMolecule * obj, int quiet, Multipick * mp,
int state, const char *domain);
int SelectorCreateSimple(PyMOLGlobals * G, const char *name, const char *sele);
int SelectorCreateFromObjectIndices(PyMOLGlobals * G, const char *sname, ObjectMolecule * obj,
int *idx, int n_idx);
int SelectorCreateOrderedFromObjectIndices(PyMOLGlobals * G, const char *sname,
ObjectMolecule * obj, int *idx, int n_idx);
int SelectorCreateOrderedFromMultiObjectIdxTag(PyMOLGlobals * G, const char *sname,
ObjectMolecule ** obj, int **pri_idx,
int *n_idx, int n_obj);
int SelectorCreateFromTagDict(PyMOLGlobals * G, const char *sname, OVOneToAny * id2tag,
int exec_managed);
/* if n_idx is negative, then looks for negative *idx as the sentinel */
int SelectorMoveMember(PyMOLGlobals * G, int s, int sele_old, int sele_new);
int SelectorCreateEmpty(PyMOLGlobals * G, const char *name, int exec_managed);
void SelectorToggle(PyMOLGlobals * G, int rep, const char *name);
void SelectorCylinder(PyMOLGlobals * G, const char *sele, const char *onoff);
int SelectorUpdateTable(PyMOLGlobals * G, int req_state, int domain);
int SelectorUpdateTableImpl(PyMOLGlobals * G, CSelector *I, int req_state, int domain);
#define cSelectorUpdateTableAllStates -1
#define cSelectorUpdateTableCurrentState -2
#define cSelectorUpdateTableEffectiveStates -3
int SelectorIndexByName(PyMOLGlobals * G, const char *sele, int ignore_case=-1);
char *SelectorGetNameFromIndex(PyMOLGlobals * G, int index);
void SelectorFree(PyMOLGlobals * G);
void SelectorFreeImpl(PyMOLGlobals * G, CSelector *I, short init2);
void SelectorDelete(PyMOLGlobals * G, const char *sele);
void SelectorFreeTmp(PyMOLGlobals * G, const char *name);
int SelectorGetTmp2(PyMOLGlobals * G, const char *input, char *store, bool quiet=false);
int SelectorGetTmp(PyMOLGlobals * G, const char *input, char *store, bool quiet=false);
int SelectorCheckTmp(PyMOLGlobals * G, const char *name);
int SelectorLoadCoords(PyMOLGlobals * G, PyObject * coords, int sele, int state);
PyObject *SelectorGetCoordsAsNumPy(PyMOLGlobals * G, int sele, int state);
float SelectorSumVDWOverlap(PyMOLGlobals * G, int sele1, int state1,
int sele2, int state2, float adjust);
int SelectorVdwFit(PyMOLGlobals * G, int sele1, int state1, int sele2, int state2,
float buffer, int quiet);
DistSet *SelectorGetDistSet(PyMOLGlobals * G, DistSet * ds,
int sele1, int state1, int sele2,
int state2, int mode, float cutoff, float *result);
DistSet *SelectorGetAngleSet(PyMOLGlobals * G, DistSet * ds,
int sele1, int state1,
int sele2, int state2,
int sele3, int state3,
int mode, float *angle_sum, int *angle_cnt);
DistSet *SelectorGetDihedralSet(PyMOLGlobals * G, DistSet * ds,
int sele1, int state1,
int sele2, int state2,
int sele3, int state3,
int sele4, int state4,
int mode, float *angle_sum, int *angle_cnt);
int SelectorGetSeleNCSet(PyMOLGlobals * G, int sele);
int SelectorCreateObjectMolecule(PyMOLGlobals * G, int sele, const char *name,
int target_state, int state, int discrete,
int zoom, int quiet, int singletons, int copy_properties);
int SelectorSubdivide(PyMOLGlobals * G, const char *pref, int sele1, int sele2,
int sele3, int sele4,
const char *fragPref, const char *compName, int *bondMode);
ObjectMolecule *SelectorGetSingleObjectMolecule(PyMOLGlobals * G, int sele);
ObjectMolecule *SelectorGetFirstObjectMolecule(PyMOLGlobals * G, int sele);
int SelectorRenameObjectAtoms(PyMOLGlobals * G, ObjectMolecule * obj, int sele, int force,
int update_table);
void SelectorUpdateObjectSele(PyMOLGlobals * G, ObjectMolecule * obj);
void SelectorDeletePrefixSet(PyMOLGlobals * G, const char *pref);
void SelectorUpdateCmd(PyMOLGlobals * G, int sele0, int sele1, int sta0, int sta1,
int method, int quiet);
int SelectorGetSingleAtomVertex(PyMOLGlobals * G, int sele, int state, float *v);
int SelectorGetSingleAtomObjectIndex(PyMOLGlobals * G, int sele, ObjectMolecule ** in_obj,
int *index);
int *SelectorGetResidueVLA(PyMOLGlobals * G, int sele0, int ca_only,
ObjectMolecule * exclude);
int SelectorCreateAlignments(PyMOLGlobals * G, int *pair, int sele1, int *vla1, int sele2,
int *vla2, const char *name1, const char *name2, int identical,
int atomic_input);
int SelectorGetPairIndices(PyMOLGlobals * G, int sele1, int state1, int sele2, int state2,
int mode, float cutoff, float h_angle, int **indexVLA,
ObjectMolecule *** objVLA);
int SelectorCountAtoms(PyMOLGlobals * G, int sele, int state);
void SelectorSetDeleteFlagOnSelectionInObject(PyMOLGlobals * G, int sele, ObjectMolecule *obj, signed char val);
int SelectorCheckIntersection(PyMOLGlobals * G, int sele1, int sele2);
int SelectorCountStates(PyMOLGlobals * G, int sele);
int SelectorClassifyAtoms(PyMOLGlobals * G, int sele, int preserve,
ObjectMolecule * only_object);
void SelectorLogSele(PyMOLGlobals * G, const char *name);
int SelectorMapMaskVDW(PyMOLGlobals * G, int sele1, ObjectMapState * oMap, float buffer,
int state);
int SelectorMapCoulomb(PyMOLGlobals * G, int sele1, ObjectMapState * oMap, float cutoff,
int state, int neutral, int shift, float shift_power);
int SelectorMapGaussian(PyMOLGlobals * G, int sele1, ObjectMapState * oMap,
float buffer, int state, int normalize, int use_max, int quiet,
float resolution);
PyObject *SelectorAsPyList(PyMOLGlobals * G, int sele1);
int SelectorFromPyList(PyMOLGlobals * G, const char *name, PyObject * list);
ObjectMolecule **SelectorGetObjectMoleculeVLA(PyMOLGlobals * G, int sele);
PyObject *SelectorColorectionGet(PyMOLGlobals * G, const char *prefix);
int SelectorColorectionApply(PyMOLGlobals * G, PyObject * list, const char *prefix);
int SelectorColorectionSetName(PyMOLGlobals * G, PyObject * list, const char *prefix,
char *new_prefix);
int SelectorColorectionFree(PyMOLGlobals * G, PyObject * list, const char *prefix);
void SelectorReinit(PyMOLGlobals * G);
PyObject *SelectorSecretsAsPyList(PyMOLGlobals * G);
int SelectorSecretsFromPyList(PyMOLGlobals * G, PyObject * list);
void SelectorMemoryDump(PyMOLGlobals * G);
int SelectorAssignSS(PyMOLGlobals * G, int target, int present, int state_value,
int preserve, ObjectMolecule * single_object, int quiet);
int SelectorPurgeObjectMembers(PyMOLGlobals * G, ObjectMolecule * obj);
void SelectorDefragment(PyMOLGlobals * G);
void SelectorSelectByID(PyMOLGlobals * G, const char *name, ObjectMolecule * obj, int *id,
int n_id);
void SelectorGetUniqueTmpName(PyMOLGlobals * G, char *name_buffer);
int SelectorIsAtomBondedToSele(PyMOLGlobals * G, ObjectMolecule * obj, int sele1atom,
int sele2);
void SelectorComputeFragPos(PyMOLGlobals * G, ObjectMolecule * obj, int state, int n_frag,
char *prefix, float **vla);
int SelectorSetName(PyMOLGlobals * G, const char *new_name, const char *old_name);
ObjectMolecule *SelectorGetCachedSingleAtom(PyMOLGlobals * G, int sele, int *theAtom);
ObjectMolecule *SelectorGetFastSingleAtomObjectIndex(PyMOLGlobals * G, int sele,
int *index);
ObjectMolecule *SelectorGetFastSingleObjectMolecule(PyMOLGlobals * G, int sele);
MapType *SelectorGetSpacialMapFromSeleCoord(PyMOLGlobals * G, int sele, int state,
float cutoff, float **coord_vla);
int SelectorNameIsKeyword(PyMOLGlobals * G, const char *name);
int SelectorResidueVLAsTo3DMatchScores(PyMOLGlobals * G, CMatch * match,
int *vla1, int n1, int state1,
int *vla2, int n2, int state2,
float seq_wt,
float radius, float scale,
float base, float coord_wt, float rms_exp);
int SelectorAssignAtomTypes(PyMOLGlobals * G, int sele, int state, int quiet, int format);
/* reserve special meaning for tags 1-15 and note that 0 is disallowed */
#define SELECTOR_BASE_TAG 0x10
typedef struct {
int selection;
int tag; /* must not be zero since it is also used as a boolean test for membership */
int next;
} MemberType;
int SelectorIsMember(PyMOLGlobals * G, int start, int sele);
/*
* Wrapper around SelectorGetTmp/SelectorFreeTmp/SelectorIndexByName.
*
* Temporary named selection gets deleted when instance gets out of scope.
*/
class SelectorTmp {
PyMOLGlobals * m_G;
char m_name[1024]; // OrthoLineType
int m_count;
public:
SelectorTmp(PyMOLGlobals * G, const char * sele) : m_G(G) {
m_count = SelectorGetTmp(m_G, sele, m_name);
}
~SelectorTmp() {
SelectorFreeTmp(m_G, m_name);
}
const char * getName() { return m_name; }
int getAtomCount() { return m_count; }
int getIndex() {
return m_name[0] ? SelectorIndexByName(m_G, m_name, false) : -1;
}
};
#endif