Exemplo n.º 1
0
        public static PeptideFileAnalysis EnsurePeptideFileAnalysis(PeptideAnalysis peptideAnalysis, MsDataFile msDataFile)
        {
            var workspace = peptideAnalysis.Workspace;

            using (var session = workspace.OpenSession())
            {
                var criteria = session.CreateCriteria(typeof(DbPeptideFileAnalysis))
                               .Add(Restrictions.Eq("PeptideAnalysis", session.Load <DbPeptideAnalysis>(peptideAnalysis.Id)))
                               .Add(Restrictions.Eq("MsDataFile", session.Load <DbMsDataFile>(msDataFile.Id)));
                var dbPeptideAnalysis = (DbPeptideFileAnalysis)criteria.UniqueResult();
                if (dbPeptideAnalysis != null)
                {
                    return(GetPeptideFileAnalysis(peptideAnalysis, dbPeptideAnalysis));
                }
            }
            if (!msDataFile.HasTimes())
            {
                return(null);
            }
            using (var session = workspace.OpenWriteSession())
            {
                var dbPeptideAnalysis     = session.Load <DbPeptideAnalysis>(peptideAnalysis.Id);
                var psmTimesByDataFileId  = dbPeptideAnalysis.Peptide.PsmTimesByDataFileId(session);
                var dbPeptideFileAnalysis = CreatePeptideFileAnalysis(session, msDataFile, dbPeptideAnalysis, psmTimesByDataFileId);
                if (dbPeptideFileAnalysis == null)
                {
                    return(null);
                }

                session.BeginTransaction();
                session.Save(dbPeptideFileAnalysis);
                dbPeptideAnalysis.FileAnalysisCount++;
                session.Update(dbPeptideAnalysis);
                session.Save(new DbChangeLog(peptideAnalysis));
                session.Transaction.Commit();
                workspace.ChromatogramGenerator.SetRequeryPending();
                workspace.DatabasePoller.LoadAndMergeChanges(null);
                return(workspace.PeptideAnalyses.FindByKey(dbPeptideAnalysis.GetId())
                       .FileAnalyses.FindByKey(dbPeptideFileAnalysis.GetId()));
            }
        }