private static void PattersonTest() { string expression = "ab|aba|abba|babaa"; Patterson patterson = new Patterson(expression); bool isUniquelyDecodable = patterson.IsUniquelyDecodable(); Debug.Assert(isUniquelyDecodable); }
public void ParallelRun(string path, string outputDir, AveragineType type, ChargerType chargerType) { string file = Path.GetFileNameWithoutExtension(path) + ".mgf"; string output = Path.Combine(outputDir, file); ThermoRawSpectrumReader reader = new ThermoRawSpectrumReader(); LocalMaximaPicking picking = new LocalMaximaPicking(ms1PrcisionPPM); reader.Init(path); Dictionary <int, List <int> > scanGroup = new Dictionary <int, List <int> >(); int current = -1; int start = reader.GetFirstScan(); int end = reader.GetLastScan(); for (int i = start; i < end; i++) { if (reader.GetMSnOrder(i) == 1) { current = i; scanGroup[i] = new List <int>(); } else if (reader.GetMSnOrder(i) == 2) { scanGroup[current].Add(i); } } List <MS2Info> ms2Infos = new List <MS2Info>(); Parallel.ForEach(scanGroup, (scanPair) => { if (scanPair.Value.Count > 0) { ISpectrum ms1 = reader.GetSpectrum(scanPair.Key); foreach (int i in scanPair.Value) { double mz = reader.GetPrecursorMass(i, reader.GetMSnOrder(i)); List <IPeak> ms1Peaks = FilterPeaks(ms1.GetPeaks(), mz, searchRange); if (ms1Peaks.Count() == 0) { continue; } // insert pseudo peaks for large gap List <IPeak> peaks = new List <IPeak>(); double precision = 0.02; double last = ms1Peaks.First().GetMZ(); foreach (IPeak peak in ms1Peaks) { if (peak.GetMZ() - last > precision) { peaks.Add(new GeneralPeak(last + precision / 2, 0)); peaks.Add(new GeneralPeak(peak.GetMZ() - precision / 2, 0)); } peaks.Add(peak); last = peak.GetMZ(); } List <IPeak> majorPeaks = picking.Process(peaks); ICharger charger = new Patterson(); if (chargerType == ChargerType.Fourier) { charger = new Fourier(); } else if (chargerType == ChargerType.Combined) { charger = new PattersonFourierCombine(); } int charge = charger.Charge(peaks, mz - searchRange, mz + searchRange); // find evelope cluster EnvelopeProcess envelope = new EnvelopeProcess(); var cluster = envelope.Cluster(majorPeaks, mz, charge); if (cluster.Count == 0) { continue; } // find monopeak Averagine averagine = new Averagine(type); BrainCSharp braincs = new BrainCSharp(); MonoisotopicSearcher searcher = new MonoisotopicSearcher(averagine, braincs); MonoisotopicScore result = searcher.Search(mz, charge, cluster); double precursorMZ = result.GetMZ(); // write mgf ISpectrum ms2 = reader.GetSpectrum(i); IProcess processer = new WeightedAveraging(new LocalNeighborPicking()); ms2 = processer.Process(ms2); MS2Info ms2Info = new MS2Info { PrecursorMZ = result.GetMZ(), PrecursorCharge = charge, Scan = ms2.GetScanNum(), Retention = ms2.GetRetention(), Peaks = ms2.GetPeaks() }; lock (resultLock) { ms2Infos.Add(ms2Info); } } } readingProgress.Add(scanGroup.Count); }); ms2Infos = ms2Infos.OrderBy(m => m.Scan).ToList(); using (FileStream ostrm = new FileStream(output, FileMode.OpenOrCreate, FileAccess.Write)) { using (StreamWriter writer = new StreamWriter(ostrm)) { foreach (MS2Info ms2 in ms2Infos) { WriteMGF(writer, path + ",SCANS=" + ms2.Scan.ToString() + ",PRECURSOR=" + ms2.PrecursorMZ, ms2.PrecursorMZ, ms2.PrecursorCharge, ms2.Scan, ms2.Retention * 60, reader.GetActivation(ms2.Scan), ms2.Peaks); writer.Flush(); } } } // update progress progress.Add(); }
///<summary>Typically used when user clicks a button to a Program link. This method attempts to identify and execute the program based on the given programNum.</summary> public static void Execute(long programNum, Patient pat) { Program prog = null; for (int i = 0; i < ProgramC.Listt.Count; i++) { if (ProgramC.Listt[i].ProgramNum == programNum) { prog = ProgramC.Listt[i]; } } if (prog == null) //no match was found { MessageBox.Show("Error, program entry not found in database."); return; } if (prog.PluginDllName != "") { if (pat != null) { Plugins.LaunchToolbarButton(programNum, pat.PatNum); } return; } if (prog.ProgName == ProgramName.Apixia.ToString()) { Apixia.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Apteryx.ToString()) { Apteryx.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.BioPAK.ToString()) { BioPAK.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Camsight.ToString()) { Camsight.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.CaptureLink.ToString()) { CaptureLink.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Cerec.ToString()) { Cerec.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.CliniView.ToString()) { Cliniview.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.ClioSoft.ToString()) { ClioSoft.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DBSWin.ToString()) { DBSWin.SendData(prog, pat); return; } #if !DISABLE_WINDOWS_BRIDGES else if (prog.ProgName == ProgramName.DentalEye.ToString()) { DentalEye.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DentalStudio.ToString()) { DentalStudio.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DentX.ToString()) { DentX.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DrCeph.ToString()) { DrCeph.SendData(prog, pat); return; } #endif else if (prog.ProgName == ProgramName.DentForms.ToString()) { DentForms.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Dexis.ToString()) { Dexis.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Digora.ToString()) { Digora.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Dolphin.ToString()) { Dolphin.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Dxis.ToString()) { Dxis.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.EvaSoft.ToString()) { EvaSoft.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.EwooEZDent.ToString()) { Ewoo.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.FloridaProbe.ToString()) { FloridaProbe.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Guru.ToString()) { Guru.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.HouseCalls.ToString()) { FormHouseCalls FormHC = new FormHouseCalls(); FormHC.ProgramCur = prog; FormHC.ShowDialog(); return; } else if (prog.ProgName == ProgramName.iCat.ToString()) { ICat.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.ImageFX.ToString()) { ImageFX.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Lightyear.ToString()) { Lightyear.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.MediaDent.ToString()) { MediaDent.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.MiPACS.ToString()) { MiPACS.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Owandy.ToString()) { Owandy.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Patterson.ToString()) { Patterson.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.PerioPal.ToString()) { PerioPal.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Planmeca.ToString()) { Planmeca.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Progeny.ToString()) { Progeny.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.PT.ToString()) { PaperlessTechnology.SendData(prog, pat, false); return; } else if (prog.ProgName == ProgramName.PTupdate.ToString()) { PaperlessTechnology.SendData(prog, pat, true); return; } else if (prog.ProgName == ProgramName.RayMage.ToString()) { RayMage.SendData(prog, pat); return; } #if !DISABLE_WINDOWS_BRIDGES else if (prog.ProgName == ProgramName.Schick.ToString()) { Schick.SendData(prog, pat); return; } #endif else if (prog.ProgName == ProgramName.Sirona.ToString()) { Sirona.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Sopro.ToString()) { Sopro.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.TigerView.ToString()) { TigerView.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Trophy.ToString()) { Trophy.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.TrophyEnhanced.ToString()) { TrophyEnhanced.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Tscan.ToString()) { Tscan.SendData(prog, pat); return; } #if !DISABLE_WINDOWS_BRIDGES else if (prog.ProgName == ProgramName.Vipersoft.ToString()) { Vipersoft.SendData(prog, pat); return; } #endif else if (prog.ProgName == ProgramName.VixWin.ToString()) { VixWin.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.VixWinBase41.ToString()) { VixWinBase41.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.VixWinOld.ToString()) { VixWinOld.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.XDR.ToString()) { Dexis.SendData(prog, pat); //XDR uses the Dexis protocol return; } //all remaining programs: try{ string cmdline = prog.CommandLine; string path = Programs.GetProgramPath(prog); if (pat != null) { cmdline = cmdline.Replace("[LName]", pat.LName); cmdline = cmdline.Replace("[FName]", pat.FName); cmdline = cmdline.Replace("[PatNum]", pat.PatNum.ToString()); cmdline = cmdline.Replace("[ChartNumber]", pat.ChartNumber); cmdline = cmdline.Replace("[WirelessPhone]", pat.WirelessPhone); cmdline = cmdline.Replace("[HmPhone]", pat.HmPhone); cmdline = cmdline.Replace("[WkPhone]", pat.WkPhone); cmdline = cmdline.Replace("[LNameLetter]", pat.LName.Substring(0, 1).ToUpper()); path = path.Replace("[LName]", pat.LName); path = path.Replace("[FName]", pat.FName); path = path.Replace("[PatNum]", pat.PatNum.ToString()); path = path.Replace("[ChartNumber]", pat.ChartNumber); path = path.Replace("[WirelessPhone]", pat.WirelessPhone); path = path.Replace("[HmPhone]", pat.HmPhone); path = path.Replace("[WkPhone]", pat.WkPhone); path = path.Replace("[LNameLetter]", pat.LName.Substring(0, 1).ToUpper()); } Process.Start(path, cmdline); } catch { MessageBox.Show(prog.ProgDesc + " is not available."); return; } }
public void Test1() { string path = @"D:\Raw\ZC_20171218_N14_R2.raw"; ISpectrumReader reader = new ThermoRawSpectrumReader(); LocalMaximaPicking picking = new LocalMaximaPicking(10); reader.Init(path); Dictionary <int, int> scanMap = new Dictionary <int, int>(); int current = -1; int start = reader.GetFirstScan(); int end = reader.GetLastScan(); for (int i = start; i < end; i++) { if (reader.GetMSnOrder(i) == 1) { current = i; } else if (reader.GetMSnOrder(i) == 2) { scanMap[i] = current; } } double searchRange = 1; int scan_num = 6223; if (scanMap.ContainsKey(scan_num)) { int paranet_scan = scanMap[scan_num]; ISpectrum ms1 = reader.GetSpectrum(paranet_scan); double mz = reader.GetPrecursorMass(scan_num, reader.GetMSnOrder(scan_num)); List <IPeak> ms1Peaks = FilterPeaks(ms1.GetPeaks(), mz, searchRange); if (ms1Peaks.Count() == 0) { return; } // insert pseudo peaks for large gap List <IPeak> peaks = new List <IPeak>(); double precision = 0.02; double last = ms1Peaks.First().GetMZ(); foreach (IPeak peak in ms1Peaks) { if (peak.GetMZ() - last > precision) { peaks.Add(new GeneralPeak(last + precision / 2, 0)); peaks.Add(new GeneralPeak(peak.GetMZ() - precision / 2, 0)); } peaks.Add(peak); last = peak.GetMZ(); } List <IPeak> majorPeaks = picking.Process(peaks); //Console.WriteLine("mz,intensity"); //foreach (IPeak pk in peaks) //{ // Console.WriteLine(pk.GetMZ().ToString() + "," + pk.GetIntensity().ToString()); //} Fourier charger = new Fourier(); int charge = charger.Charge(peaks, mz - searchRange, mz + searchRange); Patterson charger2 = new Patterson(); PattersonFourierCombine charger3 = new PattersonFourierCombine(); Console.WriteLine(charge.ToString() + " " + charger2.Charge(peaks, mz - searchRange, mz + searchRange).ToString() + " " + charger3.Charge(peaks, mz - searchRange, mz + searchRange).ToString()); } }
public void Test1() { string path = @"C:\Users\Rui Zhang\Downloads\ZC_20171218_C16_R1.raw"; string fasta = @"C:\Users\Rui Zhang\Downloads\haptoglobin.fasta"; // peptides IProteinReader proteinReader = new FastaReader(); List <IProtein> proteins = proteinReader.Read(fasta); List <IProtein> decoyProteins = new List <IProtein>(); foreach (IProtein protein in proteins) { IProtein p = new BaseProtein(); p.SetSequence(Reverse(protein.Sequence())); decoyProteins.Add(p); } List <Proteases> proteases = new List <Proteases>() { Proteases.Trypsin, Proteases.GluC }; HashSet <string> peptides = new HashSet <string>(); ProteinDigest proteinDigest = new ProteinDigest(2, 5, proteases[0]); foreach (IProtein protein in decoyProteins) { peptides.UnionWith(proteinDigest.Sequences(protein.Sequence(), ProteinPTM.ContainsNGlycanSite)); } for (int i = 1; i < proteases.Count; i++) { proteinDigest.SetProtease(proteases[i]); List <string> peptidesList = peptides.ToList(); foreach (string seq in peptidesList) { peptides.UnionWith(proteinDigest.Sequences(seq, ProteinPTM.ContainsNGlycanSite)); } } Assert.True(peptides.Contains("KDNLTYVGDGETR")); // build glycan GlycanBuilder glycanBuilder = new GlycanBuilder(); glycanBuilder.Build(); // search List <SearchResult> searchResults = new List <SearchResult>(); ThermoRawSpectrumReader reader = new ThermoRawSpectrumReader(); LocalMaximaPicking picking = new LocalMaximaPicking(); IProcess process = new LocalNeighborPicking(); reader.Init(path); double searchRange = 2; ISpectrum ms1 = null; List <IPeak> majorPeaks = new List <IPeak>(); ISearch <string> oneSearcher = new BucketSearch <string>(ToleranceBy.PPM, 10); PrecursorMatch precursorMatcher = new PrecursorMatch(oneSearcher); precursorMatcher.Init(peptides.ToList(), glycanBuilder.GlycanMaps()); ISearch <string> moreSearcher = new BucketSearch <string>(ToleranceBy.Dalton, 0.01); SequenceSearch sequenceSearcher = new SequenceSearch(moreSearcher); ISearch <int> extraSearcher = new BucketSearch <int>(ToleranceBy.Dalton, 0.01); GlycanSearch glycanSearcher = new GlycanSearch(extraSearcher, glycanBuilder.GlycanMaps()); SearchAnalyzer searchAnalyzer = new SearchAnalyzer(); for (int i = reader.GetFirstScan(); i < reader.GetLastScan(); i++) { if (reader.GetMSnOrder(i) < 2) { ms1 = reader.GetSpectrum(i); majorPeaks = picking.Process(ms1.GetPeaks()); } else { double mz = reader.GetPrecursorMass(i, reader.GetMSnOrder(i)); if (ms1.GetPeaks() .Where(p => p.GetMZ() > mz - searchRange && p.GetMZ() < mz + searchRange) .Count() == 0) { continue; } Patterson charger = new Patterson(); int charge = charger.Charge(ms1.GetPeaks(), mz - searchRange, mz + searchRange); // find evelope cluster EnvelopeProcess envelope = new EnvelopeProcess(); var cluster = envelope.Cluster(majorPeaks, mz, charge); if (cluster.Count == 0) { continue; } // find monopeak Averagine averagine = new Averagine(AveragineType.GlycoPeptide); BrainCSharp braincs = new BrainCSharp(); MonoisotopicSearcher searcher = new MonoisotopicSearcher(averagine, braincs); MonoisotopicScore result = searcher.Search(mz, charge, cluster); double precursorMZ = result.GetMZ(); // search ISpectrum ms2 = reader.GetSpectrum(i); ms2 = process.Process(ms2); //precursor match var pre_results = precursorMatcher.Match(precursorMZ, charge); if (pre_results.Count == 0) { continue; } // spectrum search var peptide_results = sequenceSearcher.Search(ms2.GetPeaks(), charge, pre_results); if (peptide_results.Count == 0) { continue; } var glycan_results = glycanSearcher.Search(ms2.GetPeaks(), charge, pre_results); if (glycan_results.Count == 0) { continue; } var temp_results = searchAnalyzer.Analyze(i, ms2.GetPeaks(), peptide_results, glycan_results); break; } } }
///<summary>Typically used when user clicks a button to a Program link. This method attempts to identify and execute the program based on the given programNum.</summary> public static void Execute(long programNum, Patient pat) { Program prog = Programs.GetFirstOrDefault(x => x.ProgramNum == programNum); if (prog == null) //no match was found { MessageBox.Show("Error, program entry not found in database."); return; } if (pat != null && PrefC.GetBool(PrefName.ShowFeaturePatientClone)) { pat = Patients.GetOriginalPatientForClone(pat); } if (prog.PluginDllName != "") { if (pat == null) { Plugins.LaunchToolbarButton(programNum, 0); } else { Plugins.LaunchToolbarButton(programNum, pat.PatNum); } return; } if (ODBuild.IsWeb() && prog.ProgName.In(Programs.GetListDisabledForWeb().Select(x => x.ToString()))) { MsgBox.Show("ProgramLinks", "Bridge is not available while viewing through the web."); return; //bridge is not available for web users at this time. } if (prog.ProgName == ProgramName.ActeonImagingSuite.ToString()) { ActeonImagingSuite.SendData(prog, pat); return; } if (prog.ProgName == ProgramName.Adstra.ToString()) { Adstra.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Apixia.ToString()) { Apixia.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Apteryx.ToString()) { Apteryx.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.AudaxCeph.ToString()) { AudaxCeph.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.BencoPracticeManagement.ToString()) { Benco.SendData(prog); return; } else if (prog.ProgName == ProgramName.BioPAK.ToString()) { BioPAK.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.CADI.ToString()) { CADI.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Camsight.ToString()) { Camsight.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.CaptureLink.ToString()) { CaptureLink.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Carestream.ToString()) { Carestream.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Cerec.ToString()) { Cerec.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.CleaRay.ToString()) { CleaRay.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.CliniView.ToString()) { Cliniview.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.ClioSoft.ToString()) { ClioSoft.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DBSWin.ToString()) { DBSWin.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DemandForce.ToString()) { DemandForce.SendData(prog, pat); return; } #if !DISABLE_WINDOWS_BRIDGES else if (prog.ProgName == ProgramName.DentalEye.ToString()) { DentalEye.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DentalStudio.ToString()) { DentalStudio.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DentX.ToString()) { DentX.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DrCeph.ToString()) { DrCeph.SendData(prog, pat); return; } #endif else if (prog.ProgName == ProgramName.DentalTekSmartOfficePhone.ToString()) { DentalTek.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DentForms.ToString()) { DentForms.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Dexis.ToString()) { Dexis.SendData(prog, pat); return; } #if !DISABLE_WINDOWS_BRIDGES else if (prog.ProgName == ProgramName.DexisIntegrator.ToString()) { DexisIntegrator.SendData(prog, pat); return; } #endif else if (prog.ProgName == ProgramName.Digora.ToString()) { Digora.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Dimaxis.ToString()) { Planmeca.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Office.ToString()) { Office.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Dolphin.ToString()) { Dolphin.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DXCPatientCreditScore.ToString()) { DentalXChange.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Dxis.ToString()) { Dxis.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.EvaSoft.ToString()) { EvaSoft.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.EwooEZDent.ToString()) { Ewoo.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.FloridaProbe.ToString()) { FloridaProbe.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Guru.ToString()) { Guru.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.HandyDentist.ToString()) { HandyDentist.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.HouseCalls.ToString()) { FormHouseCalls FormHC = new FormHouseCalls(); FormHC.ProgramCur = prog; FormHC.ShowDialog(); return; } else if (prog.ProgName == ProgramName.iCat.ToString()) { ICat.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.HdxWill.ToString()) { HdxWill.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.iDixel.ToString()) { iDixel.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.ImageFX.ToString()) { ImageFX.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.iRYS.ToString()) { Irys.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Lightyear.ToString()) { Lightyear.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.NewTomNNT.ToString()) { NewTomNNT.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.MediaDent.ToString()) { MediaDent.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Midway.ToString()) { Midway.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.MiPACS.ToString()) { MiPACS.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.OrthoCAD.ToString()) { OrthoCad.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Oryx.ToString()) { Oryx.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.OrthoInsight3d.ToString()) { OrthoInsight3d.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Owandy.ToString()) { Owandy.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.PandaPerio.ToString()) { PandaPerio.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.PandaPerioAdvanced.ToString()) { PandaPerioAdvanced.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Patterson.ToString()) { Patterson.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.PDMP.ToString()) { string response = ""; if (PDMP.TrySendData(prog, pat, out response)) { FormWebBrowser formWebBrowser = new FormWebBrowser(response); formWebBrowser.Show(); } else { MessageBox.Show(response, "PDMP"); } return; } else if (prog.ProgName == ProgramName.PerioPal.ToString()) { PerioPal.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.PracticeByNumbers.ToString()) { PracticeByNumbers.ShowPage(); return; } else if (prog.ProgName == ProgramName.Progeny.ToString()) { Progeny.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.PT.ToString()) { PaperlessTechnology.SendData(prog, pat, false); return; } else if (prog.ProgName == ProgramName.PTupdate.ToString()) { PaperlessTechnology.SendData(prog, pat, true); return; } else if (prog.ProgName == ProgramName.RayMage.ToString()) { RayMage.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Romexis.ToString()) { Romexis.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Scanora.ToString()) { Scanora.SendData(prog, pat); return; } #if !DISABLE_WINDOWS_BRIDGES else if (prog.ProgName == ProgramName.Schick.ToString()) { Schick.SendData(prog, pat); return; } #endif else if (prog.ProgName == ProgramName.Sirona.ToString()) { Sirona.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.SMARTDent.ToString()) { SmartDent.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Sopro.ToString()) { Sopro.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.TigerView.ToString()) { TigerView.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Triana.ToString()) { Triana.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.TrojanExpressCollect.ToString()) { using (FormTrojanCollect FormT = new FormTrojanCollect(pat)) { FormT.ShowDialog(); } return; } else if (prog.ProgName == ProgramName.Trophy.ToString()) { Trophy.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.TrophyEnhanced.ToString()) { TrophyEnhanced.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Tscan.ToString()) { Tscan.SendData(prog, pat); return; } #if !DISABLE_WINDOWS_BRIDGES else if (prog.ProgName == ProgramName.Vipersoft.ToString()) { Vipersoft.SendData(prog, pat); return; } #endif else if (prog.ProgName == ProgramName.visOra.ToString()) { Visora.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.VistaDent.ToString()) { VistaDent.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.VixWin.ToString()) { VixWin.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.VixWinBase36.ToString()) { VixWinBase36.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.VixWinBase41.ToString()) { VixWinBase41.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.VixWinNumbered.ToString()) { VixWinNumbered.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.VixWinOld.ToString()) { VixWinOld.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.XDR.ToString()) { XDR.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.XVWeb.ToString()) { XVWeb.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.ZImage.ToString()) { ZImage.SendData(prog, pat); return; } //all remaining programs: try{ string cmdline = prog.CommandLine; string path = Programs.GetProgramPath(prog); string outputFilePath = prog.FilePath; string fileTemplate = prog.FileTemplate; if (pat != null) { cmdline = ReplaceHelper(cmdline, pat); path = ReplaceHelper(path, pat); if (!String.IsNullOrEmpty(outputFilePath) && !String.IsNullOrEmpty(fileTemplate)) { fileTemplate = ReplaceHelper(fileTemplate, pat); fileTemplate = fileTemplate.Replace("\n", "\r\n"); ODFileUtils.WriteAllTextThenStart(outputFilePath, fileTemplate, path, cmdline); //Nothing else to do so return; return; } } //We made it this far and we haven't started the program yet so start it. ODFileUtils.ProcessStart(path, cmdline); } catch (Exception e) { MessageBox.Show(prog.ProgDesc + " is not available."); return; } }
public void Test1() { string path = @"C:\Users\Rui Zhang\Downloads\ZC_20171218_C16_R1.raw"; ISpectrumReader reader = new ThermoRawSpectrumReader(); LocalMaximaPicking picking = new LocalMaximaPicking(10); reader.Init(path); Dictionary <int, List <int> > scanGroup = new Dictionary <int, List <int> >(); int current = -1; int start = reader.GetFirstScan(); int end = reader.GetLastScan(); for (int i = start; i < end; i++) { if (reader.GetMSnOrder(i) == 1) { current = i; scanGroup[i] = new List <int>(); } else if (reader.GetMSnOrder(i) == 2) { scanGroup[current].Add(i); } } double searchRange = 2; foreach (KeyValuePair <int, List <int> > ScanPair in scanGroup) { if (ScanPair.Value.Count > 0) { ISpectrum ms1 = reader.GetSpectrum(ScanPair.Key); List <IPeak> majorPeaks = picking.Process(ms1.GetPeaks()); foreach (int i in ScanPair.Value) { double mz = reader.GetPrecursorMass(i, reader.GetMSnOrder(i)); if (ms1.GetPeaks() .Where(p => p.GetMZ() > mz - searchRange && p.GetMZ() < mz + searchRange) .Count() == 0) { continue; } //Patterson charger = new Patterson(); if (ms1.GetPeaks() .Where(p => p.GetMZ() > mz - searchRange && p.GetMZ() < mz + searchRange) .Count() < 2) { continue; } Fourier charger = new Fourier(); int charge = charger.Charge(ms1.GetPeaks(), mz - searchRange, mz + searchRange); Patterson charger2 = new Patterson(); Console.WriteLine(charge.ToString() + " " + charger2.Charge(ms1.GetPeaks(), mz - searchRange, mz + searchRange).ToString()); } } } }
void GenerateTasks() { if (Path.GetExtension(msPath) == ".mgf") { MGFSpectrumReader reader = new MGFSpectrumReader(); reader.Init(msPath); Dictionary <int, MS2Spectrum> spectraData = reader.GetSpectrum(); foreach (int scan in spectraData.Keys) { MS2Spectrum spectrum = spectraData[scan]; SearchTask searchTask = new SearchTask(spectrum, spectrum.PrecursorMZ(), spectrum.PrecursorCharge()); tasks.Enqueue(searchTask); readingCounter.Add(spectraData.Count); } } else { ISpectrumReader reader = new ThermoRawSpectrumReader(); LocalMaximaPicking picking = new LocalMaximaPicking(); IProcess process = new WeightedAveraging(new LocalNeighborPicking()); reader.Init(msPath); int start = reader.GetFirstScan(); int end = reader.GetLastScan(); Dictionary <int, List <int> > scanGroup = new Dictionary <int, List <int> >(); int current = -1; for (int i = start; i < end; i++) { if (reader.GetMSnOrder(i) == 1) { current = i; scanGroup[i] = new List <int>(); } else if (reader.GetMSnOrder(i) == 2) { scanGroup[current].Add(i); } } Parallel.ForEach(scanGroup, new ParallelOptions { MaxDegreeOfParallelism = SearchingParameters.Access.ThreadNums }, (scanPair) => { if (scanPair.Value.Count > 0) { ISpectrum ms1 = reader.GetSpectrum(scanPair.Key); foreach (int i in scanPair.Value) { double mz = reader.GetPrecursorMass(i, reader.GetMSnOrder(i)); List <IPeak> ms1Peaks = FilterPeaks(ms1.GetPeaks(), mz, searchRange); if (ms1Peaks.Count() == 0) { continue; } ICharger charger = new Patterson(); int charge = charger.Charge(ms1Peaks, mz - searchRange, mz + searchRange); // insert pseudo peaks for large gap List <IPeak> peaks = new List <IPeak>(); double precision = 0.02; double last = ms1Peaks.First().GetMZ(); foreach (IPeak peak in ms1Peaks) { if (peak.GetMZ() - last > precision) { peaks.Add(new GeneralPeak(last + precision / 2, 0)); peaks.Add(new GeneralPeak(peak.GetMZ() - precision / 2, 0)); } peaks.Add(peak); last = peak.GetMZ(); } List <IPeak> majorPeaks = picking.Process(peaks); // find evelope cluster EnvelopeProcess envelope = new EnvelopeProcess(); var cluster = envelope.Cluster(majorPeaks, mz, charge); if (cluster.Count == 0) { continue; } // find monopeak Averagine averagine = new Averagine(AveragineType.GlycoPeptide); BrainCSharp braincs = new BrainCSharp(); MonoisotopicSearcher searcher = new MonoisotopicSearcher(averagine, braincs); MonoisotopicScore result = searcher.Search(mz, charge, cluster); double precursorMZ = result.GetMZ(); // search ISpectrum ms2 = reader.GetSpectrum(i); ms2 = process.Process(ms2); SearchTask searchTask = new SearchTask(ms2, precursorMZ, charge); tasks.Enqueue(searchTask); } } readingCounter.Add(scanGroup.Count); }); } }
///<summary>Typically used when user clicks a button to a Program link. This method attempts to identify and execute the program based on the given programNum.</summary> public static void Execute(long programNum, Patient pat) { Program prog = Programs.GetFirstOrDefault(x => x.ProgramNum == programNum); if (prog == null) //no match was found { MessageBox.Show("Error, program entry not found in database."); return; } if (pat != null && PrefC.GetBool(PrefName.ShowFeaturePatientClone)) { pat = Patients.GetOriginalPatientForClone(pat); } if (prog.PluginDllName != "") { if (pat == null) { Plugins.LaunchToolbarButton(programNum, 0); } else { Plugins.LaunchToolbarButton(programNum, pat.PatNum); } return; } if (prog.ProgName == ProgramName.ActeonImagingSuite.ToString()) { ActeonImagingSuite.SendData(prog, pat); return; } if (prog.ProgName == ProgramName.Adstra.ToString()) { Adstra.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Apixia.ToString()) { Apixia.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Apteryx.ToString()) { Apteryx.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.AudaxCeph.ToString()) { AudaxCeph.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.BioPAK.ToString()) { BioPAK.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.CADI.ToString()) { CADI.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Camsight.ToString()) { Camsight.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.CaptureLink.ToString()) { CaptureLink.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Carestream.ToString()) { Carestream.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Cerec.ToString()) { Cerec.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.CleaRay.ToString()) { CleaRay.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.CliniView.ToString()) { Cliniview.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.ClioSoft.ToString()) { ClioSoft.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DBSWin.ToString()) { DBSWin.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DemandForce.ToString()) { DemandForce.SendData(prog, pat); return; } #if !DISABLE_WINDOWS_BRIDGES else if (prog.ProgName == ProgramName.DentalEye.ToString()) { DentalEye.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DentalStudio.ToString()) { DentalStudio.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DentX.ToString()) { DentX.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DrCeph.ToString()) { DrCeph.SendData(prog, pat); return; } #endif else if (prog.ProgName == ProgramName.DentalTekSmartOfficePhone.ToString()) { DentalTek.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.DentForms.ToString()) { DentForms.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Dexis.ToString()) { Dexis.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Digora.ToString()) { Digora.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Dimaxis.ToString()) { Planmeca.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Office.ToString()) { Office.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Dolphin.ToString()) { Dolphin.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Dxis.ToString()) { Dxis.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.EvaSoft.ToString()) { EvaSoft.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.EwooEZDent.ToString()) { Ewoo.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.FloridaProbe.ToString()) { FloridaProbe.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Guru.ToString()) { Guru.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.HandyDentist.ToString()) { HandyDentist.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.HouseCalls.ToString()) { FormHouseCalls FormHC = new FormHouseCalls(); FormHC.ProgramCur = prog; FormHC.ShowDialog(); return; } else if (prog.ProgName == ProgramName.iCat.ToString()) { ICat.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.HdxWill.ToString()) { HdxWill.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.iDixel.ToString()) { iDixel.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.ImageFX.ToString()) { ImageFX.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.iRYS.ToString()) { Irys.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Lightyear.ToString()) { Lightyear.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.NewTomNNT.ToString()) { NewTomNNT.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.MediaDent.ToString()) { MediaDent.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.MiPACS.ToString()) { MiPACS.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.OrthoCAD.ToString()) { OrthoCad.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.OrthoInsight3d.ToString()) { OrthoInsight3d.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Owandy.ToString()) { Owandy.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.PandaPerio.ToString()) { PandaPerio.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Patterson.ToString()) { Patterson.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.PerioPal.ToString()) { PerioPal.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.PracticeByNumbers.ToString()) { PracticeByNumbers.ShowPage(); return; } else if (prog.ProgName == ProgramName.Progeny.ToString()) { Progeny.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.PT.ToString()) { PaperlessTechnology.SendData(prog, pat, false); return; } else if (prog.ProgName == ProgramName.PTupdate.ToString()) { PaperlessTechnology.SendData(prog, pat, true); return; } else if (prog.ProgName == ProgramName.RayMage.ToString()) { RayMage.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Romexis.ToString()) { Romexis.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Scanora.ToString()) { Scanora.SendData(prog, pat); return; } #if !DISABLE_WINDOWS_BRIDGES else if (prog.ProgName == ProgramName.Schick.ToString()) { Schick.SendData(prog, pat); return; } #endif else if (prog.ProgName == ProgramName.Sirona.ToString()) { Sirona.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.SMARTDent.ToString()) { SmartDent.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Sopro.ToString()) { Sopro.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.TigerView.ToString()) { TigerView.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Triana.ToString()) { Triana.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Trophy.ToString()) { Trophy.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.TrophyEnhanced.ToString()) { TrophyEnhanced.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.Tscan.ToString()) { Tscan.SendData(prog, pat); return; } #if !DISABLE_WINDOWS_BRIDGES else if (prog.ProgName == ProgramName.Vipersoft.ToString()) { Vipersoft.SendData(prog, pat); return; } #endif else if (prog.ProgName == ProgramName.visOra.ToString()) { Visora.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.VistaDent.ToString()) { VistaDent.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.VixWin.ToString()) { VixWin.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.VixWinBase36.ToString()) { VixWinBase36.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.VixWinBase41.ToString()) { VixWinBase41.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.VixWinNumbered.ToString()) { VixWinNumbered.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.VixWinOld.ToString()) { VixWinOld.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.XDR.ToString()) { Dexis.SendData(prog, pat); //XDR uses the Dexis protocol return; } else if (prog.ProgName == ProgramName.XVWeb.ToString()) { XVWeb.SendData(prog, pat); return; } else if (prog.ProgName == ProgramName.ZImage.ToString()) { ZImage.SendData(prog, pat); return; } //all remaining programs: try{ string cmdline = prog.CommandLine; string path = Programs.GetProgramPath(prog); string outputFilePath = prog.FilePath; string fileTemplate = prog.FileTemplate; if (pat != null) { cmdline = Patients.ReplacePatient(cmdline, pat); path = Patients.ReplacePatient(path, pat); if (!String.IsNullOrEmpty(outputFilePath) && !String.IsNullOrEmpty(fileTemplate)) { fileTemplate = Patients.ReplacePatient(fileTemplate, pat); fileTemplate = fileTemplate.Replace("\n", "\r\n"); File.WriteAllText(outputFilePath, fileTemplate); } } Process.Start(path, cmdline); } catch { MessageBox.Show(prog.ProgDesc + " is not available."); return; } }
public static Spectrum GetMS2Spectrum(ref ThermoRawSpectrumReader reader, int scan, AveragineType type, ChargerType chargerType, LocalMaximaPicking picking, IProcess process, ISpectrum ms1) { // scan header Spectrum spectrum = new Spectrum { id = "scan=" + scan.ToString() }; double dLowMass = 0; double dHighMass = 0; double dTIC = 0; double dBasePeakMass = 0; double dBasePeakIntensity = 0; reader.GetScanHeaderInfoForScanNum(scan, ref dLowMass, ref dHighMass, ref dTIC, ref dBasePeakMass, ref dBasePeakIntensity); SetScanHeader(spectrum, dLowMass, dHighMass, dTIC, dBasePeakMass, dBasePeakIntensity); // binary data spectrum.binaryDataArrayList = new BinaryDataArrayList(); SetBinaryDataArrayHeader(spectrum.binaryDataArrayList); spectrum.cvParam[0] = new Component.CVParam() { cvRef = "MS", accession = "MS:1000511", name = "ms level", value = "2", }; double mz = reader.GetPrecursorMass(scan, reader.GetMSnOrder(scan)); List <IPeak> ms1Peaks = FilterPeaks(ms1.GetPeaks(), mz, searchRange); if (ms1Peaks.Count() == 0) { return(null); } // insert pseudo peaks for large gaps List <IPeak> peaks = new List <IPeak>(); double precision = 0.02; double last = ms1Peaks.First().GetMZ(); foreach (IPeak peak in ms1Peaks) { if (peak.GetMZ() - last > precision) { peaks.Add(new GeneralPeak(last + precision / 2, 0)); peaks.Add(new GeneralPeak(peak.GetMZ() - precision / 2, 0)); } peaks.Add(peak); last = peak.GetMZ(); } List <IPeak> majorPeaks = picking.Process(peaks); ICharger charger = new Patterson(); if (chargerType == ChargerType.Fourier) { charger = new Fourier(); } else if (chargerType == ChargerType.Combined) { charger = new PattersonFourierCombine(); } int charge = charger.Charge(peaks, mz - searchRange, mz + searchRange); // find evelope cluster EnvelopeProcess envelope = new EnvelopeProcess(); var cluster = envelope.Cluster(majorPeaks, mz, charge); if (cluster.Count == 0) { return(null); } // find monopeak Averagine averagine = new Averagine(type); BrainCSharp braincs = new BrainCSharp(); MonoisotopicSearcher searcher = new MonoisotopicSearcher(averagine, braincs); MonoisotopicScore result = searcher.Search(mz, charge, cluster); // process spectrum ISpectrum ms2 = reader.GetSpectrum(scan); List <IPeak> ms2Peaks = process.Process(ms2).GetPeaks(); spectrum.binaryDataArrayList.binaryDataArray[0].binary = ms2Peaks.SelectMany(p => BitConverter.GetBytes(p.GetMZ())).ToArray(); spectrum.binaryDataArrayList.binaryDataArray[1].binary = ms2Peaks.SelectMany(p => BitConverter.GetBytes(p.GetIntensity())).ToArray(); spectrum.defaultArrayLength = ms2Peaks.Count.ToString(); spectrum.precursorList = new PrecursorList { count = "1", precursor = new Precursor[1] }; for (int i = 0; i < spectrum.precursorList.precursor.Length; i++) { spectrum.precursorList.precursor[i] = new Precursor(); } spectrum.precursorList.precursor[0].selectedIonList = new SelectedIonList { count = "1", selectedIon = new SelectedIon[1] }; for (int i = 0; i < spectrum.precursorList.precursor[0].selectedIonList.selectedIon.Length; i++) { spectrum.precursorList.precursor[0].selectedIonList.selectedIon[i] = new SelectedIon(); } spectrum.precursorList.precursor[0].selectedIonList.selectedIon[0].cvParam = new Component.CVParam[2]; spectrum.precursorList.precursor[0].selectedIonList.selectedIon[0].cvParam[0] = new Component.CVParam() { cvRef = "MS", accession = "MS:1000744", name = "selected ion m/z", value = result.GetMZ().ToString(), unitCvRef = "MS", unitAccession = "MS:1000040", unitName = "m/z" }; spectrum.precursorList.precursor[0].selectedIonList.selectedIon[0].cvParam[1] = new Component.CVParam() { cvRef = "MS", accession = "MS:1000041", name = "charge state", value = charge.ToString() }; spectrum.precursorList.precursor[0].activation = new Activation { cvParam = new Component.CVParam[1] }; spectrum.precursorList.precursor[0].activation.cvParam[0] = ActivationCVParam(reader.GetActivation(scan)); spectrum.binaryDataArrayList.binaryDataArray[0].encodedLength = Convert.ToBase64String(spectrum.binaryDataArrayList.binaryDataArray[0].binary).Length.ToString(); spectrum.binaryDataArrayList.binaryDataArray[1].encodedLength = Convert.ToBase64String(spectrum.binaryDataArrayList.binaryDataArray[1].binary).Length.ToString(); return(spectrum); }