Пример #1
0
    def post(self):
        plates_info = json_decode(self.get_argument('plates-info'))
        results = []
        for pinfo in plates_info:

            plate_result = self._compute_pools(pinfo)
            plate = Plate(plate_result['plate_id'])

            # calculate estimated molar fraction for each element of pool
            amts = plate_result['comp_vals'] * plate_result['pool_vals']
            pcts = amts / amts.sum()

            quant_process = QuantificationProcess(
                plate_result['quant-process-id'])
            pool_name = 'Pool from plate %s (%s)' % (
                plate.external_id,
                datetime.now().strftime(quant_process.get_date_format()))
            input_compositions = []
            for comp, _, _ in quant_process.concentrations:
                well = comp.container
                row = well.row - 1
                column = well.column - 1
                input_compositions.append(
                    {'composition': comp,
                     'input_volume': plate_result['pool_vals'][row][column],
                     'percentage_of_output': pcts[row][column]})
            robot = (Equipment(plate_result['robot'])
                     if plate_result['robot'] is not None else None)
            process = PoolingProcess.create(
                self.current_user, quant_process, pool_name,
                plate_result['pool_vals'].sum(), input_compositions,
                plate_result['func_data'], robot=robot,
                destination=plate_result['destination'])
            results.append({'plate-id': plate.id, 'process-id': process.id})

        self.write(json_encode(results))
Пример #2
0
    def get(self):
        pool_type = 'shotgun_plate'
        plate_ids = self.get_arguments('plate_id')
        process_id = self.get_argument('process_id', None)
        input_plate = None
        pool_func_data = None
        pool_values = []
        pool_blanks = []
        plate_names = []
        if process_id is not None:
            try:
                process = PoolingProcess(process_id)
            except LabControlUnknownIdError:
                raise HTTPError(404, reason="Pooling process %s doesn't exist"
                                            % process_id)
            plate = process.components[0][0].container.plate
            input_plate = plate.id
            pool_func_data = process.pooling_function_data
            content_type = type(plate.get_well(1, 1).composition)
            id_plate_type = PLATE_TYPES[content_type]
            plate_type_mapped = PLATE_TYPE_TO_POOL_TYPE[id_plate_type]
            if plate_type_mapped != pool_type:
                raise HTTPError(400, reason='Pooling process type does not '
                                            'match pooling type')

            _, pool_values, pool_blanks, plate_names = \
                make_2D_arrays(plate, process.quantification_process)

            pool_values = pool_values.tolist()
            pool_blanks = pool_blanks.tolist()
            plate_names = plate_names.tolist()

        elif len(plate_ids) > 0:
            content_types = {type(Plate(pid).get_well(1, 1).composition)
                             for pid in plate_ids}

            if len(content_types) > 1:
                raise HTTPError(400, reason='Plates contain different types '
                                            'of compositions')

            # check if the observed plates are the same type as the pooling
            # type (i.e., no shotgun plates for 16S pooling)
            content_type = content_types.pop()
            id_plate_type = PLATE_TYPES[content_type]
            plate_type_mapped = PLATE_TYPE_TO_POOL_TYPE[id_plate_type]
            if plate_type_mapped != pool_type:
                raise HTTPError(400, reason='Plate type does not match '
                                            'pooling type')

        pool_type_stripped = POOL_TYPE_PARAMS[pool_type]['abbreviation']
        plate_type = POOL_TYPE_TO_PLATE_TYPE[pool_type]

        robots = (Equipment.list_equipment('EpMotion') +
                  Equipment.list_equipment('echo'))

        template = POOL_TYPE_PARAMS[pool_type]['template']

        self.render(template, plate_ids=plate_ids,
                    robots=robots, pool_params=HTML_POOL_PARAMS,
                    input_plate=input_plate, pool_func_data=pool_func_data,
                    process_id=process_id, pool_values=pool_values,
                    plate_type=plate_type, pool_blanks=pool_blanks,
                    plate_names=plate_names, pool_type=pool_type_stripped)
Пример #3
0
    def test_list_equipment(self):
        obs = Equipment.list_equipment()
        exp = [{
            'equipment_id': 15,
            'external_id': '108379Z'
        }, {
            'equipment_id': 16,
            'external_id': '109375A'
        }, {
            'equipment_id': 17,
            'external_id': '311411B'
        }, {
            'equipment_id': 2,
            'external_id': 'BUZZ'
        }, {
            'equipment_id': 10,
            'external_id': 'Carmen'
        }, {
            'equipment_id': 1,
            'external_id': 'Echo550'
        }, {
            'equipment_id': 9,
            'external_id': 'HOWE'
        }, {
            'equipment_id': 19,
            'external_id': 'IGM-HiSeq4000'
        }, {
            'equipment_id': 8,
            'external_id': 'JER-E'
        }, {
            'equipment_id': 11,
            'external_id': 'KF1'
        }, {
            'equipment_id': 12,
            'external_id': 'KF2'
        }, {
            'equipment_id': 13,
            'external_id': 'KF3'
        }, {
            'equipment_id': 14,
            'external_id': 'KF4'
        }, {
            'equipment_id': 18,
            'external_id': 'KL-MiSeq'
        }, {
            'equipment_id': 5,
            'external_id': 'LUCY'
        }, {
            'equipment_id': 20,
            'external_id': 'Not applicable'
        }, {
            'equipment_id': 4,
            'external_id': 'PRICKLY'
        }, {
            'equipment_id': 7,
            'external_id': 'RIK-E'
        }, {
            'equipment_id': 6,
            'external_id': 'ROB-E'
        }]
        self.assertEqual(obs[:-1], exp)

        obs = Equipment.list_equipment('echo')
        exp = [{'equipment_id': 1, 'external_id': 'Echo550'}]
        self.assertEqual(obs, exp)

        obs = Equipment.list_equipment('mosquito')
        exp = [{
            'equipment_id': 2,
            'external_id': 'BUZZ'
        }, {
            'equipment_id': 4,
            'external_id': 'PRICKLY'
        }, {
            'equipment_id': 3,
            'external_id': 'STINGER'
        }]
        self.assertEqual(obs, exp)
 def post(self):
     equipment_type = self.get_argument('equipment_type')
     external_id = self.get_argument('external_id')
     equipment = Equipment.create(equipment_type, external_id)
     self.write({'equipment': equipment.id})
 def get(self):
     equipment_types = Equipment.list_equipment_types()
     self.render('equipments.html', equipment_types=equipment_types)
Пример #6
0
def create_compression_process(user, gdna_plates):
    comp_process = GDNAPlateCompressionProcess.create(
        user, gdna_plates, 'Compressed test plate %s' % datetime.now(),
        Equipment(6))
    compressed_plate = comp_process.plates[0]
    return comp_process, compressed_plate