/**
* Roboliq: Automation for liquid-handling robots
* @copyright 2017, ETH Zurich, Ellis Whitehead
* @license GPL-3.0
*/
/**
* Absorbance Reader commands module.
* @module commands/absorbanceReader
* @return {Protocol}
* @version v1
*/
var _ = require('lodash');
var jmespath = require('jmespath');
import math from 'mathjs';
import yaml from 'yamljs';
var commandHelper = require('../commandHelper.js');
const Design = require('../design.js');
var expect = require('../expect.js');
import {mergeR} from '../mergeR.js';
var misc = require('../misc.js');
import * as simulatedHelpers from './simulatedHelpers.js';
import wellsParser from '../parsers/wellsParser.js';
/**
* Handlers for {@link absorbanceReader} commands.
* @static
*/
var commandHandlers = {
"absorbanceReader.measurePlate": function(params, parsed, data) {
// console.log(JSON.stringify(parsed));
var model = commandHelper.getParsedValue(parsed, data, 'object', 'model');
var location0 = commandHelper.getParsedValue(parsed, data, 'object', 'location');
var predicates = [
{"absorbanceReader.canAgentEquipmentModelSite": {
"agent": parsed.objectName.agent,
"equipment": parsed.objectName.equipment,
"model": model,
"site": parsed.objectName.site
}}
];
var [params2, alternatives] = commandHelper.queryLogic(data, predicates, "absorbanceReader.canAgentEquipmentModelSite");
// console.log("params2:\n"+JSON.stringify(params2, null, ' '))
// console.log("parsed.value.outputFile: "+JSON.stringify(parsed.value.outputFile));
const destinationAfter
= (parsed.value.destinationAfter === "stay") ? null
: _.isUndefined(parsed.objectName.destinationAfter) ? location0
: parsed.objectName.destinationAfter;
// Program to pass to sub-command
const program = mergeR({}, parsed.orig.program, {
wells: (parsed.value.program || {}).wells
});
// Handle deprecated parameter names
const output = mergeR({}, parsed.orig.output, {
joinKey: _.get(parsed.orig, "program.wellDesignFactor"),
userValues: _.get(parsed.orig, "program.userValues"),
writeTo: _.get(parsed.orig, "outputFile"),
appendTo: _.get(parsed.orig, "outputDataset"),
});
// console.log({output})
var expansion = [
(params2.site === location0) ? null : {
command: "transporter.movePlate",
object: parsed.objectName.object,
destination: params2.site
},
_.merge({}, {
command: ["equipment.run", params2.agent, params2.equipment].join('|'),
agent: params2.agent,
equipment: params2.equipment,
measurementType: "absorbance",
program: (_.isEmpty(program)) ? undefined : program,
programFileTemplate: parsed.value.programFileTemplate,
programFile: parsed.value.programFile,
programData: parsed.value.programData,
object: parsed.objectName.object,
output: (_.isEmpty(output)) ? undefined : output
}),
(destinationAfter === null || destinationAfter === params2.site) ? null : {
command: "transporter.movePlate",
object: parsed.objectName.object,
destination: destinationAfter
}
];
// console.log({expansion1: expansion[0]})
// console.log({expansion1output: expansion[1].output})
const result = {expansion};
if (_.has(parsed.value, ["output", "simulated"])) {
// Wells are chosen as follows:
// 1) program.wells
// 2) output.joinKey
// 3) all wells on labware
const wells = (_.has(parsed.value, ["program", "wells"]))
? commandHelper.asArray(parsed.value.program.wells)
: (!_.isUndefined(output.joinKey))
? commandHelper.getDesignFactor(output.joinKey, data.objects.DATA)
: wellsParser.parse(`${parsed.objectName.object}(all)`, data.objects);
// console.log({wells})
simulatedHelpers.simulatedByWells(parsed, data, wells, result);
}
// console.log("RESULTS:\n"+JSON.stringify(result))
return result;
},
};
module.exports = {
roboliq: "v1",
schemas: yaml.load(__dirname+"/../schemas/absorbanceReader.yaml"),
commandHandlers
};