private CharacteristicFeature getCharacteristicFeature(string sname, string fname, string dataType) { // FETCH PREVIOUSLY LOADED CHARACTERISTIC FEATURE CharacteristicFeature feature; _featureMap.TryGetValue(sname, out feature); if (feature == null) { /** * CREATING NEW CHARACTERISTIC OBJECT */ feature = new CharacteristicFeature() { ShortName = sname, FullName = fname, Domain = "BS", DataType = dataType }; _featureMap.Add(sname, feature); } return(feature); }
public async Task <bool> LoadSubjects(Dataset dataset, int fileId, bool reload) { var descriptor = SdtmSubjectDescriptor.GetSdtmSubjectDescriptor(dataset); List <SdtmRow> sdtmData = await _sdtmRepository.FindAllAsync( dm => dm.DatasetId.Equals(dataset.Id) && dm.DatafileId.Equals(fileId)); if (sdtmData.Count == 0) { return(false); } var projectId = sdtmData.First().ProjectId; var projectAccession = sdtmData.First().ProjectAccession; var activityId = sdtmData.First().ActivityId; var datafileId = sdtmData.First().DatafileId; if (reload) { _subjectRepository.DeleteMany(o => o.DatasetId == dataset.Id && o.DatafileId == datafileId); _dataContext.Save().Equals("CREATED"); } //Project related subject characteristics var scoList = _characteristicObjRepository.FindAll(s => s.ProjectId == projectId).ToList(); var scos = scoList.ToDictionary(co => co.ShortName); //Project related studies var studies = _studtRepository.FindAll(s => s.ProjectId == projectId, new List <string> { "Arms.Arm" }).ToList(); var studyMap = studies.ToDictionary(study => study.Name); //Project related arms var arms = studies.SelectMany(s => s.Arms.Select(a => a.Arm)).Distinct(); var armMap = arms.ToDictionary(arm => arm.Name); //Previously loaded subjects for this project that might be update by this load //TODO: should I add datafileId to subject as well? to be able to delete subjects for this datafile var subjects = _subjectRepository.FindAll(s => s.Study.ProjectId == projectId).ToList(); foreach (var sdtmSubject in sdtmData) { Study study; if (!studyMap.TryGetValue(sdtmSubject.StudyId, out study)) { study = new Study() { Name = sdtmSubject.StudyId, Accession = "S-" + projectAccession.Substring(2) + "-" + (studies.Count() + 1).ToString("00"), ProjectId = projectId }; studyMap.Add(study.Name, study); } Arm arm; if (!armMap.TryGetValue(sdtmSubject.QualifierSynonyms[descriptor.ArmVariable.Name], out arm)) { arm = new Arm() { Id = "P-" + projectId + "-ARM-" + sdtmSubject.Qualifiers[descriptor.ArmCodeVariable.Name], Code = sdtmSubject.Qualifiers[descriptor.ArmCodeVariable.Name], Name = sdtmSubject.QualifierSynonyms[descriptor.ArmVariable.Name] }; armMap.Add(arm.Name, arm); } if (!arm.Studies.Exists(s => s.Study.Name == study.Name)) { arm.Studies.Add(new StudyArm() { Arm = arm, Study = study }); } var subjNewFlag = false; /** * ADDING SUBJECTS */ var subject = subjects.Find(s => s.UniqueSubjectId == sdtmSubject.USubjId); if (subject == null) { subject = new HumanSubject { Id = "P-" + projectId + "-" + sdtmSubject.USubjId, UniqueSubjectId = sdtmSubject.USubjId, SubjectStudyId = sdtmSubject.SubjectId, Arm = sdtmSubject.QualifierSynonyms[descriptor.ArmVariable.Name], //Will put in characteristics for now ArmCode = sdtmSubject.Qualifiers[descriptor.ArmCodeVariable.Name], DatasetId = sdtmSubject.DatasetId, DatafileId = sdtmSubject.DatafileId, Study = study, StudyArm = arm }; subjNewFlag = true; } else { subjNewFlag = false; subject.DatasetId = dataset.Id; subject.DatafileId = sdtmSubject.DatafileId; subject.Arm = sdtmSubject.QualifierSynonyms[descriptor.ArmVariable.Name]; subject.ArmCode = sdtmSubject.Qualifiers[descriptor.ArmCodeVariable.Name]; subject.Study = study; subject.StudyArm = arm; } //SET/UPDATE SUBJECT CHARACTERISTICS if (descriptor.RefStartDate != null && sdtmSubject.Qualifiers.ContainsKey(descriptor?.RefStartDate?.Name)) { DateTime startDate; if (DateTime.TryParse(sdtmSubject.Qualifiers[descriptor.RefStartDate?.Name], out startDate)) { subject.SubjectStartDate = startDate; } } if (descriptor.RefEndDate != null && sdtmSubject.Qualifiers.ContainsKey(descriptor?.RefEndDate?.Name)) { DateTime endDate; if (DateTime.TryParse(sdtmSubject.Qualifiers[descriptor.RefEndDate.Name], out endDate)) { subject.SubjectEndDate = endDate; } } //THIS METHOD WILL DELETE ALL SUBJECT CHARACTERISTICS PREVIOUSLY LOADED //FOR THIS SUBJECT FOR THE SAME DATAFILE //((List<SubjectCharacteristic>)subject.SubjectCharacteristics) // .RemoveAll(sc=>sc.DatafileId == datafileId && sc.DatasetId == datasetId); //_subjectRepository.Update(subject); //_dataContext.Save(); /** * ADDING SUBJECT CHARACTERISTICS */ foreach (var qualifier in sdtmSubject.Qualifiers) { //THIS CHECKS THAT ONLY COLUMNS IN DATA THAT ARE PRESENT IN THE TEMPLATE ARE PARSED var dsVar = descriptor.QualifierVariables.SingleOrDefault(v => v.Name.Equals(qualifier.Key)); if (descriptor.CharacteristicProperties.Exists(c => c.Name == qualifier.Key) || descriptor.TimingVariableDefinitions.Exists(c => c.Name == qualifier.Key)) { CharacteristicFeature sco; scos.TryGetValue(qualifier.Key, out sco); if (sco == null) { /** * CREATING NEW CHARACTERISTIC OBJECT */ sco = new CharacteristicFeature() { ShortName = dsVar.Name, FullName = dsVar.Label, Domain = "DM", ProjectId = projectId, DataType = dsVar.DataType, ActivityId = activityId }; scos.Add(dsVar.Name, sco); } /** * ADDING SUBJECT CHARACTERISTIC */ subject.SubjectCharacteristics.Add(new SubjectCharacteristic() { CharacteristicFeature = sco, VerbatimValue = qualifier.Value, VerbatimName = sco.ShortName, Subject = subject, DatasetId = dataset.Id, DatafileId = datafileId }); } } if (subjNewFlag) { _subjectRepository.Insert(subject); } else { _subjectRepository.Update(subject); } } 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")); }