def pack(self): d = { "scan start time": unitfloat(self.start_time, 'minute'), "ion injection time": unitfloat(self.injection_time, 'millisecond'), } d.update(self.traits) window_list = [{ 'scan window lower limit': unitfloat(sw.lower, 'm/z'), 'scan window upper limit': unitfloat(sw.upper, 'm/z') } for sw in self.window_list] d['scanWindowList'] = { "count": len(window_list), "scanWindow": window_list } return d
def _acquisition_information(self, scan): fline = self._filter_string(scan) event = self._get_scan_event(scan) trailer_extras = self._trailer_values(scan) traits = { 'preset scan configuration': event, 'filter string': fline, } event = ScanEventInformation( self._scan_time(scan), injection_time=unitfloat(trailer_extras.get('Ion Injection Time (ms)', 0.0), 'millisecond'), window_list=[ScanWindow( fline.get("scan_window")[0], fline.get("scan_window")[1])], traits=traits) return ScanAcquisitionInformation("no combination", [event])
def _acquisition_information(self, scan): scan_info = {} scan_list_struct = scan['scanList'] combination = "unknown" if "no combination" in scan_list_struct: combination = "no combination" elif "sum of spectra" in scan_list_struct: combination = "sum of spectra" elif "median of spectra" in scan_list_struct: combination = "median of spectra" elif "mean of spectra" in scan_list_struct: combination = "mean of spectra" scan_info['combination'] = combination scan_info_scan_list = [] misplaced_FAIMS_value = scan.get(FAIMS_compensation_voltage.name, None) for i, scan_ in enumerate(scan_list_struct.get("scan", [])): scan_ = scan_.copy() if misplaced_FAIMS_value is not None and i == 0: scan[FAIMS_compensation_voltage.name] = misplaced_FAIMS_value struct = {} struct['start_time'] = scan_.pop('scan start time', unitfloat(0, 'minute')) struct['injection_time'] = scan_.pop("ion injection time", unitfloat(0, 'millisecond')) windows = [] for window in scan_.pop("scanWindowList", {}).get("scanWindow", []): windows.append( ScanWindow(window['scan window lower limit'], window['scan window upper limit'])) struct['window_list'] = windows scan_.pop("instrumentConfigurationRef", None) struct['traits'] = scan_ scan_info_scan_list.append(ScanEventInformation(**struct)) scan_info['scan_list'] = scan_info_scan_list return ScanAcquisitionInformation(**scan_info)
def filter_string_parser(line): """Parses instrument information from Thermo's filter string Parameters ---------- line : str The filter string associated with a scan Returns ------- dict Fields extracted from the filter string """ words = line.upper().split(" ") values = dict() i = 0 values['supplemental_activation'] = " sa " in line ms_level_info = ms_level_pat.search(line) if ms_level_info is not None: ms_level_data = ms_level_info.groupdict() level = ms_level_data.get("level") if level != "": parts = line[ms_level_info.end():].split(" ") tandem_sequence = [] for part in parts: activation_info = activation_pat.search(part) if activation_info is not None: activation_info = activation_info.groupdict() activation_event = dict() activation_event["isolation_mz"] = float(activation_info['isolation_mz']) activation_event["activation_type"] = [activation_info['activation_type']] activation_event["activation_energy"] = [float(activation_info['activation_energy'])] if part.count("@") > 1: act_events = activation_mode_pat.finditer(part) # discard the first match which we already recorded next(act_events) for match in act_events: act_type, act_energy = match.groups() act_energy = float(act_energy) activation_event["activation_type"].append(act_type) activation_event['activation_energy'].append(act_energy) tandem_sequence.append(activation_event) values['ms_level'] = int(level) values['tandem_sequence'] = tandem_sequence scan_window_info = scan_window_pat.search(line) if scan_window_info is not None: values['scan_window'] = (float(scan_window_info.group(1)), float(scan_window_info.group(2))) try: word = words[i] i += 1 analyzer_info = analyzer_pat.search(word) if analyzer_info is not None: values['analyzer'] = analyzer_info.group(0) word = words[i] i += 1 polarity_info = polarity_pat.search(word) if polarity_info is not None: polarity_sigil = polarity_info.group(0) if polarity_sigil == "+": polarity = 1 elif polarity_sigil == "-": polarity = -1 else: polarity = 0 values["polarity"] = polarity word = words[i] i += 1 if word in "PC": if word == 'P': values['peak_mode'] = 'profile' else: values['peak_mode'] = 'centroid' word = words[i] i += 1 ionization_info = ionization_pat.search(word) if ionization_info is not None: values['ionization'] = ionization_info.group(0) word = words[i] i += 1 cv_info = compensation_voltage_pat.search(word) if cv_info is not None: values['compensation_voltage'] = unitfloat(cv_info.group(1), None) word = words[i] i += 1 return values except IndexError: return values