def main(lims, pid, epp_logger):
    process = Process(lims,id = pid)
    target_files = dict((r.samples[0].name, r) for r in process.result_files())
    file_handler = ReadResultFiles(process)
    QiT = QuantitConc(process, file_handler)
    QiT.fit_model()
    QiT.prepare_result_files_dict()
    if QiT.model and 'Linearity of standards' in QiT.udfs.keys():
        R2 = QiT.model[0]
        if R2 >= QiT.udfs['Linearity of standards']:
            QiT.abstract.insert(0,"R2 = {0}. Standards OK.".format(R2))
            if QiT.result_files:
                for sample, target_file in target_files.items():
                    rel_fluor_int = QiT.get_and_set_fluor_int(target_file)
                    QiT.calc_and_set_conc(target_file, rel_fluor_int)
                QiT.abstract.append("Concentrations uploaded for {0} "
                                                "samples.".format(QiT.no_samps))
            else:
                QiT.abstract.append("Upload input file(s) for samples.")
        else:
            QiT.abstract.insert(0, "R2 = {0}. Problem with standards! Redo "
                                                    "measurement!".format(R2))
    else:
        QiT.missing_udfs.append('Linearity of standards')
    if QiT.missing_samps:
        QiT.abstract.append("The following samples are missing in Quant-iT "
            "result File 1 or 2: {0}.".format(', '.join(QiT.missing_samps)))
    if QiT.missing_udfs:
        QiT.abstract.append("Are all of the following udfs set? : {0}".format(
                                                   ', '.join(QiT.missing_udfs)))
    print >> sys.stderr, ' '.join(QiT.abstract)
Example #2
0
def main(lims, pid, epp_logger):
    process = Process(lims, id=pid)
    target_files = dict((r.samples[0].name, r) for r in process.result_files())
    file_handler = ReadResultFiles(process)
    QiT = QuantitConc(process, file_handler)
    QiT.fit_model()
    QiT.prepare_result_files_dict()
    if QiT.model and 'Linearity of standards' in QiT.udfs.keys():
        R2 = QiT.model[0]
        if R2 >= QiT.udfs['Linearity of standards']:
            QiT.abstract.insert(0, "R2 = {0}. Standards OK.".format(R2))
            if QiT.result_files:
                for sample, target_file in target_files.items():
                    rel_fluor_int = QiT.get_and_set_fluor_int(target_file)
                    QiT.calc_and_set_conc(target_file, rel_fluor_int)
                QiT.abstract.append("Concentrations uploaded for {0} "
                                    "samples.".format(QiT.no_samps))
            else:
                QiT.abstract.append("Upload input file(s) for samples.")
        else:
            QiT.abstract.insert(
                0, "R2 = {0}. Problem with standards! Redo "
                "measurement!".format(R2))
    else:
        QiT.missing_udfs.append('Linearity of standards')
    if QiT.missing_samps:
        QiT.abstract.append("The following samples are missing in Quant-iT "
                            "result File 1 or 2: {0}.".format(', '.join(
                                QiT.missing_samps)))
    if QiT.missing_udfs:
        QiT.abstract.append("Are all of the following udfs set? : {0}".format(
            ', '.join(QiT.missing_udfs)))
    print >> sys.stderr, ' '.join(QiT.abstract)
Example #3
0
def main(lims, pid, epp_logger):
    process = Process(lims,id = pid)
    QiT = QuantitQC(process)
    QiT.assign_QC_flag()
    if QiT.flour_int_missing:
        QiT.abstract.append("Fluorescence intensity is missing for {0} "
                                       "samples.".format(QiT.flour_int_missing))
    if QiT.missing_udfs:
        QiT.abstract.append("Could not set QC flags. Some of the following "
             "required udfs seems to be missing: {0}.".format(QiT.missing_udfs))
    else:
        QiT.abstract.append("{0} out of {1} samples failed "
                       "QC.".format(QiT.no_failed, len(process.result_files())))
    if QiT.saturated:
        QiT.abstract.append("{0} samples had saturated fluorescence "
                                             "intensity.".format(QiT.saturated))
    if QiT.hig_CV_fract:
        QiT.abstract.append("{0} samples had high %CV.".format(QiT.hig_CV_fract))
    if QiT.low_conc:
        QiT.abstract.append("{0} samples had low concentration.".format(
                                                                  QiT.low_conc))
    if QiT.conc_missing:
        QiT.abstract.append("Concentration is missing for {0} "
                                     "sample(s).".format(QiT.conc_missing))
    QiT.abstract = list(set(QiT.abstract))
    print >> sys.stderr, ' '.join(QiT.abstract)
