public NetAlignmentInfo DoNetAlignment(bool recollectResultsIfAlreadyPresent = false) { var needToProcessResults = (recollectResultsIfAlreadyPresent || (IqResultsForAlignment == null || IqResultsForAlignment.Count == 0)); if (needToProcessResults) { Execute(Targets); IqResultsForAlignment = FilterAlignmentResults(); } IqResultsForNetAlignment = UpdateMsgfTargetsWithDatabaseNetValues(IqResultsForAlignment); IqLogger.Log.Info("Applying Loess smoothing to NET alignment data. LoessBandwidth= " + LoessBandwidthNetAlignment); var netAlignmentDataForLoess = PrepareNetAlignmentDataForLoessSmoothing(); var iterationsForNetAlignment = 2; var loessInterpolatorForNetAlignment = new LoessInterpolator(LoessBandwidthNetAlignment, iterationsForNetAlignment); var loessSmoothedData = new XYData(); loessSmoothedData.Xvalues = netAlignmentDataForLoess.Select(p => p.Scan).ToArray(); loessSmoothedData.Yvalues = loessInterpolatorForNetAlignment.Smooth(netAlignmentDataForLoess.Select(p => p.Scan).ToArray(), netAlignmentDataForLoess.Select(p => p.NET).ToArray()); var scanToNetVals = new List <ScanNETPair>(); for (var i = 0; i < loessSmoothedData.Xvalues.Length; i++) { var xval = loessSmoothedData.Xvalues[i]; var yval = loessSmoothedData.Yvalues[i]; if (!double.IsNaN(yval)) { var scanNETPair = new ScanNETPair(xval, yval); scanToNetVals.Add(scanNETPair); } } var netAlignmentInfo = new NetAlignmentInfoBasic(Run.MinLCScan, Run.MaxLCScan); netAlignmentInfo.SetScanToNETAlignmentData(scanToNetVals); IqLogger.Log.Info("NET alignment complete using " + scanToNetVals.Count + " data points."); NetAlignmentInfo = netAlignmentInfo; return(netAlignmentInfo); }
public static bool AlignRunUsingAlignmentInfoInFiles(Run run, string alignmentDataFolder = "") { bool alignmentSuccessful; string basePath; if (string.IsNullOrEmpty(alignmentDataFolder)) { basePath = run.DataSetPath; } else { if (Directory.Exists(alignmentDataFolder)) { basePath = alignmentDataFolder; } else { throw new DirectoryNotFoundException( "Cannot align dataset. Source alignment folder does not exist. Alignment folder = " + alignmentDataFolder); } } var expectedMZAlignmentFile = Path.Combine(basePath, run.DatasetName + "_MZAlignment.txt"); var expectedNETAlignmentFile = Path.Combine(basePath, run.DatasetName + "_NETAlignment.txt"); //first will try to load the multiAlign alignment info if (File.Exists(expectedMZAlignmentFile)) { var importer = new MassAlignmentInfoFromTextImporter(expectedMZAlignmentFile); var massAlignmentData = importer.Import(); var massAlignmentInfo = new MassAlignmentInfoLcmsWarp(); massAlignmentInfo.SetMassAlignmentData(massAlignmentData); run.MassAlignmentInfo = massAlignmentInfo; } if (File.Exists(expectedNETAlignmentFile)) { var netAlignmentInfoImporter = new NETAlignmentFromTextImporter(expectedNETAlignmentFile); var scanNETList = netAlignmentInfoImporter.Import(); NetAlignmentInfo netAlignmentInfo = new NetAlignmentInfoBasic(run.MinLCScan, run.MaxLCScan); netAlignmentInfo.SetScanToNETAlignmentData(scanNETList); run.NetAlignmentInfo = netAlignmentInfo; } //if still not aligned, try to get the NET alignment from UMCs file. (this is the older way to do it) if (run.NETIsAligned) { alignmentSuccessful = true; } else { var alignmentDirInfo = new DirectoryInfo(basePath); var umcFileInfo = alignmentDirInfo.GetFiles("*_umcs.txt"); var umcFileCount = umcFileInfo.Count(); if (umcFileCount == 1) { var targetUmcFileName = umcFileInfo.First().FullName; var importer = new UMCFileImporter(targetUmcFileName, '\t'); var umcs = importer.Import(); var scannetPairs = umcs.GetScanNETLookupTable(); NetAlignmentInfo netAlignmentInfo = new NetAlignmentInfoBasic(run.MinLCScan, run.MaxLCScan); netAlignmentInfo.SetScanToNETAlignmentData(scannetPairs); run.NetAlignmentInfo = netAlignmentInfo; Console.WriteLine(run.DatasetName + " aligned."); alignmentSuccessful = true; } else if (umcFileCount > 1) { var expectedUMCName = Path.Combine(basePath, run.DatasetName + "_UMCs.txt"); if (File.Exists(expectedUMCName)) { var importer = new UMCFileImporter(expectedUMCName, '\t'); var umcs = importer.Import(); var scannetPairs = umcs.GetScanNETLookupTable(); NetAlignmentInfo netAlignmentInfo = new NetAlignmentInfoBasic(run.MinLCScan, run.MaxLCScan); netAlignmentInfo.SetScanToNETAlignmentData(scannetPairs); run.NetAlignmentInfo = netAlignmentInfo; Console.WriteLine(run.DatasetName + " NET aligned using UMC file: " + expectedUMCName); alignmentSuccessful = true; } else { throw new FileNotFoundException("Trying to align dataset: " + run.DatasetName + " but UMC file not found."); } } else { Console.WriteLine(run.DatasetName + " is NOT NET aligned."); alignmentSuccessful = false; } } //mass is still not aligned... use data in viper output file: _MassAndGANETErrors_BeforeRefinement.txt if (run.MassIsAligned == false) { var expectedViperMassAlignmentFile = Path.Combine(basePath, run.DatasetName + "_MassAndGANETErrors_BeforeRefinement.txt"); if (File.Exists(expectedViperMassAlignmentFile)) { var importer = new ViperMassCalibrationLoader(expectedViperMassAlignmentFile); var viperCalibrationData = importer.ImportMassCalibrationData(); var massAlignmentInfo = new MassAlignmentInfoLcmsWarp(); massAlignmentInfo.SetMassAlignmentData(viperCalibrationData); run.MassAlignmentInfo = massAlignmentInfo; Console.WriteLine(run.DatasetName + "- mass aligned using file: " + expectedViperMassAlignmentFile); alignmentSuccessful = true; } else { Console.WriteLine(run.DatasetName + " is NOT mass aligned"); } } return(alignmentSuccessful); }