Skip to content
Snippets Groups Projects
Commit 0a30ed45 authored by McMenemy's avatar McMenemy
Browse files

first pass working extracting ion names

parent b5b282c1
No related branches found
No related tags found
No related merge requests found
...@@ -136,11 +136,11 @@ function checkAddingBondsFromPVCD(pvcd: DatabaseCollection<CCD_Schema>) { ...@@ -136,11 +136,11 @@ function checkAddingBondsFromPVCD(pvcd: DatabaseCollection<CCD_Schema>) {
} }
} }
async function createBonds(atomsRequested: boolean) { async function createBonds(
await ensureDataAvailable(); ccd: DatabaseCollection<CCD_Schema>,
const ccd = await readCCD(); pvcd: DatabaseCollection<CCD_Schema>,
const pvcd = await readPVCD(); atomsRequested: boolean
) {
const ccbSet = new Set<string>(); const ccbSet = new Set<string>();
const comp_id: string[] = []; const comp_id: string[] = [];
...@@ -243,8 +243,37 @@ function createAtoms(ccd: DatabaseCollection<CCD_Schema>) { ...@@ -243,8 +243,37 @@ function createAtoms(ccd: DatabaseCollection<CCD_Schema>) {
); );
} }
async function run(out: string, binary = false, ccaOut?: string) { function extractIonNames(ccd: DatabaseCollection<CCD_Schema>) {
const { bonds, atoms } = await createBonds(!!ccaOut); const ionNames: string[] = [];
for (const k in ccd) {
const {chem_comp} = ccd[k];
if (chem_comp.name.value(0).toUpperCase().includes(' ION')) {
ionNames.push(chem_comp.id.value(0));
}
}
return ionNames;
}
function writeIonNamesFile(filePath: string, ionNames: string[]) {
const output = `/**
* Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* Code-generated ion names params file. Names extracted from CCD components.
*
* @author molstar/chem-comp-dict/create-table cli
*/
export const IonNames = new Set(${JSON.stringify(ionNames).replace(/"/g, "'").replace(/,/g, ', ')});
`;
writeFile(filePath, output);
}
async function run(out: string, binary = false, ionNamesOut?: string, ccaOut?: string) {
await ensureDataAvailable();
const ccd = await readCCD();
const pvcd = await readPVCD();
const { bonds, atoms } = await createBonds(ccd, pvcd, !!ccaOut);
const ccbCif = getEncodedCif(CCB_TABLE_NAME, bonds, binary); const ccbCif = getEncodedCif(CCB_TABLE_NAME, bonds, binary);
if (!fs.existsSync(path.dirname(out))) { if (!fs.existsSync(path.dirname(out))) {
...@@ -259,6 +288,14 @@ async function run(out: string, binary = false, ccaOut?: string) { ...@@ -259,6 +288,14 @@ async function run(out: string, binary = false, ccaOut?: string) {
} }
writeFile(ccaOut, ccaCif); writeFile(ccaOut, ccaCif);
} }
if (!!ionNamesOut) {
const ionNames = extractIonNames(ccd);
if (!fs.existsSync(path.dirname(ionNamesOut))) {
fs.mkdirSync(path.dirname(ionNamesOut));
}
writeIonNamesFile(ionNamesOut, ionNames);
}
} }
const CCB_TABLE_NAME = 'CHEM_COMP_BONDS'; const CCB_TABLE_NAME = 'CHEM_COMP_BONDS';
...@@ -285,18 +322,23 @@ parser.addArgument([ '--binary', '-b' ], { ...@@ -285,18 +322,23 @@ parser.addArgument([ '--binary', '-b' ], {
action: 'storeTrue', action: 'storeTrue',
help: 'Output as BinaryCIF.' help: 'Output as BinaryCIF.'
}); });
parser.addArgument([ '--ionNamesOut', '-ino' ], {
help: 'Extract and store ion names.',
required: false
});
parser.addArgument(['--ccaOut', '-a'], { parser.addArgument(['--ccaOut', '-a'], {
help: 'Optional generated file output path for chem_comp_atom data.', help: 'Optional generated file output path for chem_comp_atom data.',
required: false required: false
}); });
interface Args { interface Args {
out: string out: string,
forceDownload?: boolean forceDownload?: boolean,
binary?: boolean, binary?: boolean,
ionNamesOut?: string,
ccaOut?: string ccaOut?: string
} }
const args: Args = parser.parseArgs(); const args: Args = parser.parseArgs();
const FORCE_DOWNLOAD = args.forceDownload; const FORCE_DOWNLOAD = args.forceDownload;
run(args.out, args.binary, args.ccaOut); run(args.out, args.binary, args.ionNamesOut, args.ccaOut);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment