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
Exemplo n.º 2
0
 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])
Exemplo n.º 3
0
 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])
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
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