socket.on("connect", function(){ reader = LineInputStream(socket); reader.on("line", function(line){ var s = line.trim(); // Erste zwei vom Server gesendete Zeilen ignorieren if(status < 0){ status++; if(status == 0) checkQueue(); return; } // Antwort besteht aus ein bis zwei Zeilen: Zuletzt kommt immer error var response = undefined; if(s.indexOf("error") == 0){ response = parseResponse(s.substr("error ".length).trim()); executing.error = response; if(executing.error.id == 0) delete executing.error; if(executing.cb) executing.cb.call(executing, executing.result, executing.response); executing = null; checkQueue(); } else if(s.indexOf("notify") == 0){ s = s.substr("notify".length); response = parseResponse(s); self.emit(s.substr(0, s.indexOf(" ")), response); } else { response = parseResponse(s); executing.response = response; } }); self.emit("connect"); });
User.prototype.initStream = function(code, str, optConsumer) { //console.log('initStream: consumer=', optConsumer); var user = this; var ls = lins(str); user.stdio[code] = new StreamLineHistory(str, ls); ls.setEncoding('utf8'); ls.setDelimiter('\n'); ls.on('error', function(err) { console.log(err + ', user ' + user.name); }); ls.on('line', function(line) { var ch = code == 0 ? '=>' : code == 1 ? '<=' : '):'; console.log('%s@equares %s %s', user.name, ch, line); user.addStreamLine(code, line); if(optConsumer !== undefined) optConsumer.write(line+'\n'); }); }
function processFile(){ var timestamp = (new Date()).getTime(); if(dolineInputStream === true){ var LineInputStream = require('line-input-stream'); var stream = LineInputStream(fs.createReadStream(fileToRead, {flags:'r'})); stream.setEncoding(encoding); stream.setDelimiter('$$$$\n'); stream.on("error", function(err) { fs.appendFileSync(errorFile, "\r\n"+JSON.stringify(err)+"\r\n"); }); stream.on('line', processLine); stream.on("end", function() {processEnd();}); stream.on("close", function() {processEnd();}); }else{ var LineByLineReader = require('line-by-line'); var lr = new LineByLineReader(fileToRead, {encoding: encoding}); lr.on('error', function (err) { fs.appendFileSync(errorFile, "\r\n"+JSON.stringify(err)+"\r\n"); }); lr.on('end', function () {processEnd();}); var data=""; lr.on('line', function (line) { data = data + line +"\r\n"; if(line.indexOf("$$$$") !== -1){ processLine(data); data = ""; } }); } var i=1; var stepper=stepToShow; var nbsuccess = 0; var nberror = 0; function processLine(line) { if(i >= stepper){ monitor("#step "+i); stepper+=stepToShow; } if(i >= start){//define point for start // try { /* var Lines = line.split('\n'); goodlines = Lines[0]+"\n"; cscart = false; for (ij=1;ij<Lines.length;ij++) { if (Lines[ij].indexOf("CsCart") !==-1) cscart = true; if (ij!=1 & cscart) goodlines+=Lines[ij]+"\n"; } */ var result = parse(line); line = result.molecules[0].molfile.value; console.log(line); var mol= rdk.Molecule.MolBlockToMol(line); var smile = mol.molToSmiles(); var binarymol = mol.pickleMol(); // this is the folded example (AllChem.GetHashedMorganFingerprint(mol, radius=self.radius, nBits = self.length)) // the unfolded (faster method is based on : AllChem.GetMorganFingerprint(mol, radius=self.radius) // the bits are sorted using sorted(GetNonZeroElement().keys()) var mpf2 = mol.getMorganFingerprintsKeys(2); // unfolded keys storage using getMorganFingerprintsKeys // folded = mol.getMorganFingerprints_getOnBbits(2,2048); var mpf = []; var mpflen = mpf2.size(); for(var j=0;j < mpflen;j++){ mpf.push(mpf2.get(j)); } moleculesCollection.insert( { 'smiles': smile, 'chembl_id': i, 'rdmol': Binary(binarymol), 'mfp': {'bits': mpf, 'count': mpflen} } ); mol.delete(); nbsuccess++; /* }catch (err) { fs.appendFileSync(errorFile, "i="+i+"\r\n"+JSON.stringify(err)+"\r\n"); nberror++; return; } */ } if (i >= end) { processEnd(); } i++; } function processEnd(){ var date1 = new Date(timestamp); var date2 = new Date(); var timeDiff = Math.abs(date2.getTime() - date1.getTime()); var diffSec = parseInt(timeDiff / (1000 )); var diffMin = parseInt(diffSec/60); diffSec = diffSec - (diffMin*60); var time = diffMin + "m" + diffSec + "s"; resumeTime("###i=" + i + " success: "+(nbsuccess-nberror)+" failed: "+nberror+" in "+time); databaseMongo.close(); process.exit(); } }
function create(params) { var bridge = new events.EventEmitter(); // bake unique key to filter messages from stdout var messageKey = crypto.createHash('md5') .update('magic' + Date.now() + '|' + Math.random()) .digest('hex'); var messageScan = '["' + messageKey + '",'; var messageScanL = messageScan.length; params.key = messageKey; var spawnOpts = { cwd: process.cwd(), stdio: ['ignore', 'pipe', 'pipe'] }; var args = []; args.push(path.resolve(__dirname, '..', 'slimer', 'main.js')); args.push(JSON.stringify(params)); var cp; if (params.xvfb) { args.unshift(binPath); cp = childProcess.spawn('xvfb-run', args, spawnOpts); } else { cp = childProcess.spawn(binPath, args, spawnOpts); } var stream; // parse console by lines stream = lineInputStream(cp.stdout).on('line', function (line) { if (line.substr(0, messageScanL) === messageScan) { var data; try { data = JSON.parse(line); } catch (e) { bridge.emit('error', e); return; } if (data.length < 3 || data.length > 4) { bridge.emit('error', new Error('bad message length ' + data.length)); } data.shift(); var type = data[0]; switch (type) { case 'mocha': case 'error': case 'exit': bridge.emit(type, data[1]); break; default: bridge.emit('log', data[1]); } } else { bridge.emit('log', line); } }); stream.setEncoding('utf8'); stream = lineInputStream(cp.stderr).on('line', function (line) { bridge.emit('error', line); }); stream.setEncoding('utf8'); // exit code is always null as slimer doesn't support it cp.on('exit', function () { bridge.emit('close'); }); return bridge; }
function processFile(){ var timestamp = (new Date()).getTime(); var parser = require('sdf-parser') //var result = parser('/Users/guilllaumegodin/Downloads/chembl_18.sdf'); var LineInputStream = require('line-input-stream') var stream = LineInputStream(fs.createReadStream('/Users/guilllaumegodin/Downloads/chembl_18.sdf', {flags:'r'})); stream.setEncoding('ascii'); stream.setDelimiter('$$$$\n'); stream.on("error", function(err) { console.log(err); }); stream.on('line', processLine); stream.on("end", function() { // No more data, all line events emitted before this event }); stream.on("close", function() { // Same as ReadableStream's close event }); var smiles = []; var i=0; function processLine(line) { ++i; //console.log(line); try { var mol= rdk.Molecule.MolBlockToMol(line); var smile = mol.smilewrite(); var binarymol = mol.pickleMol(); var mpf2 = mol.getMorganFingerprints_getOnBbits(2,2048); var mpf = []; var mpflen = mpf2.size(); for(var j=0;j < mpflen;j++){ mpf.push(mpf2.get(j)); } //console.log(mpf2.size()); moleculesCollection.insert({ 'smiles': smile, 'chembl_id': i, 'rdmol': Binary(binarymol), 'mfp': {'bits': mpf, 'count': mpflen} }); mol.delete(); }catch (err) { console.log('err'); return; } smiles.push(smile) if (smiles.length>100000) { //console.log(smiles); //console.log('done'); var date1 = new Date(timestamp); var date2 = new Date(); var timeDiff = Math.abs(date2.getTime() - date1.getTime()); var diffSec = parseInt(timeDiff / (1000 )); var diffMin = parseInt(diffSec/60); diffSec = diffSec - (diffMin*60); var time = diffMin + "m" + diffSec + "s"; console.log("success in: "+time); monitor("end"); databaseMongo.close(); process.exit(); } } }