public async Task <bool> LoadBioSamples(Dataset dataset, int fileId, bool reload) { var descriptor = SdtmSampleDescriptor.GetSdtmSampleDescriptor(dataset); List <SdtmRow> sampleData = await _sdtmRepository.FindAllAsync( dm => dm.DatasetId.Equals(dataset.Id) && dm.DatafileId.Equals(fileId)); if (sampleData.Count == 0) { return(false); } var projectId = sampleData.First().ProjectId; var projectAccession = sampleData.First().ProjectAccession; var assayId = sampleData.First().ActivityId; var datasetId = sampleData.First().DatasetId; var datafileId = sampleData.First().DatafileId; if (projectId == 0 || assayId == 0) { return(false); } var assay = _assayRepository.Get(assayId); if (reload) { _bioSampleRepository.DeleteMany(o => o.DatasetId == datasetId && o.DataFileId == datafileId); _dataContext.Save().Equals("CREATED"); } var studyMap = new Dictionary <string, int>(); //RETRIEVE PREVIOUSLY LOADED CHARACTERISTIC FEATURES FOR THIS ASSAY THAT MIGHT HAVE BEEN LOADED BEFORE FOR OTHER STUDIES var featureList = _characteristicObjRepository.FindAll(s => s.ProjectId == projectId && s.ActivityId == assayId).ToList(); _featureMap = featureList.ToDictionary(co => co.ShortName); var subjects = _subjectRepository.FindAll(s => s.Study.ProjectId == projectId).ToList(); var sampleDayMap = new Dictionary <string, int>(); foreach (var sdtmRow in sampleData) { //RETRIEVE STUDYID FROM DB AND STORE IN MAP LOCALLY TO AVOID MAKING TOO MANY DB CALLS int studyid; if (!studyMap.TryGetValue(sdtmRow.StudyId, out studyid)) { var study = _studyRepository.FindSingle(s => s.Name == sdtmRow.StudyId && s.ProjectId == projectId); studyMap.Add(sdtmRow.StudyId, study.Id); studyid = study.Id; } /** * ADDING BIOSAMPLE */ var bioSample = new Biosample() { BiosampleStudyId = sdtmRow.SampleId, AssayId = sdtmRow.ActivityId, SubjectId = subjects.Find(s => s.UniqueSubjectId == sdtmRow.USubjId)?.Id, StudyId = studyid, CollectionStudyDay = sdtmRow.CollectionStudyDay, DatasetId = sdtmRow.DatasetId, DataFileId = sdtmRow.DatafileId, IsBaseline = sdtmRow.Qualifiers != null && descriptor.IsBaseLineVariable != null && (sdtmRow.Qualifiers.ContainsKey(descriptor.IsBaseLineVariable?.Name) && sdtmRow.Qualifiers[descriptor.IsBaseLineVariable?.Name] == "Y") }; //CHECK IF ASSAY HAS TEMOPORALDATA if (bioSample.CollectionStudyDay?.Number != null && !assay.HasTemporalData) { if (sampleDayMap.ContainsKey(bioSample.SubjectId) && sampleDayMap[bioSample.SubjectId] != bioSample.CollectionStudyDay.Number.Value && !assay.HasTemporalData) { assay.HasTemporalData = true; } else { if (!sampleDayMap.ContainsKey(bioSample.SubjectId)) { sampleDayMap.Add(bioSample.SubjectId, bioSample.CollectionStudyDay.Number.Value); } } } //ADD CHARACTERISTIC FEATURE IN BSTEST string charValue; var characValueVariable = descriptor.GetValueVariable(sdtmRow); if (characValueVariable != null && sdtmRow.ResultQualifiers.TryGetValue(characValueVariable.Name, out charValue)) { var charFeature = getCharacteristicFeature(sdtmRow.Topic, sdtmRow.TopicSynonym, characValueVariable.DataType); charFeature.ActivityId = assayId; charFeature.ProjectId = projectId; bioSample.SampleCharacteristics.Add(new SampleCharacteristic() { CharacteristicFeature = charFeature, VerbatimName = sdtmRow.TopicSynonym, VerbatimValue = charValue, DatafileId = datafileId, DatasetId = datasetId }); } //ADDING SPECIMEN TYPE TO CHARACTERISTICS string st; if (descriptor.SpecimenTypeVariable != null && sdtmRow.Qualifiers.TryGetValue(descriptor.SpecimenTypeVariable.Name, out st)) { var feature = getCharacteristicFeature(descriptor.SpecimenTypeVariable.Name, descriptor.SpecimenTypeVariable.Label, descriptor.SpecimenTypeVariable.DataType); feature.ActivityId = assayId; feature.ProjectId = projectId; bioSample.SampleCharacteristics.Add(new SampleCharacteristic() { CharacteristicFeature = feature, VerbatimName = descriptor.SpecimenTypeVariable?.Name, VerbatimValue = st, DatafileId = datafileId, DatasetId = datasetId }); } //ADD ANATOMIC REGION TO CHARACTERISTICS if (descriptor.AnatomicRegionVariable != null && sdtmRow.QualifierQualifiers.TryGetValue(descriptor.AnatomicRegionVariable.Name, out st)) { var feature = getCharacteristicFeature(descriptor.AnatomicRegionVariable.Name, descriptor.AnatomicRegionVariable.Label, descriptor.AnatomicRegionVariable.DataType); feature.ActivityId = assayId; feature.ProjectId = projectId; bioSample.SampleCharacteristics.Add(new SampleCharacteristic() { CharacteristicFeature = feature, VerbatimName = descriptor.AnatomicRegionVariable.Name, VerbatimValue = st, DatafileId = datafileId, DatasetId = datasetId }); } _bioSampleRepository.Insert(bioSample); _assayRepository.Update(assay); } return(_dataContext.Save().Equals("CREATED")); }
public bool LoadBioSamples(List <SdtmRow> sampleData, int datasetId) { var dataset = _datasetRepository.FindSingle(d => d.Id.Equals(datasetId), new List <string>() { "Variables.VariableDefinition" }); var studyMap = new Dictionary <string, int>(); var scoList = _characteristicObjRepository.FindAll(s => s.ProjectId.Equals(dataset.Activity.ProjectId)).ToList(); var scos = scoList.ToDictionary(co => co.ShortName); foreach (SdtmRow sdtmEntity in sampleData) { Study study; int studyid; if (!studyMap.TryGetValue(sdtmEntity.StudyId, out studyid)) { study = _studyRepository.FindSingle(s => s.Name.Equals(sdtmEntity.StudyId)); studyMap.Add(sdtmEntity.StudyId, study.Id); studyid = study.Id; } /** * ADDING BIOSAMPLE */ var bioSample = new Biosample() { BiosampleStudyId = sdtmEntity.SampleId, AssayId = sdtmEntity.ActivityId, SubjectId = sdtmEntity.USubjId, StudyId = studyid, //Visit = sdtmEntity.Visit, //CollectionStudyDay = sdtmEntity.CollectionStudyDay, DatasetId = sdtmEntity.DatasetId, IsBaseline = sdtmEntity.BaseLineFlag }; /** * ADDING SAMPLE CHARACTERISTICS */ foreach (var resqualifier in sdtmEntity.ResultQualifiers) { var dsVar = dataset.Variables.SingleOrDefault(v => v.VariableDefinition.Name.Equals(resqualifier.Key)); if (dsVar != null) { CharacteristicFeature sco; scos.TryGetValue(sdtmEntity.Topic, out sco); if (sco == null) { /** * CREATING NEW CHARACTERISTIC OBJECT */ sco = new CharacteristicFeature() { ShortName = sdtmEntity.Topic, //characteristicVar.VariableDefinition.Name, FullName = sdtmEntity.TopicSynonym, //characteristicVar.VariableDefinition.Label, Domain = "BS", ProjectId = dataset.Activity.ProjectId, //DataType = dsVar.VariableDefinition.DataType }; scos.Add(sdtmEntity.Topic, sco); } bioSample.SampleCharacteristics.Add(new SampleCharacteristic() { // DatasetVariable = dsVar, CharacteristicFeature = sco, VerbatimName = sdtmEntity.TopicSynonym, VerbatimValue = resqualifier.Value, //DatasetDomainCode = sdtmEntity.DomainCode }); } } foreach (var qualifier in sdtmEntity.Qualifiers) { var dsVar = dataset.Variables.SingleOrDefault(v => v.VariableDefinition.Name.Equals(qualifier.Key)); if (dsVar != null) { CharacteristicFeature sco; scos.TryGetValue(qualifier.Key, out sco); if (sco == null) { /** * CREATING NEW CHARACTERISTIC OBJECT */ sco = new CharacteristicFeature() { ShortName = dsVar.VariableDefinition.Name, FullName = dsVar.VariableDefinition.Label, Domain = "BS", ProjectId = dataset.Activity.ProjectId, //DataType = dsVar.VariableDefinition.DataType }; scos.Add(dsVar.VariableDefinition.Name, sco); } bioSample.SampleCharacteristics.Add(new SampleCharacteristic() { VerbatimName = qualifier.Key, VerbatimValue = qualifier.Value, //DatasetDomainCode = sdtmEntity.DomainCode, //DatasetVariable =dsVar, CharacteristicFeature = sco, }); } } _bioSampleRepository.Insert(bioSample); } return(_dataContext.Save().Equals("CREATED")); }