def parameters(cls):
     cls._dyes_lots_param = ParameterFactory.dyes_lots()
     cls._ndyes_param = ParameterFactory.integer(
         NDYES, 'Number of dyes to use for design.')
     cls._nbarcodes_param = ParameterFactory.integer(
         NBARCODES,
         'Integer specifying the number of barcodes to generate',
         required=True)
     cls._mix_volume_param = ParameterFactory.float(
         MIX_VOL,
         'Float specifying the mix volume in ul',
         default=0.0,
         required=False)
     cls._total_volume_param = ParameterFactory.float(
         TOTAL_VOL,
         'Float specifying total volume in ul',
         default=0.0,
         required=False)
     cls._pico1_dye_param = ParameterFactory.cs_string(
         PICO1_DYE, 'Picoinjection 1 dye', required=False)
     parameters = [
         cls._dyes_lots_param,
         cls._ndyes_param,
         cls._nbarcodes_param,
         cls._mix_volume_param,
         cls._total_volume_param,
         cls._pico1_dye_param,
     ]
     return parameters
Пример #2
0
    def parameters(cls):
        cls.pa_data_src_param = ParameterFactory.pa_data_source()
        cls.dyes_param = ParameterFactory.dyes()
        cls.device_param = ParameterFactory.device()
        cls.major_param    = ParameterFactory.integer(MAJOR, "Major dye " \
                                                      "profile version",
                                                      minimum=0)
        cls.minor_param    = ParameterFactory.integer(MINOR, "Minor dye " \
                                                      "profile version",
                                                      minimum=0)
        cls.job_name_param = ParameterFactory.lc_string(JOB_NAME, "Unique "\
                                                        "name to give this "
                                                        "job.")
        cls.offset         = ParameterFactory.integer(OFFSETS, "Offset used " \
            "to infer a dye model. The inference will offset the dye profiles " \
            "in a range of (-<offset>,<offset>] to determine the optimal " \
            "offset.", default=abs(DEFAULT_OFFSETS[0]), minimum=1)
        cls.use_iid_param  = ParameterFactory.boolean(USE_IID, "Use IID Peak " \
                                                      "Detection.",
                                                      default_value=False)

        parameters = [
            cls.pa_data_src_param,
            cls.dyes_param,
            cls.device_param,
            cls.major_param,
            cls.minor_param,
            cls.job_name_param,
            cls.offset,
            cls.use_iid_param,
        ]
        return parameters
Пример #3
0
 def parameters(cls):
     parameters = [
         ParameterFactory.file_uuid(PROBES, PROBES_COLLECTION),
         ParameterFactory.file_uuid(TARGETS, TARGETS_COLLECTION),
         ParameterFactory.boolean("absorb", "Check for absorbed probes."),
         ParameterFactory.integer("num",
                                  "Minimum number of probes for a target.",
                                  default=3,
                                  minimum=1),
         ParameterFactory.lc_string(JOB_NAME,
                                    "Unique name to give this job.")
     ]
     return parameters
