public TaskItem(Workspace workspace, DbLock dbLock) { Workspace = workspace; DbLock = dbLock; }
public ChromatogramTask(Workspace workspace, DbLock dbLock) : base(workspace, dbLock) { }
public ResultCalculatorTask(PeptideAnalysis peptideAnalysis, DbLock dbLock) : base(peptideAnalysis.Workspace, dbLock) { PeptideAnalysis = peptideAnalysis; }
private ChromatogramTask GetTaskList() { long? msDataFileId = null; var analysisChromatograms = new List<AnalysisChromatograms>(); bool openAnalyses = false; string dataFilePath = null; if (string.IsNullOrEmpty(_workspace.GetDataDirectory())) { return null; } var workspaceCopy = _workspace.Clone(); foreach (var peptideAnalysis in workspaceCopy.PeptideAnalyses) { if (0 == peptideAnalysis.GetChromatogramRefCount() || !peptideAnalysis.ChromatogramsWereLoaded) { continue; } foreach (var peptideFileAnalysis in peptideAnalysis.FileAnalyses) { if (_workspace.IsRejected(peptideFileAnalysis.MsDataFile)) { continue; } if (!peptideFileAnalysis.PeptideAnalysis.ChromatogramsWereLoaded) { continue; } if (peptideFileAnalysis.ChromatogramSet == null || !peptideFileAnalysis.IsMzKeySetComplete(peptideFileAnalysis.ChromatogramSet.Chromatograms.Keys)) { if (msDataFileId == null) { dataFilePath = _workspace.GetDataFilePath(peptideFileAnalysis.MsDataFile.Name); if (dataFilePath == null) { continue; } msDataFileId = peptideFileAnalysis.MsDataFile.Id; openAnalyses = true; } else { if (!Equals(msDataFileId, peptideFileAnalysis.MsDataFile.Id)) { continue; } } analysisChromatograms.Add(new AnalysisChromatograms(peptideFileAnalysis)); } } } int missingChromatograms = 0; if (!openAnalyses) { if (!_workspace.SavedWorkspaceChange.HasChromatogramMassChange) { ICollection<long> lockedMsDataFileIds; using (_session = _workspace.OpenSession()) { lockedMsDataFileIds = ListLockedMsDataFileIds(_session); } foreach (var peptideAnalysis in workspaceCopy.PeptideAnalyses) { foreach (var fileAnalysis in peptideAnalysis.FileAnalyses) { if (fileAnalysis.ChromatogramSetId != null) { continue; } missingChromatograms++; if (lockedMsDataFileIds.Contains(fileAnalysis.MsDataFile.Id)) { continue; } if (_workspace.IsRejected(fileAnalysis.MsDataFile)) { continue; } if (null == msDataFileId) { msDataFileId = fileAnalysis.MsDataFile.Id; } else { if (msDataFileId != fileAnalysis.MsDataFile.Id) { continue; } } analysisChromatograms.Add(new AnalysisChromatograms(fileAnalysis)); } } } } _missingChromatograms = missingChromatograms; if (!msDataFileId.HasValue) { return null; } DbLock dbLock = null; var msDataFile = _workspace.MsDataFiles.FindByKey(msDataFileId.Value); if (!openAnalyses) { dbLock = new DbLock { InstanceIdGuid = _workspace.InstanceId, MsDataFileId = msDataFileId, LockType = LockType.chromatograms }; } return new ChromatogramTask(workspaceCopy, dbLock) { AnalysisChromatograms = analysisChromatograms, MsDataFile = msDataFile, DataFilePath = dataFilePath, }; }
private ResultCalculatorTask GetNextPeptideAnalysis() { if (!_workspace.IsLoaded) { StatusMessage = "Waiting for workspace to load"; return null; } StatusMessage = "Polling for database changes"; _workspace.DatabasePoller.MergeChangesNow(); StatusMessage = "Looking for next peptide"; var workspaceClone = _workspace.Clone(); var peptideAnalyses = workspaceClone.PeptideAnalyses; var openPeptideAnalysisIds = new HashSet<long>(); foreach (var peptideAnalysis in peptideAnalyses.Where(pa=>0 != pa.GetChromatogramRefCount())) { openPeptideAnalysisIds.Add(peptideAnalysis.Id); if (peptideAnalysis.FileAnalyses.Count == 0) { continue; } foreach (var peptideFileAnalysis in peptideAnalysis.FileAnalyses) { if (peptideFileAnalysis.ValidationStatus == ValidationStatus.reject) { continue; } if (peptideFileAnalysis.ChromatogramSet == null) { continue; } if (peptideFileAnalysis.CalculatedPeaks != null) { continue; } return new ResultCalculatorTask(peptideAnalysis, null); } } if (workspaceClone.SavedWorkspaceChange.HasTurnoverChange) { return null; } _pendingAnalysisCount = peptideAnalyses.Count( pa => 0 == pa.GetChromatogramRefCount() && pa.FileAnalyses.Any(fa => !fa.PeakData.IsCalculated && fa.ChromatogramSetId.HasValue)); var lockedIds = ListLockedAnalyses(); foreach (var peptideAnalysis in peptideAnalyses) { if (lockedIds.Contains(peptideAnalysis.Id)) { continue; } if (peptideAnalysis.GetChromatogramRefCount() > 0) { continue; } var uncalculatedCount = peptideAnalysis.FileAnalyses.Count(entry => !entry.PeakData.IsCalculated && entry.ChromatogramSetId.HasValue); if (uncalculatedCount > 0) { peptideAnalysis.IncChromatogramRefCount(); var workspaceData = _workspace.DatabasePoller.LoadChanges(workspaceClone.Data, new Dictionary<long, bool> { {peptideAnalysis.Id, true} }); workspaceClone.Merge(workspaceData); if (!IsRunning()) { return null; } DbLock dbLock; using (_session = _workspace.OpenWriteSession()) { try { _session.BeginTransaction(); dbLock = new DbLock { InstanceIdGuid = _workspace.InstanceId, LockType = LockType.results, PeptideAnalysisId = peptideAnalysis.Id }; _session.Save(dbLock); _session.Transaction.Commit(); } catch (HibernateException hibernateException) { throw new LockException("Could not insert lock", hibernateException); } } return new ResultCalculatorTask(peptideAnalysis, dbLock); } } return null; }