New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

brukerconverter

Package Overview
Dependencies
Maintainers
6
Versions
92
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

brukerconverter - npm Package Compare versions

Comparing version

to
5.0.1-pre.1667217924

src/constants/acquisitionModeDirect.js

2

brukerconverter.d.ts

@@ -163,5 +163,5 @@ import { DoubleArray } from 'cheminfo-types';

export function convertFileList(
export function convertFileCollection(
fileCollection: FileCollection,
options?: ConvertFileListOptions,
): Promise<SpectraData[]>;
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var filelistUtils = require('filelist-utils');
var path = require('path');
var jcampconverter = require('jcampconverter');

@@ -13,3 +12,3 @@ var iobuffer = require('iobuffer');

* Retrieve the list of files for further process
* @param {FileCollection[]} fileList
* @param {FileCollection[]} fileCollection
* @param {object} [options={}]

@@ -24,3 +23,5 @@ * @param {number|number[]} [options.processingNumber] - processing number to select, default the smallest number

*/
function groupByExperiments(fileList, options = {}) {
const expRegExp = new RegExp(`\\${path.sep}[0-9]+$`);
const procRegExp = new RegExp(`pdata\\${path.sep}[0-9]+$`);
function groupByExperiments(fileCollection, options = {}) {
let {

@@ -43,3 +44,3 @@ processingNumber,

const experiments = {};
for (let file of fileList) {
for (let file of fileCollection) {
let currentProcessingNo;

@@ -50,12 +51,12 @@ let currentExperimentNo;

let id;
const parts = file.relativePath.split('/');
if (file.relativePath.match(/\/pdata\/[0-9]+\/.*$/)) {
currentProcessingNo = Number(parts[parts.length - 2]);
currentExperimentNo = Number(parts[parts.length - 4]);
name = parts[parts.length - 5];
id = parts.slice(0, -3).join('/');
} else if (file.relativePath.match(/[0-9]+\/.*$/)) {
currentExperimentNo = Number(parts[parts.length - 2]);
name = parts[parts.length - 3] || parts[parts.length - 2];
id = parts.slice(0, -1).join('/');
const parts = file.webkitRelativePath.split(path.sep);
if (file.webkitRelativePath.match(procRegExp)) {
currentProcessingNo = Number(parts[parts.length - 1]);
currentExperimentNo = Number(parts[parts.length - 3]);
name = parts[parts.length - 4];
id = parts.slice(0, -2).join('/');
} else if (file.webkitRelativePath.match(expRegExp)) {
currentExperimentNo = Number(parts[parts.length - 1]);
name = parts[parts.length - 2];
id = file.webkitRelativePath;
} else {

@@ -74,3 +75,3 @@ continue;

processedData: {},
fileList: [],
fileCollectionItems: [],
};

@@ -82,3 +83,3 @@ }

experiment.processedData[currentProcessingNo] = {
fileList: [],
fileCollectionItems: [],
name,

@@ -89,3 +90,3 @@ expno: currentExperimentNo,

const processedData = experiment.processedData[currentProcessingNo];
processedData.fileList.push(file);
processedData.fileCollectionItems.push(file);
if (file.name.match(/^(1r|1i|2rr|procs|proc2s)$/)) {

@@ -103,3 +104,3 @@ processedData[file.name] = file;

} else {
experiment.fileList.push(file);
experiment.fileCollectionItems.push(file);
if (file.name.match(/^(ser|fid|acqus|acqu2s)$/)) {

@@ -155,7 +156,7 @@ experiment[file.name] = file;

if (firstProcessed.procs) {
experiment.fileList.push(firstProcessed.procs);
experiment.fileCollectionItems.push(firstProcessed.procs);
experiment.procs = firstProcessed.procs;
}
if (firstProcessed.proc2s) {
experiment.fileList.push(firstProcessed.proc2s);
experiment.fileCollectionItems.push(firstProcessed.proc2s);
experiment.proc2s = firstProcessed.proc2s;

@@ -170,6 +171,6 @@ }

if (experiment.acqus) {
oneProcessed.fileList.push(experiment.acqus);
oneProcessed.fileCollectionItems.push(experiment.acqus);
}
if (experiment.acqu2s) {
oneProcessed.fileList.push(experiment.acqu2s);
oneProcessed.fileCollectionItems.push(experiment.acqu2s);
}

@@ -239,2 +240,4 @@ experimentsArray.push({

const QSEQ = 2;
async function setFIDSpectrumData(file, spectra) {

@@ -250,11 +253,10 @@ let td = parseInt(spectra.meta.TD[0], 10);

let SW_H = Number(spectra.meta.SW_h[0]);
const SW_H = Number(spectra.meta.SW_h[0]);
let SF = Number(spectra.meta.SFO1[0]);
const SF = Number(spectra.meta.SFO1[0]);
spectra.meta.DATATYPE = 'NMR FID';
let DW = 1 / (2 * SW_H);
let AQ = td * DW;
const DW = 1 / (2 * SW_H);
const AQ = td * DW;
let endian = parseInt(spectra.meta.BYTORDA, 10);

@@ -275,3 +277,6 @@ endian = endian ? 0 : 1;

const stopReading = td / 2;
const aqMode = spectra.meta.AQ_mod;
const deltaX = aqMode === QSEQ ? DW : 2 * DW;
const nbPoints = aqMode === QSEQ ? td : (td / 2) >> 0;
for (let j = 0; j < nbSubSpectra; j++) {

@@ -281,3 +286,3 @@ let toSave = {

dataTable: '(X++(R..R))',
nbPoints: td,
nbPoints,
firstX: 0,

@@ -289,16 +294,24 @@ lastX: AQ,

data: {
x: mlSpectraProcessing.createStepArray({ length: td, step: DW }),
re: new Float64Array(td),
im: new Float64Array(td),
x: mlSpectraProcessing.createStepArray({ length: nbPoints, step: deltaX }),
re: new Float64Array(nbPoints),
im: new Float64Array(nbPoints),
},
isXYdata: true,
isFID: true,
observeFrequency: SF,
title: spectra.meta.TITLE,
deltaX: DW,
deltaX,
};
spectra.spectra[j] = toSave;
for (let i = 0; i < stopReading; i++) {
spectra.spectra[j].data.re[i] = ioBuffer.readInt32();
spectra.spectra[j].data.im[i] = ioBuffer.readInt32();
// const dtypa = spectra.meta.DTYPA;// we should use it for float or double FID data;
if (aqMode === QSEQ) {
for (let i = 0; i < nbPoints; i++) {
spectra.spectra[j].data.re[i] = ioBuffer.readInt32();
}
} else {
for (let i = 0; i < nbPoints; i++) {
spectra.spectra[j].data.re[i] = ioBuffer.readInt32();
spectra.spectra[j].data.im[i] = ioBuffer.readInt32();
}
}

@@ -308,7 +321,9 @@ }

async function setXYSpectrumData(file, spectra) {
let ioBufferReal = file.re ? new iobuffer.IOBuffer(await file.re.arrayBuffer()) : null;
let ioBufferImaginary = file.im
? new iobuffer.IOBuffer(await file.im.arrayBuffer())
: null;
async function setProcessedSpectrumData(files, spectra) {
const buffers = {};
for (const key in files) {
if (!files[key]) continue;
buffers[key] = new iobuffer.IOBuffer(await files[key].arrayBuffer());
}
let td = getDirectParameter(spectra.meta.SI);

@@ -329,8 +344,7 @@ let swP = getDirectParameter(spectra.meta.SW_p);

let nbSubSpectra = spectra.meta.nbSubSpectra ? spectra.meta.nbSubSpectra : 1;
if (endian) {
if (file.re) ioBufferReal.setLittleEndian();
if (file.im) ioBufferImaginary.setLittleEndian();
for (const key in buffers) buffers[key].setLittleEndian();
} else {
if (file.re) ioBufferReal.setBigEndian();
if (file.im) ioBufferImaginary.setBigEndian();
for (const key in buffers) buffers[key].setBigEndian();
}

@@ -347,2 +361,3 @@

isXYdata: true,
isFT: true,
nucleus: spectra.meta.NUC1,

@@ -354,21 +369,15 @@ observeFrequency: sf,

let deltaX = toSave.deltaX;
let x = new Float64Array(td);
let re = new Float64Array(td);
let im = file.im ? new Float64Array(td) : null;
if (im) {
const deltaX = toSave.deltaX;
const x = mlSpectraProcessing.xSequentialFill({ from: offset, step: deltaX });
const datum = {};
for (const key in buffers) {
const buffer = buffers[key];
const data = new Float64Array(td);
for (let k = 0; k < td; ++k) {
x[k] = offset + k * deltaX;
re[k] = ioBufferReal.readInt32();
im[k] = ioBufferImaginary.readInt32();
data[k] = buffer.readInt32();
}
} else {
for (let k = 0; k < td; ++k) {
x[k] = offset + k * deltaX;
re[k] = ioBufferReal.readInt32();
}
datum[key] = data;
}
toSave.data = im ? { x, re, im } : { x, re };
toSave.data = { ...datum, x };

@@ -389,3 +398,3 @@ spectra.spectra.push(toSave);

if (files['1r'] || files['1i']) {
await setXYSpectrumData(
await setProcessedSpectrumData(
{

@@ -431,3 +440,5 @@ re: files['1r'],

result.meta.nbSubSpectra = files['2rr']
result.meta.nbSubSpectra = ['2rr', '2ri', '2ir', '2ii'].some(
(key) => key in files,
)
? parseInt(result.meta.SI[1], 10)

@@ -454,3 +465,11 @@ : parseInt(result.meta.TD[1], 10);

result.meta.lastY = lastY;
await setXYSpectrumData({ re: files['2rr'] }, result);
await setProcessedSpectrumData(
{
rr: files['2rr'],
ri: files['2ri'],
ir: files['2ir'],
ii: files['2ii'],
},
result,
);
} else if (files.ser) {

@@ -496,13 +515,15 @@ firstY = 0;

* @param spectra
* @returns {{z: Array, minX: *, maxX: *, minY: *, maxY: *, minZ: *, maxZ: *, noise: number}}
* @returns {{z: Array<Array<number>>, minX: *, maxX: *, minY: *, maxY: *, minZ: *, maxZ: *}}
*/
function convertTo3DZ(spectra) {
function convertTo3DZ(datum) {
const spectra = datum.spectra;
// if (fileKeys.length === 0) {
// throw new Error('There is not data to extract');
// }
let ySize = spectra.length;
let xSize = spectra[0].data.re.length;
let z = new Array(ySize);
let xSize = spectra[0].data.x.length;
for (let i = 0; i < ySize; i++) {
z[i] = new Float64Array(spectra[i].data.re);
}
const firstX = spectra[0].data.x[0];

@@ -513,2 +534,27 @@ const lastX = spectra[0].data.x[xSize - 1];

const minMax = {};
const keyFiles = Object.keys(spectra[0].data).filter((key) => key !== 'x');
for (const keyFile of keyFiles) {
minMax[keyFile] = extractZMatrix(datum, {
keyFile,
ySize,
firstX,
lastX,
firstY,
lastY,
});
}
return minMax;
}
function extractZMatrix(datum, options) {
const spectra = datum.spectra;
const { keyFile, ySize, firstX, lastX, firstY, lastY } = options;
let z = new Array(ySize);
for (let i = 0; i < ySize; i++) {
z[i] = new Float64Array(spectra[i].data[keyFile]);
}
// Because the min / max value are the only information about the matrix if we invert

@@ -557,3 +603,3 @@ // min and max we need to invert the array

let result;
if (brukerFiles.ser || brukerFiles['2rr']) {
if (['ser', '2rr', '2ri', '2ir', '2ii'].some((key) => key in brukerFiles)) {
result = await convert2D(brukerFiles, options);

@@ -598,3 +644,3 @@ } else if (brukerFiles['1r'] || brukerFiles['1i'] || brukerFiles.fid) {

if (result.twoD) {
result.minMax = convertTo3DZ(result.spectra);
result.minMax = convertTo3DZ(result);

@@ -601,0 +647,0 @@ if (!options.keepSpectra) {

{
"name": "brukerconverter",
"version": "5.0.0",
"version": "5.0.1-pre.1667217924",
"description": "Parse and convert Bruker raw data",

@@ -34,21 +34,21 @@ "main": "lib/index.js",

"devDependencies": {
"@babel/plugin-transform-modules-commonjs": "^7.18.6",
"@types/jest": "^29.1.1",
"bruker-data-test": "0.4.0",
"@babel/plugin-transform-modules-commonjs": "^7.19.6",
"@types/jest": "^29.2.0",
"bruker-data-test": "^0.4.0",
"cheminfo-build": "^1.1.11",
"eslint": "^8.24.0",
"eslint": "^8.25.0",
"eslint-config-cheminfo": "^8.0.2",
"jest": "^29.1.2",
"jest": "^29.2.1",
"jest-matcher-deep-close-to": "^3.0.2",
"prettier": "^2.7.1",
"rollup": "^2.79.1"
"rollup": "^3.2.3"
},
"dependencies": {
"cheminfo-types": "^1.4.0",
"filelist-utils": "^0.11.0",
"iobuffer": "^5.1.0",
"filelist-utils": "^1.0.1",
"iobuffer": "^5.2.1",
"is-any-array": "^2.0.0",
"jcampconverter": "^9.0.2",
"ml-spectra-processing": "^11.12.0"
"ml-spectra-processing": "^11.13.0"
}
}

@@ -39,3 +39,3 @@ import { getCoffee } from 'bruker-data-test';

dataTable: '(X++(R..R))',
nbPoints: 65536,
nbPoints: 32768,
firstX: 0,

@@ -42,0 +42,0 @@ lastX: 3.984588800000003,

@@ -34,4 +34,4 @@ import { getData } from 'bruker-data-test';

expect(metadataFt.SI[1]).toBe(1024);
expect(minMaxFt.z).toHaveLength(1024);
expect(minMaxFt.z[0]).toHaveLength(1024);
expect(minMaxFt.rr.z).toHaveLength(1024);
expect(minMaxFt.rr.z[0]).toHaveLength(1024);

@@ -43,5 +43,5 @@ let minMaxSer = result[0].minMax;

expect(metadataSer.TD[1]).toBe(128);
expect(minMaxSer.z).toHaveLength(64);
expect(minMaxSer.z[0]).toHaveLength(4096);
expect(minMaxSer.re.z).toHaveLength(64);
expect(minMaxSer.re.z[0]).toHaveLength(2048);
});
});

@@ -0,4 +1,6 @@

import { sep } from 'path';
/**
* Retrieve the list of files for further process
* @param {FileCollection[]} fileList
* @param {FileCollection[]} fileCollection
* @param {object} [options={}]

@@ -13,3 +15,5 @@ * @param {number|number[]} [options.processingNumber] - processing number to select, default the smallest number

*/
export function groupByExperiments(fileList, options = {}) {
const expRegExp = new RegExp(`\\${sep}[0-9]+$`);
const procRegExp = new RegExp(`pdata\\${sep}[0-9]+$`);
export function groupByExperiments(fileCollection, options = {}) {
let {

@@ -32,3 +36,3 @@ processingNumber,

const experiments = {};
for (let file of fileList) {
for (let file of fileCollection) {
let currentProcessingNo;

@@ -39,12 +43,12 @@ let currentExperimentNo;

let id;
const parts = file.relativePath.split('/');
if (file.relativePath.match(/\/pdata\/[0-9]+\/.*$/)) {
currentProcessingNo = Number(parts[parts.length - 2]);
currentExperimentNo = Number(parts[parts.length - 4]);
name = parts[parts.length - 5];
id = parts.slice(0, -3).join('/');
} else if (file.relativePath.match(/[0-9]+\/.*$/)) {
currentExperimentNo = Number(parts[parts.length - 2]);
name = parts[parts.length - 3] || parts[parts.length - 2];
id = parts.slice(0, -1).join('/');
const parts = file.webkitRelativePath.split(sep);
if (file.webkitRelativePath.match(procRegExp)) {
currentProcessingNo = Number(parts[parts.length - 1]);
currentExperimentNo = Number(parts[parts.length - 3]);
name = parts[parts.length - 4];
id = parts.slice(0, -2).join('/');
} else if (file.webkitRelativePath.match(expRegExp)) {
currentExperimentNo = Number(parts[parts.length - 1]);
name = parts[parts.length - 2];
id = file.webkitRelativePath;
} else {

@@ -63,3 +67,3 @@ continue;

processedData: {},
fileList: [],
fileCollectionItems: [],
};

@@ -71,3 +75,3 @@ }

experiment.processedData[currentProcessingNo] = {
fileList: [],
fileCollectionItems: [],
name,

@@ -78,3 +82,3 @@ expno: currentExperimentNo,

const processedData = experiment.processedData[currentProcessingNo];
processedData.fileList.push(file);
processedData.fileCollectionItems.push(file);
if (file.name.match(/^(1r|1i|2rr|procs|proc2s)$/)) {

@@ -92,3 +96,3 @@ processedData[file.name] = file;

} else {
experiment.fileList.push(file);
experiment.fileCollectionItems.push(file);
if (file.name.match(/^(ser|fid|acqus|acqu2s)$/)) {

@@ -144,7 +148,7 @@ experiment[file.name] = file;

if (firstProcessed.procs) {
experiment.fileList.push(firstProcessed.procs);
experiment.fileCollectionItems.push(firstProcessed.procs);
experiment.procs = firstProcessed.procs;
}
if (firstProcessed.proc2s) {
experiment.fileList.push(firstProcessed.proc2s);
experiment.fileCollectionItems.push(firstProcessed.proc2s);
experiment.proc2s = firstProcessed.proc2s;

@@ -159,6 +163,6 @@ }

if (experiment.acqus) {
oneProcessed.fileList.push(experiment.acqus);
oneProcessed.fileCollectionItems.push(experiment.acqus);
}
if (experiment.acqu2s) {
oneProcessed.fileList.push(experiment.acqu2s);
oneProcessed.fileCollectionItems.push(experiment.acqu2s);
}

@@ -165,0 +169,0 @@ experimentsArray.push({

import { joinInfoMeta } from './joinMetaInfo.js';
import { parseData } from './parseData';
import { setFIDSpectrumData } from './setFIDSpectrumData';
import { setXYSpectrumData } from './setXYSpectrumData';
import { setProcessedSpectrumData } from './setProcessedSpectrumData';

@@ -12,3 +12,3 @@ export async function convert1D(files, options) {

if (files['1r'] || files['1i']) {
await setXYSpectrumData(
await setProcessedSpectrumData(
{

@@ -15,0 +15,0 @@ re: files['1r'],

@@ -5,3 +5,3 @@ import { joinInfoMeta } from './joinMetaInfo.js';

import { setFIDSpectrumData } from './setFIDSpectrumData';
import { setXYSpectrumData } from './setXYSpectrumData';
import { setProcessedSpectrumData } from './setProcessedSpectrumData';

@@ -21,3 +21,5 @@ export async function convert2D(files, options) {

result.meta.nbSubSpectra = files['2rr']
result.meta.nbSubSpectra = ['2rr', '2ri', '2ir', '2ii'].some(
(key) => key in files,
)
? parseInt(result.meta.SI[1], 10)

@@ -44,3 +46,11 @@ : parseInt(result.meta.TD[1], 10);

result.meta.lastY = lastY;
await setXYSpectrumData({ re: files['2rr'] }, result, true);
await setProcessedSpectrumData(
{
rr: files['2rr'],
ri: files['2ri'],
ir: files['2ir'],
ii: files['2ii'],
},
result,
);
} else if (files.ser) {

@@ -59,3 +69,3 @@ firstY = 0;

yTransmitterFrequencyOffset / yTransmitterFrequency + yWindowSize / 2;
await setFIDSpectrumData(files.ser, result);
await setFIDSpectrumData(files.ser, result, true);
}

@@ -62,0 +72,0 @@

@@ -17,3 +17,3 @@ import { convert1D } from './convert1D';

let result;
if (brukerFiles.ser || brukerFiles['2rr']) {
if (['ser', '2rr', '2ri', '2ir', '2ii'].some((key) => key in brukerFiles)) {
result = await convert2D(brukerFiles, options);

@@ -58,3 +58,3 @@ } else if (brukerFiles['1r'] || brukerFiles['1i'] || brukerFiles.fid) {

if (result.twoD) {
result.minMax = convertTo3DZ(result.spectra);
result.minMax = convertTo3DZ(result);

@@ -61,0 +61,0 @@ if (!options.keepSpectra) {

@@ -5,13 +5,15 @@ import { matrixMinMaxZ } from 'ml-spectra-processing';

* @param spectra
* @returns {{z: Array, minX: *, maxX: *, minY: *, maxY: *, minZ: *, maxZ: *, noise: number}}
* @returns {{z: Array<Array<number>>, minX: *, maxX: *, minY: *, maxY: *, minZ: *, maxZ: *}}
*/
export default function convertTo3DZ(spectra) {
export default function convertTo3DZ(datum) {
const spectra = datum.spectra;
// if (fileKeys.length === 0) {
// throw new Error('There is not data to extract');
// }
let ySize = spectra.length;
let xSize = spectra[0].data.re.length;
let z = new Array(ySize);
let xSize = spectra[0].data.x.length;
for (let i = 0; i < ySize; i++) {
z[i] = new Float64Array(spectra[i].data.re);
}
const firstX = spectra[0].data.x[0];

@@ -22,2 +24,27 @@ const lastX = spectra[0].data.x[xSize - 1];

const minMax = {};
const keyFiles = Object.keys(spectra[0].data).filter((key) => key !== 'x');
for (const keyFile of keyFiles) {
minMax[keyFile] = extractZMatrix(datum, {
keyFile,
ySize,
firstX,
lastX,
firstY,
lastY,
});
}
return minMax;
}
function extractZMatrix(datum, options) {
const spectra = datum.spectra;
const { keyFile, ySize, firstX, lastX, firstY, lastY } = options;
let z = new Array(ySize);
for (let i = 0; i < ySize; i++) {
z[i] = new Float64Array(spectra[i].data[keyFile]);
}
// Because the min / max value are the only information about the matrix if we invert

@@ -24,0 +51,0 @@ // min and max we need to invert the array

import { IOBuffer } from 'iobuffer';
import { createStepArray } from 'ml-spectra-processing';
import * as aqModeDirect from '../constants/acquisitionModeDirect';
export async function setFIDSpectrumData(file, spectra) {

@@ -14,11 +16,10 @@ let td = parseInt(spectra.meta.TD[0], 10);

let SW_H = Number(spectra.meta.SW_h[0]);
const SW_H = Number(spectra.meta.SW_h[0]);
let SF = Number(spectra.meta.SFO1[0]);
const SF = Number(spectra.meta.SFO1[0]);
spectra.meta.DATATYPE = 'NMR FID';
let DW = 1 / (2 * SW_H);
let AQ = td * DW;
const DW = 1 / (2 * SW_H);
const AQ = td * DW;
let endian = parseInt(spectra.meta.BYTORDA, 10);

@@ -39,3 +40,6 @@ endian = endian ? 0 : 1;

const stopReading = td / 2;
const aqMode = spectra.meta.AQ_mod;
const deltaX = aqMode === aqModeDirect.QSEQ ? DW : 2 * DW;
const nbPoints = aqMode === aqModeDirect.QSEQ ? td : (td / 2) >> 0;
for (let j = 0; j < nbSubSpectra; j++) {

@@ -45,3 +49,3 @@ let toSave = {

dataTable: '(X++(R..R))',
nbPoints: td,
nbPoints,
firstX: 0,

@@ -53,18 +57,26 @@ lastX: AQ,

data: {
x: createStepArray({ length: td, step: DW }),
re: new Float64Array(td),
im: new Float64Array(td),
x: createStepArray({ length: nbPoints, step: deltaX }),
re: new Float64Array(nbPoints),
im: new Float64Array(nbPoints),
},
isXYdata: true,
isFID: true,
observeFrequency: SF,
title: spectra.meta.TITLE,
deltaX: DW,
deltaX,
};
spectra.spectra[j] = toSave;
for (let i = 0; i < stopReading; i++) {
spectra.spectra[j].data.re[i] = ioBuffer.readInt32();
spectra.spectra[j].data.im[i] = ioBuffer.readInt32();
// const dtypa = spectra.meta.DTYPA;// we should use it for float or double FID data;
if (aqMode === aqModeDirect.QSEQ) {
for (let i = 0; i < nbPoints; i++) {
spectra.spectra[j].data.re[i] = ioBuffer.readInt32();
}
} else {
for (let i = 0; i < nbPoints; i++) {
spectra.spectra[j].data.re[i] = ioBuffer.readInt32();
spectra.spectra[j].data.im[i] = ioBuffer.readInt32();
}
}
}
}