コード例 #1
0
        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"));
        }
コード例 #2
0
ファイル: BioSampleService.cs プロジェクト: etriks/ehs-server
        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"));
        }