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)
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)
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)
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)
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()
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()