MmtfMoleculeReader.cpp (pymol-open-source-2.2.0) | : | MmtfMoleculeReader.cpp (pymol-open-source-2.3.0) | ||
---|---|---|---|---|
skipping to change at line 53 | skipping to change at line 53 | |||
*/ | */ | |||
static | static | |||
CoordSet ** get_assembly_csets(PyMOLGlobals * G, | CoordSet ** get_assembly_csets(PyMOLGlobals * G, | |||
const MMTF_container * container, | const MMTF_container * container, | |||
const AtomInfoType * atInfo, | const AtomInfoType * atInfo, | |||
const CoordSet * cset) | const CoordSet * cset) | |||
{ | { | |||
const char * assembly_id = SettingGetGlobal_s(G, cSetting_assembly); | const char * assembly_id = SettingGetGlobal_s(G, cSetting_assembly); | |||
if (!assembly_id || !assembly_id[0]) | if (!assembly_id || !assembly_id[0]) | |||
return NULL; | return nullptr; | |||
const MMTF_BioAssembly * assembly = NULL; | const MMTF_BioAssembly * assembly = nullptr; | |||
// look up assembly by name | // look up assembly by name | |||
for (auto a = container->bioAssemblyList, | for (auto a = container->bioAssemblyList, | |||
a_end = a + container->bioAssemblyListCount; | a_end = a + container->bioAssemblyListCount; | |||
a != a_end; ++a) { | a != a_end; ++a) { | |||
if (strcmp(a->name, assembly_id) == 0) { | if (strcmp(a->name, assembly_id) == 0) { | |||
assembly = a; | assembly = a; | |||
break; | break; | |||
} | } | |||
} | } | |||
if (!assembly) { | if (!assembly) { | |||
PRINTFB(G, FB_Executive, FB_Details) | PRINTFB(G, FB_Executive, FB_Details) | |||
" ExecutiveLoad-Detail: No such assembly: '%s'\n", assembly_id ENDFB(G); | " ExecutiveLoad-Detail: No such assembly: '%s'\n", assembly_id ENDFB(G); | |||
return NULL; | return nullptr; | |||
} | } | |||
PRINTFB(G, FB_Executive, FB_Details) | PRINTFB(G, FB_Executive, FB_Details) | |||
" ExecutiveLoad-Detail: Creating assembly '%s'\n", assembly_id ENDFB(G); | " ExecutiveLoad-Detail: Creating assembly '%s'\n", assembly_id ENDFB(G); | |||
int ncsets = assembly->transformListCount; | int ncsets = assembly->transformListCount; | |||
CoordSet ** csets = VLACalloc(CoordSet *, ncsets); | CoordSet ** csets = VLACalloc(CoordSet *, ncsets); | |||
for (int state = 0; state < ncsets; ++state) { | for (int state = 0; state < ncsets; ++state) { | |||
auto trans = assembly->transformList + state; | auto trans = assembly->transformList + state; | |||
// get set of chains for this transformation | // get set of chains for this transformation | |||
std::set<lexidx_t> chains_set; | std::set<lexborrow_t> chains_set; | |||
for (auto ci_it = trans->chainIndexList, | for (auto ci_it = trans->chainIndexList, | |||
ci_it_end = ci_it + trans->chainIndexListCount; | ci_it_end = ci_it + trans->chainIndexListCount; | |||
ci_it != ci_it_end; ++ci_it) { | ci_it != ci_it_end; ++ci_it) { | |||
const char * chain = container->chainIdList[*ci_it]; | const char * chain = container->chainIdList[*ci_it]; | |||
auto result = OVLexicon_BorrowFromCString(G->Lexicon, chain); | auto borrowed = LexBorrow(G, chain); | |||
if (OVreturn_IS_OK(result)) { | if (borrowed != LEX_BORROW_NOTFOUND) { | |||
chains_set.insert(result.word); | chains_set.insert(borrowed); | |||
} | } | |||
} | } | |||
// copy and transform | // copy and transform | |||
csets[state] = CoordSetCopyFilterChains(cset, atInfo, chains_set); | csets[state] = CoordSetCopyFilterChains(cset, atInfo, chains_set); | |||
CoordSetTransform44f(csets[state], trans->matrix); | CoordSetTransform44f(csets[state], trans->matrix); | |||
} | } | |||
return csets; | return csets; | |||
} | } | |||
skipping to change at line 116 | skipping to change at line 116 | |||
#ifdef _PYMOL_NO_MSGPACKC | #ifdef _PYMOL_NO_MSGPACKC | |||
PRINTFB(G, FB_ObjectMolecule, FB_Errors) | PRINTFB(G, FB_ObjectMolecule, FB_Errors) | |||
" Error: This build has no fast MMTF support.\n" ENDFB(G); | " Error: This build has no fast MMTF support.\n" ENDFB(G); | |||
return NULL; | return NULL; | |||
#else | #else | |||
if (I) { | if (I) { | |||
PRINTFB(G, FB_ObjectMolecule, FB_Errors) | PRINTFB(G, FB_ObjectMolecule, FB_Errors) | |||
" Error: loading MMTF into existing object not supported, please use 'crea te'\n" | " Error: loading MMTF into existing object not supported, please use 'crea te'\n" | |||
" to append to an existing object.\n" ENDFB(G); | " to append to an existing object.\n" ENDFB(G); | |||
return NULL; | return nullptr; | |||
} | } | |||
if (multiplex > 0) { | if (multiplex > 0) { | |||
PRINTFB(G, FB_ObjectMolecule, FB_Errors) | PRINTFB(G, FB_ObjectMolecule, FB_Errors) | |||
" Error: multiplex not supported for MMTF\n" ENDFB(G); | " Error: multiplex not supported for MMTF\n" ENDFB(G); | |||
return NULL; | return nullptr; | |||
} | } | |||
MMTF_container * container = MMTF_container_new(); | MMTF_container * container = MMTF_container_new(); | |||
if (!MMTF_unpack_from_string(st, st_len, container)) { | if (!MMTF_unpack_from_string(st, st_len, container)) { | |||
PRINTFB(G, FB_ObjectMolecule, FB_Errors) | PRINTFB(G, FB_ObjectMolecule, FB_Errors) | |||
" Error: Failed to load MMTF file\n" ENDFB(G); | " Error: Failed to load MMTF file\n" ENDFB(G); | |||
MMTF_container_free(container); | MMTF_container_free(container); | |||
return NULL; | return nullptr; | |||
} | } | |||
if (!quiet) { | if (!quiet) { | |||
PRINTFB(G, FB_ObjectMolecule, FB_Details) | PRINTFB(G, FB_ObjectMolecule, FB_Details) | |||
" MMTF structureId: '%s', mmtfVersion: '%s'\n", | " MMTF structureId: '%s', mmtfVersion: '%s'\n", | |||
(container->structureId ? container->structureId : ""), | (container->structureId ? container->structureId : ""), | |||
(container->mmtfVersion ? container->mmtfVersion : "") ENDFB(G); | (container->mmtfVersion ? container->mmtfVersion : "") ENDFB(G); | |||
// title "echo tag" | // title "echo tag" | |||
if (container->title && container->title[0] && | if (container->title && container->title[0] && | |||
End of changes. 8 change blocks. | ||||
10 lines changed or deleted | 10 lines changed or added |