in layer2/AtomInfo.cpp [894:1026]
int AtomInfoFromPyList(PyMOLGlobals * G, AtomInfoType * I, PyObject * list)
{
int ok = true;
int tmp_int;
ov_size ll = 0;
OrthoLineType temp = "";
#define PCONVPYSTRTOLEXIDX(i, n) { \
ok = CPythonVal_PConvPyStrToStr_From_List(G, list, i, temp, sizeof(OrthoLineType)); \
n = LexIdx(G, temp); }
if(ok)
ok = PyList_Check(list);
if(ok)
ll = PyList_Size(list);
if(ok)
ok = CPythonVal_PConvPyIntToInt_From_List(G, list, 0, &I->resv);
if(ok)
PCONVPYSTRTOLEXIDX(1, I->chain);
if(ok)
ok = CPythonVal_PConvPyStrToStr_From_List(G, list, 2, I->alt, sizeof(Chain));
if(ok)
{
// get inscode from resi
ok = CPythonVal_PConvPyStrToStr_From_List(G, list, 3, temp, sizeof(temp));
int i = strlen(temp) - 1;
if (i >= 0 && !isdigit(temp[i])) {
I->setInscode(temp[i]);
}
}
if(ok) PCONVPYSTRTOLEXIDX(4, I->segi);
if(ok) PCONVPYSTRTOLEXIDX(5, I->resn);
if(ok) PCONVPYSTRTOLEXIDX(6, I->name);
if(ok)
ok = CPythonVal_PConvPyStrToStr_From_List(G, list, 7, I->elem, sizeof(ElemName));
if(ok) PCONVPYSTRTOLEXIDX(8, I->textType);
if(ok) PCONVPYSTRTOLEXIDX(9, I->label);
if(ok)
ok = PConvPyStrToStr(PyList_GetItem(list, 10), I->ssType, sizeof(SSType));
if(ok)
ok = PConvPyIntToInt(PyList_GetItem(list, 12), &I->customType);
if(ok)
ok = PConvPyIntToInt(PyList_GetItem(list, 13), &I->priority);
if(ok)
ok = PConvPyFloatToFloat(PyList_GetItem(list, 14), &I->b);
if(ok)
ok = PConvPyFloatToFloat(PyList_GetItem(list, 15), &I->q);
if(ok)
ok = PConvPyFloatToFloat(PyList_GetItem(list, 16), &I->vdw);
if(ok)
ok = PConvPyFloatToFloat(PyList_GetItem(list, 17), &I->partialCharge);
if(ok)
if((ok = CPythonVal_PConvPyIntToInt_From_List(G, list, 18, &tmp_int)))
I->formalCharge = tmp_int;
if(ok)
if((ok = CPythonVal_PConvPyIntToInt_From_List(G, list, 19, &tmp_int)))
I->hetatm = tmp_int;
if(ok){
PyObject *val = PyList_GetItem(list, 20);
if (PyList_Check(val)){
ok = PConvPyListToBitmask(val, &I->visRep, cRepCnt);
} else {
ok = PConvPyIntToInt(val, &I->visRep);
}
}
if(ok)
ok = PConvPyIntToInt(PyList_GetItem(list, 21), &I->color);
if(ok)
I->color = ColorConvertOldSessionIndex(G, I->color);
if(ok)
ok = PConvPyIntToInt(PyList_GetItem(list, 22), &I->id);
if(ok)
if((ok = CPythonVal_PConvPyIntToInt_From_List(G, list, 23, &tmp_int)))
I->cartoon = tmp_int;
if(ok)
ok = PConvPyIntToInt(PyList_GetItem(list, 24), (int *) &I->flags);
if(ok)
if((ok = CPythonVal_PConvPyIntToInt_From_List(G, list, 25, &tmp_int)))
I->bonded = tmp_int;
if(ok)
if((ok = CPythonVal_PConvPyIntToInt_From_List(G, list, 26, &tmp_int)))
I->chemFlag = tmp_int;
if(ok)
if((ok = CPythonVal_PConvPyIntToInt_From_List(G, list, 27, &tmp_int)))
I->geom = tmp_int;
if(ok)
if((ok = CPythonVal_PConvPyIntToInt_From_List(G, list, 28, &tmp_int)))
I->valence = tmp_int;
if(ok)
if((ok = CPythonVal_PConvPyIntToInt_From_List(G, list, 29, &tmp_int)))
I->masked = tmp_int;
if(ok)
if((ok = CPythonVal_PConvPyIntToInt_From_List(G, list, 30, &tmp_int)))
I->protekted = tmp_int;
if(ok)
ok = PConvPyIntToChar(PyList_GetItem(list, 31), (char *) &I->protons);
if(ok)
ok = PConvPyIntToInt(PyList_GetItem(list, 32), &I->unique_id);
if(ok && I->unique_id) { /* reserve existing IDs */
I->unique_id = SettingUniqueConvertOldSessionID(G, I->unique_id);
}
if(ok)
if((ok = CPythonVal_PConvPyIntToInt_From_List(G, list, 33, &tmp_int)))
I->stereo = tmp_int;
if(ok && (ll > 34))
ok = PConvPyIntToInt(PyList_GetItem(list, 34), &I->discrete_state);
if(ok && (ll > 35))
ok = PConvPyFloatToFloat(PyList_GetItem(list, 35), &I->elec_radius);
if(ok && (ll > 36))
ok = PConvPyIntToInt(PyList_GetItem(list, 36), &I->rank);
if(ok && (ll > 37))
if ((ok = CPythonVal_PConvPyIntToInt_From_List(G, list, 37, &tmp_int)))
I->hb_donor = tmp_int;
if(ok && (ll > 38))
if ((ok = CPythonVal_PConvPyIntToInt_From_List(G, list, 38, &tmp_int)))
I->hb_acceptor = tmp_int;
if(ok && (ll > 40))
if ((ok = CPythonVal_PConvPyIntToInt_From_List(G, list, 40, &tmp_int)))
I->has_setting = tmp_int;
if(ok && (ll > 46)) {
// only allocate if not all zero
float u[6];
for (int i = 0; ok && i < 6; ++i)
ok = CPythonVal_PConvPyFloatToFloat_From_List(G, list, 41 + i, u + i);
if(ok && (u[0] || u[1] || u[2] || u[3] || u[4] || u[5]))
memcpy(I->get_anisou(), u, 6 * sizeof(float));
}
if(ok && (ll > 47)) {
PCONVPYSTRTOLEXIDX(47, I->custom);
}
return (ok);
}