//提取SWATH 窗口信息 private void buildWindowsRanges() { jobInfo.log("Start getting windows", "Getting Windows"); int i = 0; List <Double> mzList = new List <Double>(); //找到第一张MS1图,如果找不到,则继续往下搜索,如果搜索了500张以上的谱图或者搜索了超过一半的谱图都没有MS1图,则认为数据格式有问题 Spectrum spectrum = spectrumList.spectrum(0); while (!spectrum.cvParamChild(CVID.MS_ms_level).value.ToString().Equals(MsLevel.MS1)) { i++; spectrum = spectrumList.spectrum(i); if (i > spectrumList.size() / 2 || i > 500) { //如果找了一半的spectrum或者找了超过500个spectrum仍然没有找到ms1,那么数据格式有问题,返回空; jobInfo.logError("Search for more than 500 spectrums and no ms1 was found. File Format Error"); throw new Exception("Search for more than 500 spectrums and no ms1 was found. File Format Error"); } } while (true) { if (spectrum.cvParamChild(CVID.MS_ms_level).value.ToString().Equals(MsLevel.MS1)) { ms1Size++; i++; spectrum = spectrumList.spectrum(i); continue; } double mz, lowerOffset, upperOffset; mz = getPrecursorIsolationWindowParams(spectrum, CVID.MS_isolation_window_target_m_z); if (mzList.Contains(mz)) { break; } mzList.Add(mz); lowerOffset = getPrecursorIsolationWindowParams(spectrum, CVID.MS_isolation_window_lower_offset); upperOffset = getPrecursorIsolationWindowParams(spectrum, CVID.MS_isolation_window_upper_offset); WindowRange range = new WindowRange(mz - lowerOffset, mz + upperOffset, mz); Hashtable features = new Hashtable(); features.Add(Features.original_width, lowerOffset + upperOffset); features.Add(Features.original_precursor_mz_start, mz - lowerOffset); features.Add(Features.original_precursor_mz_end, mz + upperOffset); range.features = FeaturesUtil.toString(features); ranges.Add(range); i++; spectrum = spectrumList.spectrum(i); } jobInfo.log("Finished Getting Windows"); }
protected AirdInfo buildBasicInfo() { AirdInfo airdInfo = new AirdInfo(); List <DomainsCore.Aird.Software> softwares = new List <DomainsCore.Aird.Software>(); List <ParentFile> parentFiles = new List <ParentFile>(); //Basic Job Info airdInfo.airdPath = jobInfo.airdFilePath; airdInfo.fileSize = fileSize; airdInfo.createDate = new DateTime(); airdInfo.type = jobInfo.type; airdInfo.totalScanCount = msd.run.spectrumList.size(); airdInfo.creator = jobInfo.jobParams.creator; airdInfo.activator = activator; airdInfo.energy = energy; airdInfo.rtUnit = rtUnit; airdInfo.msType = msType; airdInfo.polarity = polarity; //Scan index and window range info airdInfo.rangeList = ranges; //Block index airdInfo.indexList = indexList; //Instrument Info List <Instrument> instruments = new List <Instrument>(); foreach (InstrumentConfiguration ic in msd.instrumentConfigurationList) { Instrument instrument = new Instrument(); //仪器设备信息 if (jobInfo.format.Equals("WIFF")) { instrument.manufacturer = "SCIEX"; } if (jobInfo.format.Equals("RAW")) { instrument.manufacturer = "THERMO"; } //设备信息在不同的源文件格式中取法不同,有些是在instrumentConfigurationList中获取,有些是在paramGroups获取,因此出现了以下比较丑陋的写法 if (ic.cvParams.Count != 0) { foreach (CVParam cv in ic.cvParams) { featuresMap.Add(cv.name, cv.value); } instrument.model = ic.cvParams[0].name; } else if (msd.paramGroups.Count != 0) { foreach (ParamGroup pg in msd.paramGroups) { if (pg.cvParams.Count != 0) { foreach (CVParam cv in pg.cvParams) { if (!featuresMap.ContainsKey(cv.name)) { featuresMap.Add(cv.name, cv.value.ToString()); } } instrument.model = pg.cvParams[0].name; } } } foreach (Component component in ic.componentList) { switch (component.type) { case ComponentType.ComponentType_Analyzer: foreach (CVParam cv in component.cvParams) { instrument.analyzer.Add(cv.name); } break; case ComponentType.ComponentType_Source: foreach (CVParam cv in component.cvParams) { instrument.source.Add(cv.name); } break; case ComponentType.ComponentType_Detector: foreach (CVParam cv in component.cvParams) { instrument.detector.Add(cv.name); } break; } } instruments.Add(instrument); } airdInfo.instruments = instruments; //Software Info foreach (Software soft in msd.softwareList) { DomainsCore.Aird.Software software = new DomainsCore.Aird.Software(); software.name = soft.id; software.version = soft.version; softwares.Add(software); } DomainsCore.Aird.Software airdPro = new DomainsCore.Aird.Software(); airdPro.name = SoftwareInfo.NAME; airdPro.version = SoftwareInfo.VERSION; airdPro.type = "DataFormatConversion"; softwares.Add(airdPro); airdInfo.softwares = softwares; //Parent Files Info foreach (SourceFile sf in msd.fileDescription.sourceFiles) { ParentFile file = new ParentFile(); file.name = sf.name; file.location = sf.location; file.formatType = sf.id; parentFiles.Add(file); } airdInfo.parentFiles = parentFiles; //Compressor Info List <Compressor> coms = new List <Compressor>(); //mz compressor Compressor mzCompressor = new Compressor(); if (jobInfo.jobParams.useStackZDPD()) { mzCompressor.addMethod(Compressor.METHOD_STACK); mzCompressor.digit = jobInfo.jobParams.digit; } mzCompressor.addMethod(Compressor.METHOD_PFOR); mzCompressor.addMethod(Compressor.METHOD_ZLIB); mzCompressor.target = Compressor.TARGET_MZ; mzCompressor.precision = (int)(Math.Ceiling(1 / jobInfo.jobParams.mzPrecision)); coms.Add(mzCompressor); //intensity compressor Compressor intCompressor = new Compressor(); if (jobInfo.jobParams.useStackZDPD()) { intCompressor.addMethod(Compressor.METHOD_STACK); intCompressor.digit = jobInfo.jobParams.digit; } if (jobInfo.jobParams.log2) { intCompressor.addMethod(Compressor.METHOD_LOG10); intCompressor.addMethod(Compressor.METHOD_ZLIB); } else { intCompressor.addMethod(Compressor.METHOD_ZLIB); } intCompressor.target = Compressor.TARGET_INTENSITY; intCompressor.precision = 10; //intensity默认精确到小数点后1位 coms.Add(intCompressor); airdInfo.compressors = coms; airdInfo.ignoreZeroIntensityPoint = jobInfo.jobParams.ignoreZeroIntensity; //Features Info featuresMap.Add(Features.raw_id, msd.id); featuresMap.Add(Features.ignore_zero_intensity, jobInfo.jobParams.ignoreZeroIntensity); featuresMap.Add(Features.source_file_format, jobInfo.format); featuresMap.Add(Features.byte_order, ByteOrder.LITTLE_ENDIAN); featuresMap.Add(Features.aird_algorithm, jobInfo.jobParams.getAirdAlgorithmStr()); airdInfo.features = FeaturesUtil.toString(featuresMap); airdInfo.version = SoftwareInfo.VERSION; airdInfo.versionCode = SoftwareInfo.VERSION_CODE; return(airdInfo); }