def MZMLtoSpectrum(filename, rtOnly=False): spectra = [] import pyopenms # need to use OnDiscMSExperiment to sequentially read # spectra without loading whole file into memory experiment = pyopenms.OnDiscMSExperiment() pyopenms.IndexedMzMLFileLoader().load(filename, experiment) for i in range(experiment.getNrSpectra()): spectrum = experiment.getSpectrum(i) try: time = spectrum.getRT() except KeyError, e: time_prev = time if delta_time > 0: time += delta_time else: time += 1.0 if rtOnly: mzData, intData, spectrum = None, None, None else: (mzData, intData) = spectrum.get_peaks() if mzData.shape[0] == 0: mzData = np.empty(0, dtype='float32') intData = np.empty(0, dtype='float32') yield Spectrum(time, mzData, intData, spectrum)
def reader(path: str, on_disc: bool = True): """ Load `path` file into an OnDiskExperiment. If the file is not indexed, load the file. Parameters ---------- path : str path to read mzML file from. on_disc : bool if True doesn't load the whole file on memory. Returns ------- pyopenms.OnDiskMSExperiment or pyopenms.MSExperiment """ if on_disc: try: exp_reader = pyopenms.OnDiscMSExperiment() exp_reader.openFile(path) except RuntimeError: msg = "{} is not an indexed mzML file, switching to MSExperiment" print(msg.format(path)) exp_reader = pyopenms.MSExperiment() pyopenms.MzMLFile().load(path, exp_reader) else: exp_reader = pyopenms.MSExperiment() pyopenms.MzMLFile().load(path, exp_reader) return exp_reader
def test_readfile_content(self): e = pyopenms.OnDiscMSExperiment() pyopenms.IndexedMzMLFileLoader().load(self.filename, e) self.assertEqual(e.getNrSpectra(), 2) self.assertEqual(e.getNrChromatograms(), 1) s = e.getSpectrum(0) data_mz, data_int = s.get_peaks() self.assertEqual(len(data_mz), 19914) self.assertEqual(len(data_int), 19914) self.assertEqual(len(e.getSpectrum(1).get_peaks()[0]), 19800) self.assertEqual(len(e.getSpectrum(1).get_peaks()[1]), 19800) self.assertEqual(len(e.getChromatogram(0).get_peaks()[0]), 48) self.assertEqual(len(e.getChromatogram(0).get_peaks()[1]), 48) if False: # Currently we don't deal with exceptions properly raised = False try: e.getChromatogram(2).get_peaks() except Exception as e: raised = True self.assertTrue(raised)
def test_readfile_content(self): e = pyopenms.OnDiscMSExperiment() pyopenms.IndexedMzMLFileLoader().load(self.filename, e) self.assertEqual(e.getNrSpectra(), 2) self.assertEqual(e.getNrChromatograms(), 1) s = e.getSpectrum(0) data = s.get_peaks() self.assertEqual(len(data), 19914) self.assertEqual(len(e.getSpectrum(1).get_peaks()), 19800) self.assertEqual(len(e.getChromatogram(0).get_peaks()), 48) raised = False try: e.getChromatogram(2).get_peaks() except Exception, e: raised = True
def test_readfile(self): e = pyopenms.OnDiscMSExperiment() success = pyopenms.IndexedMzMLFileLoader().load(self.filename, e) self.assertTrue(success)
if not os.path.isfile(args.in_): print('Error:', args.in_, 'is not a file') exit(1) if not os.path.isdir(args.dir): print('Error:', args.dir, 'is not an existing directory') exit(1) if not args.out.endswith('.featureXML') or args.out.endswith( '.mzML'): # TODO: implement mzML support print('Error:', args.out, 'must be a featureXML or mzML file') exit(1) if args.bench: time_out = open(args.dir + '/benchmark.txt', 'w') start_t = time.time() exp = ms.OnDiscMSExperiment() print('Loading mzML input file.', end=' ', flush=True) if not exp.openFile(args.in_): print('Error:', args.in_, 'is not an indexed mzML file') exit(1) print('Done', flush=True) if args.bench: total_t = time.time() - start_t time_out.write(f'mzml load: {total_t}s\n') time_out.close() ff = FeatureFinderIonMobility() features = ff.run(exp, args.num_bins, args.pp_type, args.peak_radius, args.window_radius, args.pp_mode, args.ff_type, args.dir, args.filter, args.debug, args.bench)
def readMS(self, file_path): # Later: process other types of file exp = pyopenms.OnDiscMSExperiment() exp.openFile(file_path) return exp