molstar
Version:
A comprehensive macromolecular library.
82 lines (81 loc) • 2.96 kB
JavaScript
/**
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import { Mat4 } from '../../../mol-math/linear-algebra';
import { ConsoleLogger } from '../../../mol-util/console-logger';
import { now } from '../../../mol-util/now';
import { PerformanceMonitor } from '../../../mol-util/performance-monitor';
import { FileResultWriter, TarballFileResultWriter } from '../utils/writer';
import { JobEntry, JobManager } from './jobs';
import { resolveJob } from './query';
import { StructureCache } from './structure-wrapper';
export async function runLocal(input) {
if (!input.length) {
ConsoleLogger.error('Local', 'No input');
return;
}
for (const job of input) {
const binary = /\.bcif/.test(job.output);
JobManager.add({
entries: job.queries.map(q => {
var _a;
return JobEntry({
entryId: q.input,
queryName: q.query,
queryParams: q.params || {},
modelNums: q.modelNums,
transform: (_a = q.transform) !== null && _a !== void 0 ? _a : Mat4.identity(),
copyAllCategories: !!q.copyAllCategories
});
}),
writer: job.asTarGz
? new TarballFileResultWriter(job.output, job.gzipLevel)
: new FileResultWriter(job.output),
options: {
outputFilename: job.output,
binary,
tarball: job.asTarGz
}
});
}
JobManager.sort();
const started = now();
let job = JobManager.getNext();
let key = job.entries[0].key;
let progress = 0;
while (job) {
try {
await resolveJob(job);
job.writer.end();
ConsoleLogger.logId(job.id, 'Query', 'Written.');
if (job.entries.length > 0)
StructureCache.expireAll();
if (JobManager.hasNext()) {
job = JobManager.getNext();
if (key !== job.entries[0].key)
StructureCache.expire(key);
key = job.entries[0].key;
}
else {
break;
}
}
catch (e) {
ConsoleLogger.errorId(job.id, e);
if (JobManager.hasNext()) {
job = JobManager.getNext();
if (key !== job.entries[0].key)
StructureCache.expire(key);
key = job.entries[0].key;
}
else {
break;
}
}
ConsoleLogger.log('Progress', `[${++progress}/${input.length}] after ${PerformanceMonitor.format(now() - started)}.`);
}
ConsoleLogger.log('Progress', `Done in ${PerformanceMonitor.format(now() - started)}.`);
StructureCache.expireAll();
}