def main(lims, pid, epp_logger):
    process = Process(lims, id=pid)
    QiT = QuantitQC(process)
    QiT.assign_QC_flag()
    if QiT.flour_int_missing:
        QiT.abstract.append("Fluorescence intensity is missing for {0} "
                            "samples.".format(QiT.flour_int_missing))
    if QiT.missing_udfs:
        QiT.abstract.append("Could not set QC flags. Some of the following "
                            "required udfs seems to be missing: {0}.".format(
                                QiT.missing_udfs))
    else:
        QiT.abstract.append("{0} out of {1} samples failed "
                            "QC.".format(QiT.no_failed,
                                         len(process.result_files())))
    if QiT.saturated:
        QiT.abstract.append("{0} samples had saturated fluorescence "
                            "intensity.".format(QiT.saturated))
    if QiT.hig_CV_fract:
        QiT.abstract.append("{0} samples had high %CV.".format(
            QiT.hig_CV_fract))
    if QiT.low_conc:
        QiT.abstract.append("{0} samples had low concentration.".format(
            QiT.low_conc))
    if QiT.conc_missing:
        QiT.abstract.append("Concentration is missing for {0} "
                            "sample(s).".format(QiT.conc_missing))
    QiT.abstract = list(set(QiT.abstract))
    print >> sys.stderr, ' '.join(QiT.abstract)
def main(lims, pid, epp_logger):
    process = Process(lims,id = pid)
    sample_names = map(lambda a: a.name, process.analytes()[0])
    target_files = process.result_files()
    file_handler = ReadResultFiles(process)
    files = file_handler.shared_files['Qubit Result File']
    qubit_result_file = file_handler.format_file(files, 
                                                 name = 'Qubit Result File',
                                                 first_header = 'Sample',
                                                 find_keys = sample_names)
    missing_samples = 0
    low_conc = 0
    bad_formated = 0
    abstract = []
    udfs = dict(process.udf.items())
    if udfs.has_key("Minimum required concentration (ng/ul)"):
        min_conc = udfs["Minimum required concentration (ng/ul)"]
    else:
        min_conc = None
        abstract.append("Set 'Minimum required concentration (ng/ul)' to get qc-flaggs based on this treshold!")
    for target_file in target_files:
        sample = target_file.samples[0].name
        if qubit_result_file.has_key(sample):
            sample_mesurements = qubit_result_file[sample]
            if "Sample Concentration" in sample_mesurements.keys():
                conc, unit = sample_mesurements["Sample Concentration"]
                if conc == 'Out Of Range':
                    target_file.qc_flag = "FAILED"
                elif conc.replace('.','').isdigit():
                    conc = float(conc)
                    if unit == 'ng/mL':
                        conc = np.true_divide(conc, 1000)
                    if min_conc:
                        if conc < min_conc:
                            target_file.qc_flag = "FAILED"
                            low_conc +=1
                        else:
                            target_file.qc_flag = "PASSED"
                    target_file.udf['Concentration'] = conc
                    target_file.udf['Conc. Units'] = 'ng/ul'
                else:
                    bad_formated += 1
                set_field(target_file)
        else:
            missing_samples += 1

    if low_conc:
        abstract.append('{0}/{1} samples have low concentration.'.format(low_conc, len(target_files)))
    if missing_samples:
        abstract.append('{0}/{1} samples are missing in Qubit Result File.'.format(missing_samples, len(target_files)))
    if bad_formated:
        abstract.append('There are {0} badly formated samples in Qubit Result File. Please fix these to get proper results.'.format(bad_formated))

    print >> sys.stderr, ' '.join(abstract)
