Skip to content
Snippets Groups Projects
Commit 6b8db5ab authored by Sebastian Bittrich's avatar Sebastian Bittrich
Browse files

reverts trygetencoder order to original

parent 37a0b07d
No related branches found
No related tags found
No related merge requests found
......@@ -111,13 +111,12 @@ function getDefaultEncoder(type: Field.Type): ArrayEncoder {
}
function tryGetEncoder(categoryName: string, field: Field, format: Field.Format | undefined, provider: EncodingProvider | undefined) {
// TODO made provider the first check - might break servers/model/query
if (provider && provider.get(categoryName, field.name)) {
return provider.get(categoryName, field.name);
} else if (format && format.encoder) {
if (format && format.encoder) {
return format.encoder;
} else if (field.defaultFormat && field.defaultFormat.encoder) {
return field.defaultFormat.encoder;
} else if (provider) {
return provider.get(categoryName, field.name);
} else {
return void 0;
}
......
import './index.html'
import { CIF, CifCategory, CifField, getCifFieldType } from '../../mol-io/reader/cif';
import { CifWriter } from '../../mol-io/writer/cif';
import { classifyFloatArray, classifyIntArray } from '../../mol-io/common/binary-cif';
async function parseCif(data: string|Uint8Array) {
const comp = CIF.parse(data);
......@@ -25,7 +24,14 @@ async function init(props = {}) {
const encoder = CifWriter.createEncoder({
binary: true,
encoderName: 'mol*',
binaryAutoClassifyEncoding: true,
binaryEncodingPovider: CifWriter.createEncodingProviderFromJsonConfig([
// {
// 'categoryName': 'atom_site',
// 'columnName': 'Cartn_x',
// 'encoding': 'delta',
// 'precision': 3
// },
{
'categoryName': 'atom_site',
'columnName': 'Cartn_y',
......@@ -51,7 +57,7 @@ async function init(props = {}) {
const cat = cif.categories[c];
const fields: CifWriter.Field[] = [];
for (const f of cat.fieldNames) {
fields.push(classify(f, cat.getField(f)!))
fields.push(wrap(f, cat.getField(f)!))
}
encoder.writeCategory(getCategoryInstanceProvider(cif.categories[c], fields));
......@@ -59,12 +65,13 @@ async function init(props = {}) {
const ret = encoder.getData() as Uint8Array;
const cif2 = (await parseCif(ret)).blocks[0];
// should be untouched
// should be untouched: delta encoding
console.log(cif2.categories['atom_site'].getField('Cartn_x'));
// should have integer precision
// should have rle encoding, 0 decimal places
console.log(cif2.categories['atom_site'].getField('Cartn_y'));
// should have 1 decimal place
// should have delta encoding, 1 decimal place
console.log(cif2.categories['atom_site'].getField('Cartn_z'));
// should use delta-rle encoding
console.log(cif2.categories['atom_site'].getField('label_seq_id'));
}
......@@ -77,15 +84,13 @@ function getCategoryInstanceProvider(cat: CifCategory, fields: CifWriter.Field[]
};
}
function classify(name: string, field: CifField): CifWriter.Field {
function wrap(name: string, field: CifField): CifWriter.Field {
const type = getCifFieldType(field);
if (type['@type'] === 'str') {
return { name, type: CifWriter.Field.Type.Str, value: field.str, valueKind: field.valueKind };
} else if (type['@type'] === 'float') {
const encoder = classifyFloatArray(field.toFloatArray({ array: Float64Array }));
return CifWriter.Field.float(name, field.float, { valueKind: field.valueKind, encoder, typedArray: Float64Array });
return { name, type: CifWriter.Field.Type.Float, value: field.float, valueKind: field.valueKind };
} else {
const encoder = classifyIntArray(field.toIntArray({ array: Int32Array }));
return CifWriter.Field.int(name, field.int, { valueKind: field.valueKind, encoder, typedArray: Int32Array });
return { name, type: CifWriter.Field.Type.Int, value: field.int, valueKind: field.valueKind };
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment