import sys, os import pandas as pd import csv import openpyxl from openpyxl import Workbook, load_workbook from openpyxl.worksheet.table import Table, TableStyleInfo from openpyxl.worksheet.dimensions import ColumnDimension from openpyxl.worksheet.worksheet import Worksheet from openpyxl.utils import cell from openpyxl.styles import PatternFill, Border, Side, Alignment from rowmodel import RowModel <<<<<<< HEAD codex:dict = {"cfDNA from Plasma":None} codex.update ( {"gDNA from cells":"BM"} ) codex.update({"gDNA from Buffy Coat":"BC"}) ======= >>>>>>> d07459290f0590ab07c6c3fdca43ff95ec80057a def read_qubit_doc_by_accession(keys:dict, path:str): # collect values_by_sample_names string ids # with open(path, 'r', newline='', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile) for row in reader: try: if keys[ row["Test Name"] ]: rmv:RowModel = keys[ row["Test Name"] ] rmv.set_testdate(row["Test Date"]) #rmv.set_qubitrunid(row["Run ID"]) rmv.set_runvalngml(row["Green RFU"]) rmv.set_sampleconc(row["Original sample conc."]) rmv.set_tubeconc(row["Qubit tube conc."]) print("{}:{}".format(rmv.get_qubitrunid(), rmv.get_Id())) except KeyError: pass return def read_qubit_doc_by_order(keys:dict, path:str): # collect values_by_sample_names string ids # with open(path, 'r', newline='', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile) rowlist:list = list() for row in reader: rowlist.append(row) if len( rowlist ) < 1: return indx:int = len( rowlist ) - 1 for key in keys: try: row = rowlist[indx] if row is None: return indx = indx - 1 if row["Test Name"]: rmv:RowModel = keys[key] rmv.set_testdate(row["Test Date"]) #rmv.set_qubitrunid(row["Run ID"]) rmv.set_runvalngml(row["Green RFU"]) rmv.set_sampleconc(row["Original sample conc."]) rmv.set_tubeconc(row["Qubit tube conc."]) print("{}:{}".format(rmv.get_qubitrunid(), rmv.get_Id())) except KeyError: pass except IndexError: return return def write_run_doc(dm:dict, path:str): # write excel run_doc section with values_from_qubit by string ids # sheetdata:list = [] wb = openpyxl.load_workbook(path, read_only=False) sheets = wb.sheetnames ws:Worksheet = None for sheetname in sheets: if sheetname == "Output": ws = wb.get_sheet_by_name(sheetname) break if ws == None: ws = wb.create_sheet(title="Output") ws.title = "Output" wb.worksheets.append(ws) ws.append( ["No.", "SampleID", "Sysmex Inostics ID (Accession ID)","Secondary ID (Customer ID)","Plasma Vol. [mL]","Qubit run ID","ng/µL","GE/µL"] ) ws.column_dimensions["C"].width = 19.23 ws.column_dimensions["D"].width = 18.23 ws.column_dimensions["E"].width = 15.23 ws.column_dimensions["F"].width = 14.23 ws.column_dimensions["G"].width = 18.23 ix:int = 0 for r in dm: model:RowModel = dm[r] ix=ix+1 <<<<<<< HEAD fmtId = formatInosticsId( model.get_Id(), model.get_materialid() ) ws.append([ix, "", fmtId, model.get_customerid(), model.get_plasmavolml(), model.get_qubitrunid(), ======= ws.append([ix, "", model.get_Id(), model.get_customerid(), model.get_plasmavolml(), model.get_qubitrunid(), >>>>>>> d07459290f0590ab07c6c3fdca43ff95ec80057a model.get_sampleconc(), convert_to_GE(model.get_sampleconc())]) grayFill = PatternFill(start_color='D0CECE', end_color='D0CECE', fill_type='solid') for columns in ws.iter_cols(min_col=1, max_col=2, min_row=None, max_row=None): for cell in columns: cell.fill = grayFill wb.save(path) wb.close() return <<<<<<< HEAD def formatInosticsId(id:str=None, matrl:str=None): iid = id.split("-", 1)[0] ncd:str = "" try: if codex[matrl] is None: ncd = "" else: ncd = codex[matrl] if iid: return iid + ncd except Exception as e: pass return iid ======= >>>>>>> d07459290f0590ab07c6c3fdca43ff95ec80057a def convert_to_numeric(vlu, stndv:float=0.0): try: return float(vlu) except Exception as e: return decimal.Decimal(stndv) def convert_to_GE(vlu, stndfv:float=0.0033): try: return float(vlu) / stndfv except Exception as e: return "undefined" def read_collect_run_doc_name_strids(min_col:int=1, path:str=None): wb = openpyxl.load_workbook(path, read_only=True) ws = wb.active if ws.title != "Documentation": raise Exception("Run Doc not found, set Active worksheet") ProtocolRunID = ws.cell(3,3).value InosticsID = None CustomerID = None PlasmaID = None <<<<<<< HEAD MaterialID = None ======= >>>>>>> d07459290f0590ab07c6c3fdca43ff95ec80057a InosticsIDKeys = {} for row in ws.iter_rows(max_row=30, min_col=min_col): for cell in row: if InosticsID == None and cell.value and isinstance(cell.value, str) and "Inostics ID" in cell.value: InosticsID = cell.column continue if CustomerID == None and cell.value and isinstance(cell.value, str) and "Relevant Customer ID" in cell.value: CustomerID = cell.column continue if PlasmaID == None and cell.value and isinstance(cell.value, str) and "Plasma Vol" in cell.value: PlasmaID = cell.column continue <<<<<<< HEAD if MaterialID==None and cell.value and isinstance(cell.value, str) and "Sample Material" in cell.value: MaterialID = cell.column continue ======= >>>>>>> d07459290f0590ab07c6c3fdca43ff95ec80057a if cell.value and InosticsID == cell.column: InosticsIDKeys[cell.value] = RowModel(cell.coordinate, cell.value) rmv:RowModel = InosticsIDKeys[cell.value] if ProtocolRunID != None : rmv.set_qubitrunid(ProtocolRunID) continue if cell.value and CustomerID == cell.column: print(F"{cell.coordinate}:{cell.row}x{cell.column}={cell.value}") try: if InosticsIDKeys[row[InosticsID-1].value] != None: rmv:RowModel = InosticsIDKeys[row[InosticsID-1].value] rmv.set_customerid( cell.value ) except: pass if cell.value and PlasmaID == cell.column: print(F"{cell.coordinate}:{cell.row}x{cell.column}={cell.value}") try: if InosticsIDKeys[row[InosticsID-1].value] != None: rmv:RowModel = InosticsIDKeys[row[InosticsID-1].value] rmv.set_plasmavolml( convert_to_numeric(cell.value) ) except: pass <<<<<<< HEAD if cell.value and MaterialID == cell.column: print(F"{cell.coordinate}:{cell.row}x{cell.column}={cell.value}") try: if InosticsIDKeys[row[InosticsID-1].value] != None: rmv:RowModel = InosticsIDKeys[row[InosticsID-1].value] rmv.set_materialid( cell.value ) except: pass ======= >>>>>>> d07459290f0590ab07c6c3fdca43ff95ec80057a wb.close() return InosticsIDKeys