/// <summary> /// Initializes a new instance of the <see cref="SequenceTransformerController"/> class. /// </summary> public SequenceTransformerController() { db = new LibiadaWebEntities(); dnaSequenceRepository = new DnaSequenceRepository(db); commonSequenceRepository = new CommonSequenceRepository(db); elementRepository = new ElementRepository(db); }
/// <summary> /// Initializes a new instance of the <see cref="SequencesMattersController"/> class. /// </summary> protected SequencesMattersController() : base("Sequence upload") { Db = new LibiadaWebEntities(); dnaSequenceRepository = new DnaSequenceRepository(Db); literatureSequenceRepository = new LiteratureSequenceRepository(Db); musicSequenceRepository = new MusicSequenceRepository(Db); dataSequenceRepository = new DataSequenceRepository(Db); }
public ActionResult Index(string[] accessions, bool importGenes) { return Action(() => { var matterNames = new string[accessions.Length]; var savedMatterNames = new string[accessions.Length]; var results = new string[accessions.Length]; var statuses = new string[accessions.Length]; using (var db = new LibiadaWebEntities()) { var existingAccessions = db.DnaSequence.Select(d => d.RemoteId).Distinct().ToArray(); var dnaSequenceRepository = new DnaSequenceRepository(db); var bioSequences = NcbiHelper.GetGenBankSequences(accessions); for (int i = 0; i < accessions.Length; i++) { string accession = accessions[i]; matterNames[i] = accession; if (existingAccessions.Contains(accession) || existingAccessions.Contains(accession + ".1")) { results[i] = "Sequence already exists"; statuses[i] = "Exist"; continue; } try { var metadata = NcbiHelper.GetMetadata(bioSequences[i]); if (existingAccessions.Contains(metadata.Version.CompoundAccession)) { results[i] = "Sequence already exists"; statuses[i] = "Exist"; continue; } savedMatterNames[i] = NcbiHelper.ExtractSequenceName(metadata) + " | " + metadata.Version.CompoundAccession; matterNames[i] = "Common name=" + metadata.Source.CommonName + ", Species=" + metadata.Source.Organism.Species + ", Definition=" + metadata.Definition + ", Saved matter name=" + savedMatterNames[i]; var matter = new Matter { Name = savedMatterNames[i], Nature = Nature.Genetic, Group = GroupRepository.ExtractSequenceGroup(savedMatterNames[i]), SequenceType = SequenceTypeRepsitory.ExtractSequenceGroup(savedMatterNames[i]) }; var sequence = new CommonSequence { Matter = matter, NotationId = Aliases.Notation.Nucleotide, RemoteDbId = Aliases.RemoteDb.RemoteDbNcbi, RemoteId = metadata.Version.CompoundAccession }; dnaSequenceRepository.Create(sequence, bioSequences[i], metadata.Definition.ToLower().Contains("partial")); if (importGenes) { try { using (var subsequenceImporter = new SubsequenceImporter(metadata.Features.All, sequence.Id)) { subsequenceImporter.CreateSubsequences(); } var nonCodingCount = db.Subsequence.Count(s => s.SequenceId == sequence.Id && s.FeatureId == Aliases.Feature.NonCodingSequence); var featuresCount = db.Subsequence.Count(s => s.SequenceId == sequence.Id && s.FeatureId != Aliases.Feature.NonCodingSequence); statuses[i] = "Success"; results[i] = "Successfully imported sequence and " + featuresCount + " features and " + nonCodingCount + " non coding subsequences"; } catch (Exception exception) { results[i] = "successfully imported sequence but failed to import genes: " + exception.Message; statuses[i] = "Error"; if (exception.InnerException != null) { results[i] += " " + exception.InnerException.Message; } } } else { results[i] = "successfully imported sequence"; statuses[i] = "Success"; } } catch (Exception exception) { results[i] = "Error:" + exception.Message + (exception.InnerException == null ? string.Empty : exception.InnerException.Message); statuses[i] = "Error"; } } // removing matters for whitch adding of sequence failed var orphanMatters = db.Matter.Include(m => m.Sequence).Where(m => savedMatterNames.Contains(m.Name) && m.Sequence.Count == 0).ToArray(); if (orphanMatters.Length > 0) { db.Matter.RemoveRange(orphanMatters); db.SaveChanges(); } } return new Dictionary<string, object> { { "matterNames", matterNames }, { "results", results }, { "status", statuses } }; }); }