Пример #4
0
    def process_request(cls, params_dict):
        probes_file_uuid = params_dict[ParameterFactory.file_uuid(
            "probes", PROBES_COLLECTION)][0]
        targets_file_uuid = params_dict[ParameterFactory.file_uuid(
            "targets", TARGETS_COLLECTION)][0]
        absorb = params_dict[ParameterFactory.boolean(
            "absorb", "Check for absorbed probes.")][0]
        num = params_dict[ParameterFactory.integer(
            "num",
            "Minimum number of probes for a target.",
            default=3,
            minimum=1)][0]
        job_name = params_dict[ParameterFactory.lc_string(
            JOB_NAME, "Unique name to give this job.")][0]

        json_response = {
            PROBES: probes_file_uuid,
            TARGETS: targets_file_uuid,
            ABSORB: absorb,
            NUM: num,
            UUID: str(uuid4()),
            STATUS: JOB_STATUS.submitted,  # @UndefinedVariable
            JOB_NAME: job_name,
            DATESTAMP: datetime.today(),
        }
        http_status_code = 200

        if job_name in cls._DB_CONNECTOR.distinct(VALIDATION_COLLECTION,
                                                  JOB_NAME):
            http_status_code = 403
        else:
            try:
                probes_path = cls._DB_CONNECTOR.find_one(
                    PROBES_COLLECTION, UUID, probes_file_uuid)[FILEPATH]
                targets_path = cls._DB_CONNECTOR.find_one(
                    TARGETS_COLLECTION, UUID, targets_file_uuid)[FILEPATH]

                #ADD VALIDATOR JOB TO QUEUE

                cls._DB_CONNECTOR.insert(VALIDATION_COLLECTION,
                                         [json_response])
                del json_response[ID]
            except:
                APP_LOGGER.exception(traceback.format_exc())
                json_response[ERROR] = str(sys.exc_info()[1])
                http_status_code = 500

        return make_clean_response(json_response, http_status_code)
Пример #5
0
    def parameters(cls):
        cls.job_uuid_param  = ParameterFactory.job_uuid(SA_ASSAY_CALLER_COLLECTION)
        cls.job_name_param  = ParameterFactory.lc_string(JOB_NAME, JOB_NAME_DESC)
        cls.exp_defs_param  = ParameterFactory.experiment_definition()
        cls.req_drops_param = ParameterFactory.integer(REQUIRED_DROPS,
                                                       REQ_DROPS_DESCRIPTION,
                                                       required=True, default=0,
                                                       minimum=0)

        parameters = [
                      cls.job_uuid_param,
                      cls.job_name_param,
                      cls.exp_defs_param,
                      cls.req_drops_param,
                      ]
        return parameters
Пример #6
0
    def parameters(cls):
        cls._probes_param = ParameterFactory.file_uuid(PROBES,
                                                       PROBES_COLLECTION)
        cls._targets_param = ParameterFactory.file_uuid(
            TARGETS, TARGETS_COLLECTION)
        cls._strict_param   = ParameterFactory.integer(STRICT, "Restrict " \
            "each probe to this number of bases from the 3' end of its " \
            "sequence (0 to use entire probe)", default=0, minimum=0)
        cls._job_name_param = ParameterFactory.cs_string(JOB_NAME,
                                                         "Unique name to " \
                                                         "give this job.")

        parameters = [
            cls._probes_param,
            cls._targets_param,
            cls._strict_param,
            cls._job_name_param,
        ]
        return parameters
Пример #7
0
    def parameters(cls):
        cls.job_uuid_param = ParameterFactory.job_uuid(SA_IDENTITY_COLLECTION)
        cls.job_name_param  = ParameterFactory.lc_string(JOB_NAME, 'Unique '\
                                                         'name to give this '
                                                         'job.')
        cls.exp_defs_param = ParameterFactory.experiment_definition()
        cls.training_param = ParameterFactory.integer(
            TRAINING_FACTOR,
            TRAINING_FACTOR_DESCRIPTION,
            default=AC_TRAINING_FACTOR,
            minimum=1,
            required=True)
        cls.ctrl_thresh = ParameterFactory.float(CTRL_THRESH,
                                                 CTRL_THRESH_DESCRIPTION,
                                                 default=AC_CTRL_THRESHOLD,
                                                 minimum=0.0,
                                                 maximum=100.0)
        cls.ctrl_filter = ParameterFactory.boolean(CTRL_FILTER,
                                                   CTRL_FILTER_DESCRIPTION,
                                                   default_value=False,
                                                   required=True)
        cls.ac_method = ParameterFactory.ac_method(AC_METHOD,
                                                   AC_METHOD_DESCRIPTION)
        cls.ac_model = ParameterFactory.cs_string(
            AC_MODEL,
            AC_MODEL_DESCRIPTION,
            required=False,
            enum=[
                m for model_dict in MODEL_FILES.values() for m in model_dict
            ])

        parameters = [
            cls.job_uuid_param,
            cls.job_name_param,
            cls.exp_defs_param,
            cls.training_param,
            cls.ctrl_thresh,
            cls.ctrl_filter,
            cls.ac_method,
            cls.ac_model,
        ]
        return parameters
