Ejemplo n.º 1
0
    def xic(self,
            start_time=0,
            stop_time=None,
            start_mz=0,
            stop_mz=None,
            filter=None,
            UV=False):
        if filter:
            assert filter.strip().lower(
            ) == 'full ms', 'Thermo-style XIC filters are not supported for Agilent files.'

        # A full XIC can be performed with the TIC object that may have been
        # retrieved regardless.
        if self.ticObj and not any([start_time, stop_time, start_mz, stop_mz]):
            return list(zip(self.ticObj.XArray, self.ticObj.YArray))

        if stop_time == None:
            stop_time = 999999
        if stop_mz == None:
            stop_mz = 999999

        chromFilter = CreateObject(
            r'Agilent.MassSpectrometry.DataAnalysis.BDAChromFilter')

        chromFilter.MSLevelFilter = 0  # "All", should perhaps instead be 1 for "ms1"?
        if not UV:
            chromFilter.ChromatogramType = 7  # Extracted-Ion
        else:
            chromFilter.ChromatogramType = 4  # ExtractedWavelength
        chromFilter.SingleChromatogramForAllMasses = True

        mzRange = CreateObject(
            r'Agilent.MassSpectrometry.DataAnalysis.MinMaxRange')
        mzRange.Min = start_mz
        mzRange.Max = stop_mz
        mzRangeIR = mzRange.QueryInterface(bc.IRange)
        chromFilter.IncludeMassRanges = (mzRange, )
        # If THAT works...!

        rtRange = CreateObject(
            r'Agilent.MassSpectrometry.DataAnalysis.MinMaxRange')
        rtRange.Min = start_time
        rtRange.Max = stop_time
        rtRangeIR = rtRange.QueryInterface(bc.IRange)
        chromFilter.ScanRange = rtRangeIR

        xic = self.source.GetChromatogram(chromFilter)[0].QueryInterface(
            bda.IBDAChromData)
        return list(zip(xic.XArray, xic.YArray))