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

brukerconverter

Package Overview
Dependencies
Maintainers
4
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 0.2.0 to 1.0.0

9

bower.json
{
"name": "brukerconverter",
"version": "0.1.1",
"version": "1.0.0",
"main": "build/brukerconverter.js",

@@ -10,9 +10,2 @@ "homepage": "https://github.com/cheminfo-js/brukerconverter",

"description": "Parse and convert Bruker raw data",
<<<<<<< HEAD
"main": [
"dist/brukerconverter.js",
"dist/brukerconverter.min.js"
]
=======
>>>>>>> origin/master
"moduleType": [

@@ -19,0 +12,0 @@ "amd",

4

package.json
{
"name": "brukerconverter",
"version": "0.2.0",
"version": "1.0.0",
"description": "Parse and convert Bruker raw data",

@@ -32,5 +32,5 @@ "main": "./src/brukerconverter.js",

"iobuffer": "^2.0.0",
"jcampconverter": "^2.1.0",
"jcampconverter": "^2.3.0",
"jszip": "^2.5.0"
}
}

@@ -13,2 +13,4 @@ "use strict";

function readZIP(zipFile, options) {
options = options || {};
var zip = new JSZip();

@@ -22,12 +24,16 @@ zip.load(zipFile, options);

'acqu2s': TEXT,
'pdata/1/procs': TEXT,
'pdata/1/proc2s': TEXT,
'pdata/1/1r': BINARY,
'pdata/1/1i': BINARY,
'pdata/1/2rr': BINARY
'procs': TEXT,
'proc2s': TEXT,
'1r': BINARY,
'1i': BINARY,
'2rr': BINARY
};
var folders = zip.filter(function (relativePath, file) {
if(relativePath.indexOf("ser")>=0||relativePath.indexOf("fid")>=0
||relativePath.indexOf("1r")>=0||relativePath.indexOf("2rr")>=0){
return true;
}
var folders = zip.filter(function (relativePath, file) {
if(/^\d+$/.test(relativePath.substr(0, relativePath.length - 1)))
return true
return false;
});

@@ -39,7 +45,8 @@

var len = folders[i].name.length;
var currFolder = zip.folder(folders[i].name.substr(0, len - 1));
var name = folders[i].name;
name = name.substr(0,name.lastIndexOf("/")+1);
var currFolder = zip.folder(name);
var currFiles = currFolder.filter(function (relativePath, file) {
return files[relativePath] ? true : false;
});
var brukerFiles = {};

@@ -50,3 +57,3 @@

var name = currFiles[j].name.substr(idx + 1);
if(files[name] === BINARY || files['pdata/1/' + name] === BINARY) {
if(files[name] === BINARY) {
brukerFiles[name] = new IOBuffer(currFiles[j].asArrayBuffer());

@@ -57,4 +64,4 @@ } else {

}
spectra[i] = convert(brukerFiles);
//console.log(folders[i].name);
spectra[i] = {"filename":folders[i].name,value:convert(brukerFiles,options)};
}

@@ -65,15 +72,53 @@

function convert(brukerFiles) {
function convert(brukerFiles, options) {
options = options || {};
var start = new Date();
var result;
if(brukerFiles['ser'] || brukerFiles['2rr']) {
return convert2D(brukerFiles);
result = convert2D(brukerFiles, options);
} else if(brukerFiles['1r'] || brukerFiles['1i'] || brukerFiles['fid']) {
return convert1D(brukerFiles);
result = convert1D(brukerFiles, options);
} else {
throw new RangeError('The current files are invalid');
}
if (result.twoD && !options.noContours) {
//console.log("Countours");
add2D(result);
if (result.profiling) result.profiling.push({
action: 'Finished countour plot calculation',
time: new Date() - start
});
if (!options.keepSpectra) {
delete result.spectra;
}
}
var spectra = result.spectra;
if (options.xy) { // the spectraData should not be a oneD array but an object with x and y
if (spectra.length > 0) {
for (var i=0; i<spectra.length; i++) {
var spectrum=spectra[i];
if (spectrum.data.length>0) {
for (var j=0; j<spectrum.data.length; j++) {
var data=spectrum.data[j];
var newData={x: new Array(data.length/2), y:new Array(data.length/2)};
for (var k=0; k<data.length; k=k+2) {
newData.x[k/2]=data[k];
newData.y[k/2]=data[k+1];
}
spectrum.data[j]=newData;
}
}
}
}
}
return result;
}
function convert1D(files) {
function convert1D(files, options) {
if(files['1r'] || files['1i']) {
var result = parseData(files["procs"]);
var result = parseData(files["procs"], options);

@@ -87,4 +132,4 @@ if(files['1r']) {

} else if(files['fid']) {
result = parseData(files['procs']);
var temp = parseData(files['acqus']);
result = parseData(files['procs'], options);
var temp = parseData(files['acqus'], options);

@@ -98,3 +143,2 @@ var keys = Object.keys(temp.info);

}
setFIDSpectrumData(files['fid'], result)

@@ -105,34 +149,54 @@ }

function convert2D(files) {
function convert2D(files, options) {
var SF,SW_p,offset;
if(files['2rr']) {
var result = parseData(files['procs']);
var temp = parseData(files['proc2s']);
var result = parseData(files['procs'], options);
var temp = parseData(files['proc2s'], options);
result.info.nbSubSpectra = temp.info['$SI'] = parseInt(temp.info['$SI']);
SF = temp.info['$SF'] = parseFloat(temp.info['$SF']);
SW_p = temp.info['$SWP'] = parseFloat(temp.info['$SWP']);
offset = temp.info['$OFFSET'] = parseFloat(temp.info['$OFFSET']);
} else if(files['ser']) {
result = parseData(files['acqus']);
temp = parseData(files['acqu2s']);
result = parseData(files['acqus'], options);
temp = parseData(files['acqu2s'], options);
result.info.nbSubSpectra = temp.info['$SI'] = parseInt(temp.info['$TD']);
result.info['$SI'] = parseInt(result.info['$TD']);
SW_p = temp.info['$SWH'] = parseFloat(temp.info['$SWH']);
result.info["$SWP"]=result.info["$SWH"];
result.info["$SF"]=parseFloat(temp.info['$SFO1']);
result.info['$OFFSET']=0;
SF = temp.info['$SFO2'] = parseFloat(temp.info['$SFO2']);
offset=0;
result.info['$AXNUC']=result.info['$NUC1'];
temp.info['$AXNUC']=temp.info['$NUC1'];
}
result.info.nbSubSpectra = temp.info['$SI'] = parseInt(temp.info['$SI']);
var SW_p = temp.info['$SWP'] = parseFloat(temp.info['$SWP']);
var SF = temp.info['$SF'] = parseFloat(temp.info['$SF']);
var offset = temp.info['$OFFSET'] = parseFloat(temp.info['$OFFSET']);
result.info.firstY = offset;
result.info.lastY = offset - SW_p / SF;
result.info['$BF2'] = SF;
result.info['$SF01'] = SF;
result.info['$SFO1'] = SF;
var nbSubSpectra = result.info.nbSubSpectra;
var pageValue = result.info.firstY;
var deltaY = (result.info.lastY-result.info.firstY)/(nbSubSpectra-1);
if(files['2rr']) {
setXYSpectrumData(files['2rr'], result, '2rr', true);
result.spectra[0].setYUnits = 'PPM';
} else if(files['ser']) {
setXYSpectrumData(files['ser'], result, 'ser', true);
result.spectra[0].setYUnits = 'HZ';
}
var dataType = files['ser'] ? 'TYPE_2DNMR_FID' : 'TYPE_2DNMR_SPECTRUM';
for(var i = 0; i < result.spectra.length; ++i) {
result.spectra[i].DataType = dataType;
for(var i = 0; i < nbSubSpectra; i++) {
pageValue+=deltaY;
result.spectra[i].pageValue=pageValue;
if(files['2rr']) {
result.spectra[i].setYUnits = 'PPM';
} else if(files['ser']) {
result.spectra[i].setYUnits = 'HZ';
}
}
var dataType = files['ser'] ? 'TYPE_2DNMR_FID' : 'TYPE_2DNMR_SPECTRUM';
result.info['2D_Y_NUCLEUS'] = temp.info['$AXNUC'];

@@ -145,2 +209,4 @@ result.info['2D_X_NUCLEUS'] = result.info['$AXNUC'];

result.twoD = true;
return result;

@@ -154,3 +220,4 @@ }

var SF = parseFloat(spectra.info["$SF"]);
var BF = parseFloat(spectra.info["$BF1"]);
var BF = SF;
//var BF = parseFloat(spectra.info["$BF1"]);
var offset = spectra.shiftOffsetVal;//parseFloat(spectra.info["$OFFSET"]);

@@ -160,3 +227,3 @@

spectra.info["$BF1"] = BF;
spectra.info["$SF01"] = SF;
spectra.info["$SFO1"] = SF;
spectra.info.brukerReference = BF;

@@ -170,5 +237,2 @@

//console.log(file);
//console.log("");
if(endian)

@@ -179,7 +243,7 @@ file.setLittleEndian();

//spectra.spectra = new Array(nbSubSpectra);
for(var i = 0; i < nbSubSpectra; ++i) {
for(var i = 0; i < nbSubSpectra; i++) {
var toSave = {
dataType : "NMR Spectrum",
dataTable : "(X++(R..R))",
nbPoints : td,
firstX : offset,

@@ -189,3 +253,7 @@ lastX : offset - SW_p / SF,

yUnit : "Arbitrary",
data:[{x:new Array(td),y:new Array(td)}]
data:[new Array(td*2)],//[{x:new Array(td),y:new Array(td)}],
isXYdata:true,
observeFrequency:SF,
title:spectra.info['TITLE'],
deltaX:-(SW_p / SF)/(td-1)

@@ -195,15 +263,23 @@ };

var x = offset;
var deltaX = toSave.deltaX;
if(real) {
for(var k = 0; k < td - 1; ++k) {
toSave.data[0].x[k] = x;
toSave.data[0].y[k] = file.readInt32();
x += SF;
for(var k = 0; k < td; ++k) {
toSave.data[0][2*k] = x;
toSave.data[0][2*k+1] = file.readInt32();
if(toSave.data[0][2*k+1]===null||isNaN(toSave.data[0][2*k+1])){
toSave.data[0][2*k+1] = 0;
}
x += deltaX;
}
} else {
for(k = td - 1; k > 0; --k) {
toSave.data[0].x[k] = x;
toSave.data[0].y[k] = file.readInt32();
x += SF;
for(k = td - 1; k >= 0; --k) {
toSave.data[0][2*k] = x;
toSave.data[0][2*k+1] = file.readInt32();
if(toSave.data[0][2*k+1]===null||isNaN(toSave.data[0][2*k+1])) {
toSave.data[0][2*k+1] = 0;
}
x += deltaX;
}
}
spectra.spectra.push(toSave);

@@ -213,5 +289,7 @@ }

function parseData(file) {
function parseData(file, options) {
var keepRecordsRegExp=/.*/;
if (options.keepRecordsRegExp) keepRecordsRegExp=options.keepRecordsRegExp;
return Converter.convert(file, {
keepRecordsRegExp:/.*/
keepRecordsRegExp:keepRecordsRegExp
});

@@ -222,19 +300,18 @@ }

var td = spectra.info['$TD'] = parseInt(spectra.info['$TD']);
var SW_p = spectra.info['$SWP'] = parseFloat(spectra.info['$SWP']);
if(SW_p !== 0) {
spectra.info['$SWH'] = SW_p;
}
var SW_h = spectra.info['$SWH'] = parseFloat(spectra.info['$SWH']);
var SW = spectra.info['$SW'] = parseFloat(spectra.info['$SW']);
var SF = spectra.info['$SF01'] = parseFloat(spectra.info['$SF01']);
var BF = spectra.info['$BF1'] = parseFloat(spectra.info['$BF1']);
var SF = spectra.info['$SFO1'] = parseFloat(spectra.info['$SFO1']);
var BF = parseFloat(spectra.info['$BF1']);
spectra.info['$BF1'] = BF;
spectra.info['$SF'] = parseFloat(spectra.info['$SF']);
if(spectra.info['$SF'] !== 0) {
BF = spectra.info['$SF'];
}
//var DW = 1 / (2 * SW_h);
//var AQ = td * DW;
var AQ = SW;
var DW = AQ/(td-1);
var DW = 1 / (2 * SW_h);
var AQ = td * DW;
//console.log(DW+" "+SW+" "+td);
var endian = parseInt(spectra.info["$BYTORDP"]);

@@ -258,3 +335,7 @@ endian = endian ? 0 : 1;

yUnit : "Arbitrary",
data:[{x:new Array(td),y:new Array(td)}]
data:[new Array(2*td)],//[{x:new Array(td),y:new Array(td)}],
isXYdata:true,
observeFrequency:SF,
title:spectra.info['TITLE'],
deltaX:DW
};

@@ -266,17 +347,191 @@ spectra.spectra.push(toSave);

var y;
for(i = 0; file.available(8); ++i, x += DW) {
spectra.spectra[0].data[0].y[i] = file.readInt32();
spectra.spectra[0].data[0].x[i] = x;
spectra.spectra[1].data[0].y[i] = file.readInt32();
spectra.spectra[1].data[0].x[i] = x;
y = file.readInt32();
if(y===null || isNaN(y)){
y=0;
}
spectra.spectra[0].data[0][2*i+1] = y;
spectra.spectra[0].data[0][2*i] = x;
y = file.readInt32();
if(y===null || isNaN(y)){
y=0;
}
if(y===null || isNaN(y)){
y=0;
}
spectra.spectra[1].data[0][2*i+1] = y;
spectra.spectra[1].data[0][2*i] = x;
}
for(; i < td; ++i, x += DW) {
spectra.spectra[0].data[0].y[i] = 0;
spectra.spectra[0].data[0].x[i] = x;
spectra.spectra[1].data[0].y[i] = 0;
spectra.spectra[1].data[0].x[i] = x;
spectra.spectra[0].data[0][2*i+1] = 0;
spectra.spectra[0].data[0][2*i] = x;
spectra.spectra[1].data[0][2*i+1] = 0;
spectra.spectra[1].data[0][2*i] = x;
}
}
/**
* Those functions should disappear if add2D becomes accessible in jcampconvert
* @param spectra
* @returns {{z: Array, minX: *, maxX: *, minY: *, maxY: *, minZ: *, maxZ: *, noise: number}}
*/
function convertTo3DZ(spectra) {
var noise = 0;
var minZ = spectra[0].data[0][0];
var maxZ = minZ;
var ySize = spectra.length;
var xSize = spectra[0].data[0].length / 2;
var z = new Array(ySize);
for (var i = 0; i < ySize; i++) {
z[i] = new Array(xSize);
for (var j = 0; j < xSize; j++) {
z[i][j] = spectra[i].data[0][j * 2 + 1];
if (z[i][j] < minZ) minZ = spectra[i].data[0][j * 2 + 1];
if (z[i][j] > maxZ) maxZ = spectra[i].data[0][j * 2 + 1];
if (i !== 0 && j !== 0) {
noise += Math.abs(z[i][j] - z[i][j - 1]) + Math.abs(z[i][j] - z[i - 1][j]);
}
}
}
return {
z: z,
minX: spectra[0].data[0][0],
maxX: spectra[0].data[0][spectra[0].data[0].length - 2],
minY: spectra[0].pageValue,
maxY: spectra[ySize - 1].pageValue,
minZ: minZ,
maxZ: maxZ,
noise: noise / ((ySize - 1) * (xSize - 1) * 2)
};
}
function add2D(result) {
var zData = convertTo3DZ(result.spectra);
result.contourLines = generateContourLines(zData);
delete zData.z;
result.minMax = zData;
}
function generateContourLines(zData, options) {
//console.time('generateContourLines');
var noise = zData.noise;
var z = zData.z;
var contourLevels = [];
var nbLevels = 7;
var povarHeight = new Float32Array(4);
var isOver = [];
var nbSubSpectra = z.length;
var nbPovars = z[0].length;
var pAx, pAy, pBx, pBy;
var x0 = zData.minX;
var xN = zData.maxX;
var dx = (xN - x0) / (nbPovars - 1);
var y0 = zData.minY;
var yN = zData.maxY;
var dy = (yN - y0) / (nbSubSpectra - 1);
var minZ = zData.minZ;
var maxZ = zData.maxZ;
//System.out.prvarln('y0 '+y0+' yN '+yN);
// -------------------------
// Povars attribution
//
// 0----1
// | / |
// | / |
// 2----3
//
// ---------------------d------
var lineZValue;
for (var level = 0; level < nbLevels * 2; level++) { // multiply by 2 for positif and negatif
var contourLevel = {};
contourLevels.push(contourLevel);
var side = level % 2;
if (side === 0) {
lineZValue = (maxZ - 5 * noise) * Math.exp(level / 2 - nbLevels) + 5 * noise;
} else {
lineZValue = -(maxZ - 5 * noise) * Math.exp(level / 2 - nbLevels) - 5 * noise;
}
var lines = [];
contourLevel.zValue = lineZValue;
contourLevel.lines = lines;
if (lineZValue <= minZ || lineZValue >= maxZ) continue;
for (var iSubSpectra = 0; iSubSpectra < nbSubSpectra - 1; iSubSpectra++) {
for (var povar = 0; povar < nbPovars - 1; povar++) {
povarHeight[0] = z[iSubSpectra][povar];
povarHeight[1] = z[iSubSpectra][povar + 1];
povarHeight[2] = z[(iSubSpectra + 1)][povar];
povarHeight[3] = z[(iSubSpectra + 1)][(povar + 1)];
for (var i = 0; i < 4; i++) {
isOver[i] = (povarHeight[i] > lineZValue);
}
// Example povar0 is over the plane and povar1 and
// povar2 are below, we find the varersections and add
// the segment
if (isOver[0] !== isOver[1] && isOver[0] !== isOver[2]) {
pAx = povar + (lineZValue - povarHeight[0]) / (povarHeight[1] - povarHeight[0]);
pAy = iSubSpectra;
pBx = povar;
pBy = iSubSpectra + (lineZValue - povarHeight[0]) / (povarHeight[2] - povarHeight[0]);
lines.push(pAx * dx + x0, pAy * dy + y0, pBx * dx + x0, pBy * dy + y0);
}
if (isOver[3] !== isOver[1] && isOver[3] !== isOver[2]) {
pAx = povar + 1;
pAy = iSubSpectra + 1 - (lineZValue - povarHeight[3]) / (povarHeight[1] - povarHeight[3]);
pBx = povar + 1 - (lineZValue - povarHeight[3]) / (povarHeight[2] - povarHeight[3]);
pBy = iSubSpectra + 1;
lines.push(pAx * dx + x0, pAy * dy + y0, pBx * dx + x0, pBy * dy + y0);
}
// test around the diagonal
if (isOver[1] !== isOver[2]) {
pAx = povar + 1 - (lineZValue - povarHeight[1]) / (povarHeight[2] - povarHeight[1]);
pAy = iSubSpectra + (lineZValue - povarHeight[1]) / (povarHeight[2] - povarHeight[1]);
if (isOver[1] !== isOver[0]) {
pBx = povar + 1 - (lineZValue - povarHeight[1]) / (povarHeight[0] - povarHeight[1]);
pBy = iSubSpectra;
lines.push(pAx * dx + x0, pAy * dy + y0, pBx * dx + x0, pBy * dy + y0);
}
if (isOver[2] !== isOver[0]) {
pBx = povar;
pBy = iSubSpectra + 1 - (lineZValue - povarHeight[2]) / (povarHeight[0] - povarHeight[2]);
lines.push(pAx * dx + x0, pAy * dy + y0, pBx * dx + x0, pBy * dy + y0);
}
if (isOver[1] !== isOver[3]) {
pBx = povar + 1;
pBy = iSubSpectra + (lineZValue - povarHeight[1]) / (povarHeight[3] - povarHeight[1]);
lines.push(pAx * dx + x0, pAy * dy + y0, pBx * dx + x0, pBy * dy + y0);
}
if (isOver[2] !== isOver[3]) {
pBx = povar + (lineZValue - povarHeight[2]) / (povarHeight[3] - povarHeight[2]);
pBy = iSubSpectra + 1;
lines.push(pAx * dx + x0, pAy * dy + y0, pBx * dx + x0, pBy * dy + y0);
}
}
}
}
}
// console.timeEnd('generateContourLines');
return {
minX: zData.minX,
maxX: zData.maxX,
minY: zData.minY,
maxY: zData.maxY,
segments: contourLevels
};
//return contourLevels;
}
module.exports = {

@@ -283,0 +538,0 @@ convertZip: readZIP,

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc