def read_line(self, line): info = self._csv.read_line(line) try: info[0] = amdis.correct_code(info[0]) except: return None try: info[1] = float(info[1]) except ValueError: info[1] = None return None try: info[2] = float(info[2]) except ValueError: print('ERROR: in {0}, value for lim in code {1} is not a number \ or missing.'.format(self._path, info[0])) sys.exit(2) try: info[3] = [int(i) for i in info[3].split("+")] except: print('ERROR: in {0}, value for m/z in code {1} is wrong format.'\ .format(self._path, info[0])) print('It should be one integer, or more separate with "+".') sys.exit(2) self._lib[info[0]] = {} for i in range(1, len(self._headerlist)): self._lib[info[0]][self._headerlist[i]] = info[i] return
def CFdict(path, csv): import amdis CFdict = {} with open(path, 'r') as calfile: for line in calfile: info = csv.read_line(line) CFdict[amdis.correct_code(info[0])] = (float(info[-2]), float(info[-1])) return CFdict
def main(): options = get_info() project_name = options.project_name.lower() sample = options.sample.lower() code = amdis.correct_code(options.code) info = init.Info('pyquan.ini') path = init.Path(project_name, info) removecode = RemoveCode(path, info, code) if sample == 'all': removecode.remove_all() else: removecode.remove_code(sample) print('\a') return
def scan_amdis(info_old, amdis_dict, csv): from operator import itemgetter for i in range(len(info_old)): info_old[i] = csv.read_line(info_old[i]) try: info_old[i][1] = float(info_old[i][1]) except: pass info_old[i][0] = amdis.correct_code(info_old[i][0]) compound = amdis_dict.pop(info_old[i][0], None) if compound: info_old[i][4] = compound else: print('{0} not in AMDIS library'.format(info_old[i][0])) return info_old, amdis_dict
def update_library(amdis_path, lib_path, info, path): amdis_dict = amdis.read_compounds(amdis_path) info_old = None mz_dict = amdis.read_intensity(amdis_path, info) #open library if exists, and check compound name if os.path.exists(lib_path): with open(lib_path, 'r') as lib_old: lib_old.readline() info_old = lib_old.readlines() info_old, amdis_dict = scan_amdis(info_old, amdis_dict, info.csv) with open(lib_path, 'w') as lib_new: lib_new.write( info.csv.make_line( ['Code', 'RT', 'Limit', 'm/z', 'Name', 'Source'])) if info_old: for line in info_old: try: spectrum = mz_dict[line[0]] m_list = [int(i) for i in line[3].split("+")] if not all(m in spectrum for m in [int(i) for i in m_list]): print('m/z {0} not in mass spectrum of {1},' \ .format(line[3],line[0]),) line[3] = max(spectrum.items(), \ key=operator.itemgetter(1))[0] print('m/z changed to {0}'.format(line[3])) except KeyError: pass lib_new.write(info.csv.make_line(line)) if amdis_dict: for code in amdis_dict: mass = max(mz_dict[code].items(), key=operator.itemgetter(1))[0] lib_new.write( info.csv.make_line([ amdis.correct_code(code), "", "", mass, "", amdis_dict[code], "" ])) return
def ID(self, line): info = self._csv.read_line(line) ID = {} for i in range(1,len(self._itemlist)): if 'None' in info[i]: info[i] = '' elif self._stylelist[i] == 'float': info[i] = float(info[i]) elif self._stylelist[i] == 'int': info[i] = int(info[i]) elif self._stylelist[i] == 'list_float': infolist = [] for item in info[i].split(' '): if item: infolist.append(float(item)) info[i] = infolist elif self._stylelist[i] == 'list_int': infolist = [] for i in info[i].split(' '): infolist.append(int(i)) info[i] = infolist ID[self._itemlist[i]] = info[i] return amdis.correct_code(info[0]), ID
def code(self, line): return amdis.correct_code(self._csv.read_line(line)[0])