Пример #8
0
    def parameters(cls):
        cls._design_param = ParameterFactory.design('Library design data.',
                                                          required=True)
        cls._mix_volume_param = ParameterFactory.float(MIX_VOL,
                                                'Float specifying the mix volume in ul',
                                                default=0.0,
                                                required=False)
        cls._total_volume_param = ParameterFactory.float(TOTAL_VOL,
                                                'Float specifying total volume in ul',
                                                default=0.0,
                                                required=False)
        cls._nbarcodes_param = ParameterFactory.integer(NBARCODES,
                                                'Integer specifying the number of barcodes to generate',
                                                required=True)

        parameters = [
                      cls._design_param,
                      cls._mix_volume_param,
                      cls._total_volume_param,
                      cls._nbarcodes_param,
                     ]
        return parameters
    def parameters(cls):
        cls._users_param    = ParameterFactory.lc_string(USERS, 
            "Username(s) of individual(s) that performed the run (e.g. ddicara)", 
            allow_multiple=True)
        cls._date_param     = ParameterFactory.date()
        cls._archive_param = ParameterFactory.archive()
        cls._beta_param     = ParameterFactory.integer(BETA, 
            "Beta (e.g. 17)", required=True, minimum=1, maximum=100)
        cls._device_param   = ParameterFactory.cs_string(DEVICE, 
            "Device description (e.g. PDMS bonded on COP)") 
        cls._dye_profile_metrics_param = ParameterFactory.dye_profile_metrics()
        cls._surfactant_param = ParameterFactory.cs_string(SURFACTANT,
            "Surfactant (e.g. RAN 002-105).")

        parameters = [
                      cls._users_param,
                      cls._date_param,
                      cls._archive_param,
                      cls._beta_param,
                      cls._device_param,
                      cls._dye_profile_metrics_param,
                      cls._surfactant_param,
                     ]
        return parameters