Example #6
0
def old_main(lims, pid, epp_logger):
    process = Process(lims,id = pid)
    sample_names = map(lambda a: a.name, process.analytes()[0])
    target_files = process.result_files()
    file_handler = ReadResultFiles(process)
    files = file_handler.shared_files['Qubit Result File']
    qubit_result_file = file_handler.format_file(files, 
                                                 name = 'Qubit Result File',
                                                 first_header = ['Test','Sample'],
                                                 find_keys = sample_names)
    missing_samples = 0
    low_conc = 0
    bad_formated = 0
    abstract = []
    udfs = dict(process.udf.items())
    if udfs.has_key("Minimum required concentration (ng/ul)"):
        min_conc = udfs["Minimum required concentration (ng/ul)"]
    else:
        min_conc = None
        abstract.append("Set 'Minimum required concentration (ng/ul)' to get qc-flaggs based on this treshold!")
    for target_file in target_files:
        sample = target_file.samples[0].name
        if qubit_result_file.has_key(sample):
            sample_mesurements = qubit_result_file[sample]
            if "Sample Concentration" in sample_mesurements.keys():
                conc, unit = sample_mesurements["Sample Concentration"]
                if conc == 'Out Of Range':
                    target_file.qc_flag = "FAILED"
                elif conc.replace('.','').isdigit():
                    conc = float(conc)
                    if unit == 'ng/mL':
                        conc = np.true_divide(conc, 1000)
                    if min_conc:
                        if conc < min_conc:
                            target_file.qc_flag = "FAILED"
                            low_conc +=1
                        else:
                            target_file.qc_flag = "PASSED"
                    target_file.udf['Concentration'] = conc
                    target_file.udf['Conc. Units'] = 'ng/ul'
                else:
                    bad_formated += 1
                set_field(target_file)
        else:
            missing_samples += 1

    if low_conc:
        abstract.append('{0}/{1} samples have low concentration.'.format(low_conc, len(target_files)))
    if missing_samples:
        abstract.append('{0}/{1} samples are missing in Qubit Result File.'.format(missing_samples, len(target_files)))
    if bad_formated:
        abstract.append('There are {0} badly formated samples in Qubit Result File. Please fix these to get proper results.'.format(bad_formated))

    print >> sys.stderr, ' '.join(abstract)
Example #7
0
def set_qc_flag(lims, process_id, cutoff=10):
    """Set qubit qc flags based on Dx Concentratie fluorescentie (ng/ul) values."""
    process = Process(lims, id=process_id)
    artifacts = process.result_files()
    concentration_range = map(
        float, re.findall('[\d\.]+',
                          process.udf['Concentratiebereik (ng/ul)']))
    samples_measurements = {}

    for artifact in artifacts:
        sample = artifact.name.rstrip('Qubit').rstrip()
        measurement = artifact.udf['Dx Conc. goedgekeurde meting (ng/ul)']
        if sample in samples_measurements:
            samples_measurements[sample].append(measurement)
        else:
            samples_measurements[sample] = [measurement]

    for artifact in artifacts:
        sample = artifact.name.rstrip('Qubit').rstrip()

        sample_measurements = samples_measurements[sample]
        sample_measurements_average = sum(sample_measurements) / float(
            len(sample_measurements))
        artifact.udf[
            'Dx Concentratie fluorescentie (ng/ul)'] = sample_measurements_average

        if concentration_range[
                0] <= sample_measurements_average <= concentration_range[1]:
            if len(sample_measurements) == 1:
                artifact.qc_flag = 'PASSED'
            elif len(sample_measurements) == 2:
                sample_measurements_difference = abs(sample_measurements[0] -
                                                     sample_measurements[1])
                sample_measurements_deviation = sample_measurements_difference / sample_measurements_average
                if sample_measurements_deviation <= 0.1:
                    artifact.qc_flag = 'PASSED'
                else:
                    artifact.qc_flag = 'FAILED'
        else:
            artifact.qc_flag = 'FAILED'

        artifact.put()
Example #8
0
def results(lims, process_id):
    """Upload magnis export to process."""
    process = Process(lims, id=process_id)
    lot_error = False

    for output_file in process.result_files():
        if output_file.name == 'Magnis export file':
            magnis_xml_file = output_file.files[0]
            magnis_data = xmltodict.parse(lims.get_file_contents(magnis_xml_file.id))

            # Save lot nunmbers and check sample input strip barcode
            for labware in magnis_data['RunInfo']['LabwareInfos']['Labware']:
                if labware['@Name'] == 'Probe Input Strip':
                    process.udf['lot # SureSelect v7'] = labware['@LotNumber']
                elif labware['@Name'] == 'Reagent Plate':
                    process.udf['lot # Magnis Sureselect XT HS reagent plate'] = labware['@LotNumber']
                elif labware['@Name'] == 'Beads/Buffers Plate':
                    process.udf['lot # Magnis SureSelect XT Beads/Buffers Plate'] = labware['@LotNumber']
                elif labware['@Name'] == 'Index Strip':
                    process.udf['lot # Dual BC strip'] = labware['@LotNumber']
                    index_strip_number = int(labware['@IndexStrip'])
                elif labware['@Name'] == 'Reagent Strip':
                    process.udf['lot # BR Oligo strip (blockers)'] = labware['@LotNumber']
                elif (
                    labware['@Name'] == 'Sample Input Strip' and
                    process.udf['Barcode sample input strip'] != labware['@BarCode']
                ):
                    lot_error = True

    # Check sample reagents and fill Lotnr check flag
    for output in process.analytes()[0]:
        label_index_number = int(output.reagent_labels[0][3:5])
        if lot_error or label_index_number != index_strip_number:
            output.udf['Lotnr check'] = False
        else:
            output.udf['Lotnr check'] = True
        output.put()
    process.put()