Explorar el Código

reverts trygetencoder order to original

Sebastian Bittrich hace 5 años
padre
commit
6b8db5abc6
Se han modificado 2 ficheros con 18 adiciones y 14 borrados
  1. 3 4
      src/mol-io/writer/cif/encoder/binary.ts
  2. 15 10
      src/tests/browser/encoding-config.ts

+ 3 - 4
src/mol-io/writer/cif/encoder/binary.ts

@@ -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;
     }

+ 15 - 10
src/tests/browser/encoding-config.ts

@@ -1,7 +1,6 @@
 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 };
     }
 }