molstar
Version:
A comprehensive macromolecular library.
118 lines (117 loc) • 5.16 kB
JavaScript
/**
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
var fs = tslib_1.__importStar(require("fs"));
var path = tslib_1.__importStar(require("path"));
var argparse = tslib_1.__importStar(require("argparse"));
var make_dir_1 = require("../../../mol-util/make-dir");
var now_1 = require("../../../mol-util/now");
var performance_monitor_1 = require("../../../mol-util/performance-monitor");
var cmdParser = new argparse.ArgumentParser({
add_help: true,
description: 'Download JSON data from PDBe API'
});
cmdParser.add_argument('--in', { help: 'Input folder', required: true });
cmdParser.add_argument('--out', { help: 'Output folder', required: true });
var cmdArgs = cmdParser.parse_args();
function getPDBid(name) {
var idx = name.indexOf('_');
if (idx < 0)
idx = name.indexOf('.');
return name.substr(0, idx).toLowerCase();
}
function findEntries() {
var files = fs.readdirSync(cmdArgs.in);
var cifTest = /\.cif$/;
var groups = new Map();
var keys = [];
for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
var f = files_1[_i];
if (!cifTest.test(f))
continue;
var id = getPDBid(f);
var groupId = "".concat(id[1]).concat(id[2]);
if (groups.has(groupId))
groups.get(groupId).push(id);
else {
keys.push(groupId);
groups.set(groupId, [id]);
}
}
var ret = [];
for (var _a = 0, keys_1 = keys; _a < keys_1.length; _a++) {
var key = keys_1[_a];
ret.push({ key: key, entries: groups.get(key) });
}
return ret;
}
function process() {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var entries, started, prog, _i, entries_1, e, ts, data, _a, _b, ee, query, _c, _d, e_1, time;
return tslib_1.__generator(this, function (_e) {
switch (_e.label) {
case 0:
entries = findEntries();
(0, make_dir_1.makeDir)(cmdArgs.out);
started = (0, now_1.now)();
prog = 0;
_i = 0, entries_1 = entries;
_e.label = 1;
case 1:
if (!(_i < entries_1.length)) return [3 /*break*/, 12];
e = entries_1[_i];
ts = (0, now_1.now)();
console.log("".concat(prog, "/").concat(entries.length, " ").concat(e.entries.length, " entries."));
data = Object.create(null);
_a = 0, _b = e.entries;
_e.label = 2;
case 2:
if (!(_a < _b.length)) return [3 /*break*/, 10];
ee = _b[_a];
return [4 /*yield*/, (0, node_fetch_1.default)("https://www.ebi.ac.uk/pdbe/api/validation/residuewise_outlier_summary/entry/".concat(ee))];
case 3:
query = _e.sent();
_e.label = 4;
case 4:
_e.trys.push([4, 8, , 9]);
if (!(query.status === 200)) return [3 /*break*/, 6];
_c = data;
_d = ee;
return [4 /*yield*/, query.json()];
case 5:
_c[_d] = (_e.sent())[ee] || {};
return [3 /*break*/, 7];
case 6:
console.error(ee, query.status);
_e.label = 7;
case 7: return [3 /*break*/, 9];
case 8:
e_1 = _e.sent();
console.error(ee, '' + e_1);
return [3 /*break*/, 9];
case 9:
_a++;
return [3 /*break*/, 2];
case 10:
// const query = await fetch(`https://www.ebi.ac.uk/pdbe/api/validation/residuewise_outlier_summary/entry`, { method: 'POST', body });
// console.log(query.status);
// const data = await query.text();
fs.writeFileSync(path.join(cmdArgs.out, e.key + '.json'), JSON.stringify(data));
time = (0, now_1.now)() - started;
console.log("".concat(++prog, "/").concat(entries.length, " in ").concat(performance_monitor_1.PerformanceMonitor.format(time), " (last ").concat(performance_monitor_1.PerformanceMonitor.format((0, now_1.now)() - ts), ", avg ").concat(performance_monitor_1.PerformanceMonitor.format(time / prog), ")"));
_e.label = 11;
case 11:
_i++;
return [3 /*break*/, 1];
case 12: return [2 /*return*/];
}
});
});
}
process();
;