Files
qubit-tools/qubittool/tool.py

212 lines
7.6 KiB
Python
Raw Normal View History

2023-08-07 15:59:16 -04:00
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
2023-08-07 15:59:16 -04:00
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
fmtId = formatInosticsId( model.get_Id(), model.get_materialid() )
ws.append([ix, "", fmtId, model.get_customerid(), model.get_plasmavolml(), model.get_qubitrunid(),
2023-08-07 15:59:16 -04:00
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
2023-08-07 15:59:16 -04:00
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
2023-08-07 15:59:16 -04:00
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
2023-08-07 15:59:16 -04:00
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
2023-08-07 15:59:16 -04:00
wb.close()
return InosticsIDKeys