Пример #10
0
    def parameters(cls):
        cls.job_uuid_param  = ParameterFactory.job_uuid(PA_PROCESS_COLLECTION)
        cls.job_name_param  = ParameterFactory.lc_string(JOB_NAME, "Unique "\
                                                         "name to give this "
                                                         "job.")
        cls.pico1_dye_param      = ParameterFactory.dye(PICO1_DYE,
                                                      "Picoinjection 1 dye.")
        cls.pico2_dye_param      = ParameterFactory.dye(PICO2_DYE,
                                                      "Picoinjection 2 dye.")
        cls.assay_dye_param    = ParameterFactory.dye(ASSAY_DYE, "Assay dye.")
        cls.n_probes_param     = ParameterFactory.integer(NUM_PROBES,
                                                        NUM_PROBES_DESCRIPTION,
                                                        default=0, minimum=0)
        cls.training_param     = ParameterFactory.integer(TRAINING_FACTOR,
                                                   TRAINING_FACTOR_DESCRIPTION,
                                                   default=DEFAULT_ID_TRAINING_FACTOR,
                                                   minimum=1)
        cls.dye_levels_param   = ParameterFactory.dye_levels()
        cls.ignored_dyes_param = ParameterFactory.dyes(name=IGNORED_DYES,
                                                       required=False)
        cls.filtered_dyes_param = ParameterFactory.dyes(name=FILTERED_DYES,
                                                        required=False)
        cls.ui_threshold_param = ParameterFactory.float(UI_THRESHOLD,
                                                      UI_THRESHOLD_DESCRIPTION,
                                                      default=UNINJECTED_THRESHOLD,
                                                      minimum=0.0)
        cls.continuous_phase_param   = ParameterFactory.boolean(CONTINUOUS_PHASE,
                                                          CONTINUOUS_PHASE_DESCRIPTION,
                                                          default_value=False,
                                                          required=False)
        cls.dev_mode_param   = ParameterFactory.boolean(DEV_MODE,
                                                        'Use development mode (more forgiving of mistakes).',
                                                        default_value=DEFAULT_DEV_MODE,
                                                        required=False)
        cls.drift_compensate_param   = ParameterFactory.boolean(DRIFT_COMPENSATE,
                                                        'Compensate for data drift.',
                                                        default_value=DEFAULT_DRIFT_COMPENSATE,
                                                        required=False)
        cls.max_ui_ratio_param = ParameterFactory.float(MAX_UNINJECTED_RATIO,
                                                        MAX_UI_RATIO_DESCRIPTION,
                                                        default=UNINJECTED_RATIO,
                                                        minimum=0.0)
        cls.ignore_lowest_barcode = ParameterFactory.boolean(IGNORE_LOWEST_BARCODE,
                                                             IGNORE_LOWEST_BARCODE_DESCRIPTION,
                                                             default_value=DEFAULT_IGNORE_LOWEST_BARCODE,
                                                             required=False)

        parameters = [
                      cls.job_uuid_param,
                      cls.job_name_param,
                      cls.pico1_dye_param,
                      cls.pico2_dye_param,
                      cls.assay_dye_param,
                      cls.n_probes_param,
                      cls.training_param,
                      cls.dye_levels_param,
                      cls.ignored_dyes_param,
                      cls.filtered_dyes_param,
                      cls.ui_threshold_param,
                      cls.continuous_phase_param,
                      cls.max_ui_ratio_param,
                      cls.ignore_lowest_barcode,
                      cls.dev_mode_param,
                      cls.drift_compensate_param,
                     ]
        return parameters
