Source code for om_code.loadplatedata

# functions to load the data generated by the plate reader
# and to parse the annotation file
import pandas as pd
import numpy as np
import om_code.omerrors as errors
from om_code.analyseTecan import analyseTecan
from om_code.analyseOldTecan import analyseOldTecan
from om_code.analyseSunrise import analyseSunrise


[docs]def loadfromplate( platereadertype, wdirpath, dname, dsheetnumber, aname, asheetnumber ): """ Creates dataframe from input files created by the plate reader. """ experiment = dname.split(".")[0] # import and process plate contents file allconditions, allstrains, alldata, rcontents = analyseContentsofWells( wdirpath, experiment, aname, asheetnumber ) # import data created by plate reader try: print("loading", dname) dfd = pd.read_excel(str(wdirpath / dname), sheet_name=dsheetnumber) except FileNotFoundError: raise errors.FileNotFound(str(wdirpath / dname)) # extract data from the plate reader file if platereadertype == "Tecan": rdict, datatypes = analyseTecan(dfd, rcontents, experiment) elif platereadertype == "old Tecan": rdict, datatypes = analyseOldTecan(dfd, rcontents, experiment) elif platereadertype == "Sunrise": rdict, datatypes = analyseSunrise(dfd, rcontents, experiment) else: raise errors.UnknownPlateReader(platereadertype) rdict = pd.DataFrame(rdict) datatypes = list(datatypes) # return dataframes for raw and processed data, error return rdict, allconditions, allstrains, alldata, experiment, datatypes
###
[docs]def analyseContentsofWells(wdirpath, experiment, aname, asheetnumber): """ Loads and parses ContentsofWells file. Returns rcontents, a dictionary with the contents of each well indexed by well, and alldata, a dictionary describing the contents of each well indexed by experiment. """ import re try: alldata = {} # import contents of the wells anno = pd.read_excel( str(wdirpath / aname), index_col=0, sheet_name=asheetnumber ) alldata[experiment] = [] rcontents = {} # run through and parse content of each well for x in np.arange(1, 13): for y in "ABCDEFGH": well = y + str(x) if ( isinstance(anno[x][y], str) and anno[x][y] != "contaminated" ): s, c = anno[x][y].split(" in ") # standardise naming of wells with no strains s = re.sub("(null|NULL)", "Null", s) rcontents[well] = [c.strip(), s.strip()] alldata[experiment].append( rcontents[well][1] + " in " + rcontents[well][0] ) else: rcontents[well] = [None, None] # create summary descriptions of the well contents alldata[experiment] = list(np.unique(alldata[experiment])) allconditions = list( np.unique( [ rcontents[well][0] for well in rcontents if rcontents[well][0] is not None ] ) ) allstrains = list( np.unique( [ rcontents[well][1] for well in rcontents if rcontents[well][0] is not None ] ) ) return allconditions, allstrains, alldata, rcontents except FileNotFoundError: raise errors.FileNotFound(str(wdirpath / aname))