Пример #1
0
 public TaskItem(Workspace workspace, DbLock dbLock)
 {
     Workspace = workspace;
     DbLock = dbLock;
 }
Пример #2
0
 public ChromatogramTask(Workspace workspace, DbLock dbLock)
     : base(workspace, dbLock)
 {
 }
Пример #3
0
 public ResultCalculatorTask(PeptideAnalysis peptideAnalysis, DbLock dbLock)
     : base(peptideAnalysis.Workspace, dbLock)
 {
     PeptideAnalysis = peptideAnalysis;
 }
Пример #4
0
        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,
                       };
        }
Пример #5
0
 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;
 }