Пример #11
0
    def parameters(cls):
        # required parameters
        cls.job_name_param = ParameterFactory.lc_string(
            JOB_NAME, 'Unique name for this job.', required=True)
        cls.exp_def_param = ParameterFactory.experiment_definition()
        cls.mask_param = ParameterFactory.cs_string(
            VARIANT_MASK, 'Mask code for variant selection.', required=False)

        # primary analysis parameters
        cls.pa_data_src_param = ParameterFactory.cs_string(
            PA_DATA_SOURCE,
            "Primary analysis data source (HDF5 or image stack).",
            required=True)
        cls.dyes_param = ParameterFactory.dyes(required=False)
        cls.device_param = ParameterFactory.device(required=False,
                                                   default='katahdin')
        cls.major_param = ParameterFactory.integer(MAJOR,
                                                   'Major dye version',
                                                   minimum=0,
                                                   required=False,
                                                   default=1)
        cls.minor_param = ParameterFactory.integer(MINOR,
                                                   'Minor dye version',
                                                   minimum=0,
                                                   required=False,
                                                   default=0)
        cls.offset = ParameterFactory.integer(
            OFFSETS,
            'Offset used to infer a dye model.',
            default=abs(DEFAULT_OFFSETS[0]),
            minimum=1,
            required=False)
        cls.use_iid_param = ParameterFactory.boolean(USE_IID,
                                                     'Use IID Peak Detection.',
                                                     default_value=False,
                                                     required=False)

        # identity parameters
        cls.dye_levels_param = ParameterFactory.dye_levels(required=False)
        cls.ignored_dyes_param = ParameterFactory.dyes(name=IGNORED_DYES,
                                                       required=False)
        cls.filtered_dyes_param = ParameterFactory.dyes(name=FILTERED_DYES,
                                                        required=False)
        cls.pico1_dye_param = ParameterFactory.dye(PICO1_DYE,
                                                   'picoinjection 1 dye.',
                                                   required=False,
                                                   default=None)
        cls.pico2_dye_param = ParameterFactory.dye(PICO2_DYE,
                                                   'picoinjection 2 dye.',
                                                   required=False,
                                                   default=DEFAULT_PICO2_DYE)
        cls.assay_dye_param = ParameterFactory.dye(ASSAY_DYE,
                                                   'Assay dye.',
                                                   required=False,
                                                   default=DEFAULT_ASSAY_DYE)
        cls.n_probes_param = ParameterFactory.integer(NUM_PROBES,
                                                      NUM_PROBES_DESCRIPTION,
                                                      minimum=4,
                                                      required=False)
        cls.id_training_param = ParameterFactory.integer(
            ID_TRAINING_FACTOR,
            TRAINING_FACTOR_DESCRIPTION,
            minimum=1,
            required=False,
            default=DEFAULT_ID_TRAINING_FACTOR,
        )
        cls.ui_threshold_param = ParameterFactory.float(
            UI_THRESHOLD,
            UI_THRESHOLD_DESCRIPTION,
            minimum=0.0,
            required=False,
            default=DEFAULT_UNINJECTED_THRESHOLD)
        cls.continuous_phase_param = ParameterFactory.boolean(
            CONTINUOUS_PHASE,
            CONTINUOUS_PHASE_DESCRIPTION,
            default_value=False,
            required=False)
        cls.max_ui_ratio_param = ParameterFactory.float(
            MAX_UNINJECTED_RATIO,
            MAX_UI_RATIO_DESCRIPTION,
            default=DEFAULT_UNINJECTED_RATIO,
            minimum=0.0)
        cls.ignore_lowest_barcode = ParameterFactory.boolean(
            IGNORE_LOWEST_BARCODE,
            IGNORE_LOWEST_BARCODE_DESCRIPTION,
            default_value=True,
            required=False)
        cls.use_pico1_filter = ParameterFactory.boolean(
            USE_PICO1_FILTER,
            USE_PICO1_FILTER_DESCRIPTION,
            default_value=True,
            required=False)
        cls.use_pico2_filter = ParameterFactory.boolean(
            USE_PICO2_FILTER,
            USE_PICO2_FILTER_DESCRIPTION,
            default_value=True,
            required=False)
        cls.dev_mode_param = ParameterFactory.boolean(
            DEV_MODE,
            'Use development mode (more forgiving of mistakes).',
            default_value=DEFAULT_DEV_MODE,
            required=False)
        cls.drift_compensate_param = ParameterFactory.boolean(
            DRIFT_COMPENSATE,
            'Compensate for data drift.',
            default_value=DEFAULT_DRIFT_COMPENSATE,
            required=False)

        # assay caller params
        cls.ac_training_param = ParameterFactory.integer(
            AC_TRAINING_FACTOR,
            TRAINING_FACTOR_DESCRIPTION,
            minimum=1,
            required=False,
            default=DEFAULT_AC_TRAINING_FACTOR)

        cls.ctrl_thresh = ParameterFactory.float(
            CTRL_THRESH,
            CTRL_THRESH_DESCRIPTION,
            default=DEFAULT_AC_CTRL_THRESHOLD,
            minimum=0.0,
            maximum=100.0)

        cls.ctrl_filter = ParameterFactory.boolean(CTRL_FILTER,
                                                   CTRL_FILTER_DESCRIPTION,
                                                   default_value=False,
                                                   required=True)
        cls.ac_method = ParameterFactory.ac_method(AC_METHOD,
                                                   AC_METHOD_DESCRIPTION)
        cls.ac_model = ParameterFactory.cs_string(
            AC_MODEL,
            AC_MODEL_DESCRIPTION,
            required=False,
            enum=[
                m for model_dict in MODEL_FILES.values() for m in model_dict
            ])

        # genotyper params
        cls.req_drops_param = ParameterFactory.integer(REQUIRED_DROPS,
                                                       REQ_DROPS_DESCRIPTION,
                                                       required=False,
                                                       minimum=0,
                                                       default=0)

        parameters = [
            cls.pa_data_src_param,
            cls.dyes_param,
            cls.device_param,
            cls.major_param,
            cls.minor_param,
            cls.job_name_param,
            cls.offset,
            cls.use_iid_param,
            cls.pico1_dye_param,
            cls.pico2_dye_param,
            cls.assay_dye_param,
            cls.n_probes_param,
            cls.id_training_param,
            cls.dye_levels_param,
            cls.ignored_dyes_param,
            cls.dev_mode_param,
            cls.drift_compensate_param,
            cls.use_pico1_filter,
            cls.use_pico2_filter,
            cls.filtered_dyes_param,
            cls.ui_threshold_param,
            cls.continuous_phase_param,
            cls.max_ui_ratio_param,
            cls.ignore_lowest_barcode,
            cls.ac_training_param,
            cls.ctrl_thresh,
            cls.ctrl_filter,
            cls.ac_method,
            cls.ac_model,
            cls.req_drops_param,
            cls.exp_def_param,
            cls.mask_param,
        ]
        return parameters
