diff --git a/src/mol-plugin/behavior/dynamic/volume-streaming/util.ts b/src/mol-plugin/behavior/dynamic/volume-streaming/util.ts index 0f1d5ecca749050a9ef7e3f7e0aa388d53e21dd5..8a4f9bb975b8f0a7115373728f546919cbc5adbf 100644 --- a/src/mol-plugin/behavior/dynamic/volume-streaming/util.ts +++ b/src/mol-plugin/behavior/dynamic/volume-streaming/util.ts @@ -18,16 +18,20 @@ export function getStreamingMethod(s?: Structure, defaultKind: VolumeServerInfo. if (!MmcifFormat.is(model.sourceData)) return defaultKind; const { db } = model.sourceData.data; + const { db_name, content_type } = db.pdbx_database_related - // prefer EMDB entries over structure-factors (SF) e.g. for 'ELECTRON CRYSTALLOGRAPHY' entries - // like 6axz or 6kj3 for which EMDB entries are available but map calculation from SF is hard + // Prefer EMDB entries over structure-factors (SF) e.g. for 'ELECTRON CRYSTALLOGRAPHY' entries + // like 6AXZ or 6KJ3 for which EMDB entries are available but map calculation from SF is hard. + // Also check for `content_type` of 'associated EM volume' to exclude cases like 6TEK which + // are solved with 'X-RAY DIFFRACTION' but have an related EMDB entry of type 'other EM volume'. for (let i = 0, il = db.pdbx_database_related._rowCount; i < il; ++i) { - if (db.pdbx_database_related.db_name.value(i).toUpperCase() === 'EMDB') { + if (db_name.value(i).toUpperCase() === 'EMDB' && content_type.value(i) === 'associated EM volume') { return 'em' } } - if (db.pdbx_database_status.status_code_sf.isDefined && db.pdbx_database_status.status_code_sf.value(0) === 'REL') { + const { status_code_sf } = db.pdbx_database_status + if (status_code_sf.isDefined && status_code_sf.value(0) === 'REL') { return 'x-ray' }