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 { ...@@ -111,13 +111,12 @@ function getDefaultEncoder(type: Field.Type): ArrayEncoder {
} }
function tryGetEncoder(categoryName: string, field: Field, format: Field.Format | undefined, provider: EncodingProvider | undefined) { 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 (format && format.encoder) {
if (provider && provider.get(categoryName, field.name)) {
return provider.get(categoryName, field.name);
} else if (format && format.encoder) {
return format.encoder; return format.encoder;
} else if (field.defaultFormat && field.defaultFormat.encoder) { } else if (field.defaultFormat && field.defaultFormat.encoder) {
return field.defaultFormat.encoder; return field.defaultFormat.encoder;
} else if (provider) {
return provider.get(categoryName, field.name);
} else { } else {
return void 0; return void 0;
} }
......
import './index.html' import './index.html'
import { CIF, CifCategory, CifField, getCifFieldType } from '../../mol-io/reader/cif'; import { CIF, CifCategory, CifField, getCifFieldType } from '../../mol-io/reader/cif';
import { CifWriter } from '../../mol-io/writer/cif'; import { CifWriter } from '../../mol-io/writer/cif';
import { classifyFloatArray, classifyIntArray } from '../../mol-io/common/binary-cif';
async function parseCif(data: string|Uint8Array) { async function parseCif(data: string|Uint8Array) {
const comp = CIF.parse(data); const comp = CIF.parse(data);
...@@ -25,7 +24,14 @@ async function init(props = {}) { ...@@ -25,7 +24,14 @@ async function init(props = {}) {
const encoder = CifWriter.createEncoder({ const encoder = CifWriter.createEncoder({
binary: true, binary: true,
encoderName: 'mol*', encoderName: 'mol*',
binaryAutoClassifyEncoding: true,
binaryEncodingPovider: CifWriter.createEncodingProviderFromJsonConfig([ binaryEncodingPovider: CifWriter.createEncodingProviderFromJsonConfig([
// {
// 'categoryName': 'atom_site',
// 'columnName': 'Cartn_x',
// 'encoding': 'delta',
// 'precision': 3
// },
{ {
'categoryName': 'atom_site', 'categoryName': 'atom_site',
'columnName': 'Cartn_y', 'columnName': 'Cartn_y',
...@@ -51,7 +57,7 @@ async function init(props = {}) { ...@@ -51,7 +57,7 @@ async function init(props = {}) {
const cat = cif.categories[c]; const cat = cif.categories[c];
const fields: CifWriter.Field[] = []; const fields: CifWriter.Field[] = [];
for (const f of cat.fieldNames) { 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)); encoder.writeCategory(getCategoryInstanceProvider(cif.categories[c], fields));
...@@ -59,12 +65,13 @@ async function init(props = {}) { ...@@ -59,12 +65,13 @@ async function init(props = {}) {
const ret = encoder.getData() as Uint8Array; const ret = encoder.getData() as Uint8Array;
const cif2 = (await parseCif(ret)).blocks[0]; const cif2 = (await parseCif(ret)).blocks[0];
// should be untouched // should be untouched: delta encoding
console.log(cif2.categories['atom_site'].getField('Cartn_x')); 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')); 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')); console.log(cif2.categories['atom_site'].getField('Cartn_z'));
// should use delta-rle encoding
console.log(cif2.categories['atom_site'].getField('label_seq_id')); console.log(cif2.categories['atom_site'].getField('label_seq_id'));
} }
...@@ -77,15 +84,13 @@ function getCategoryInstanceProvider(cat: CifCategory, fields: CifWriter.Field[] ...@@ -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); const type = getCifFieldType(field);
if (type['@type'] === 'str') { if (type['@type'] === 'str') {
return { name, type: CifWriter.Field.Type.Str, value: field.str, valueKind: field.valueKind }; return { name, type: CifWriter.Field.Type.Str, value: field.str, valueKind: field.valueKind };
} else if (type['@type'] === 'float') { } else if (type['@type'] === 'float') {
const encoder = classifyFloatArray(field.toFloatArray({ array: Float64Array })); return { name, type: CifWriter.Field.Type.Float, value: field.float, valueKind: field.valueKind };
return CifWriter.Field.float(name, field.float, { valueKind: field.valueKind, encoder, typedArray: Float64Array });
} else { } else {
const encoder = classifyIntArray(field.toIntArray({ array: Int32Array })); return { name, type: CifWriter.Field.Type.Int, value: field.int, valueKind: field.valueKind };
return CifWriter.Field.int(name, field.int, { valueKind: field.valueKind, encoder, typedArray: Int32Array });
} }
} }
\ 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