Пример #12
0
    def process_request(cls, params_dict):
        plate_file = params_dict[ParameterFactory.file(
            "Raw plate reader data file.")][0]
        probe_sequence = params_dict[ParameterFactory.cs_string(
            "probe_sequence", "Probe sequence.")][0]
        probe_tm = params_dict[ParameterFactory.float(
            "probe_tm", "Probe melting temperature (degrees celsius).")][0]
        probe_length = params_dict[ParameterFactory.integer(
            "probe_length", "Probe length.")][0]
        target_sequence = params_dict[ParameterFactory.cs_string(
            "target_sequence", "Target sequence.")][0]
        variant_location = params_dict[ParameterFactory.cs_string(
            "variant_location", "Variant location.")][0]
        variant_allele = params_dict[ParameterFactory.cs_string(
            "variant_allele", "Variant allele.")][0]
        reference_allele = params_dict[ParameterFactory.cs_string(
            "reference_allele", "Reference allele.")][0]
        incubation_temp = params_dict[ParameterFactory.float(
            "incubation_temp", "Incubation temperature (degrees celsius).")][0]
        incubation_time = params_dict[ParameterFactory.float(
            "incubation_time", "Incubation time (minutes).")][0]

        json_response = {
            FILENAME: plate_file.filename,
            "probe_sequence": probe_sequence,
            "probe_tm": probe_tm,
            "probe_length": probe_length,
            "target_sequence": target_sequence,
            "variant_location": variant_location,
            "variant_allele": variant_allele,
            "reference_allele": reference_allele,
            "incubation_temp": incubation_temp,
            "incubation_time": incubation_time,
        }
        http_status_code = 200
        file_uuid = str(uuid4())

        path = os.path.join(PLATES_UPLOAD_PATH, file_uuid)
        existing_filenames = cls._DB_CONNECTOR.distinct(
            PLATES_COLLECTION, FILENAME)
        if os.path.exists(path) or plate_file.filename in existing_filenames:
            http_status_code = 403
        else:
            try:
                plate_file.save(path)
                plate_file.close()
                json_response[URL] = "http://%s/uploads/%s/plates/%s" % (
                    HOSTNAME, PORT, file_uuid)
                json_response[FILEPATH] = path
                json_response[UUID] = file_uuid
                json_response[DATESTAMP] = datetime.today()
                json_response[TYPE] = "plate"

                cls._DB_CONNECTOR.insert(PLATES_COLLECTION, [json_response])
            except:
                APP_LOGGER.exception(traceback.format_exc())
                json_response[ERROR] = str(sys.exc_info()[1])
                http_status_code = 500
            finally:
                if ID in json_response:
                    del json_response[ID]
                silently_remove_file(path)

        return make_clean_response(json_response, http_status_code)