Exemplo n.º 1
0
        /// <summary>
        /// Parse all SNOMED realtionships and create applicadia attributes for each one.
        /// </summary>
        void CreateRelationships()
        {
            // We cant resize SnomedQueryConcept[]'s efficiently, so map all the parent and
            // children to lists and set the objects IsAXXX to the list.ToArray() when
            // we have collated all concepts.
            ConcurrentDictionary <Int64, List <SnomedQueryConcept> > parentMap =
                new ConcurrentDictionary <long, List <SnomedQueryConcept> >();
            ConcurrentDictionary <Int64, List <SnomedQueryConcept> > childMap =
                new ConcurrentDictionary <long, List <SnomedQueryConcept> >();

            foreach (KeyValuePair <Int64, RF2RelationshipGroup> kvp in this.rf2Parser.RelationshipGroups)
            {
                RF2RelationshipGroup rf2RelationshipGroup = kvp.Value;
                this.CreateRelationship(rf2RelationshipGroup, parentMap, childMap);
            }

            // Copy all parent lists to parent array in each concept.
            foreach (KeyValuePair <Int64, List <SnomedQueryConcept> > kvp in parentMap)
            {
                SnomedQueryConcept item = this.FindConcept(kvp.Key);
                item.IsAParents = kvp.Value.ToArray();
            }


            // Copy all child lists to child array in each concept.
            foreach (KeyValuePair <Int64, List <SnomedQueryConcept> > kvp in childMap)
            {
                SnomedQueryConcept item = this.FindConcept(kvp.Key);
                item.IsAChildren = kvp.Value.ToArray();
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// Iterate over all rf2Parser concepts and create correct GcSnomedConcept derived class for each element.
 /// </summary>
 void CreateConceptRecords()
 {
     foreach (KeyValuePair <Int64, RF2ConceptGroup> kvp in this.rf2Parser.ConceptGroups)
     {
         RF2ConceptGroup    rf2ConceptGroup = kvp.Value;
         SnomedQueryConcept concept         = this.CreateConceptRecord(rf2ConceptGroup);
         if (concept != null)
         {
             this.modelManager.Add(concept);
         }
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// Add related comcept to map.
        /// </summary>
        /// <param name="map"></param>
        /// <param name="concept"></param>
        /// <param name="relatedConcept"></param>
        void Add(ConcurrentDictionary <Int64, List <SnomedQueryConcept> > map,
                 SnomedQueryConcept concept,
                 SnomedQueryConcept relatedConcept)
        {
            List <SnomedQueryConcept> items;

            if (map.TryGetValue(concept.ConceptId, out items) == false)
            {
                items = new List <SnomedQueryConcept>();
                if (map.TryAdd(concept.ConceptId, items) == false)
                {
                    throw new ApplicationException("Error adding item to dictionary");
                }
            }
            items.Add(relatedConcept);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Iterate over all rf2Parser concepts and create correct GcSnomedConcept derived class for each element.
        /// </summary>
        SnomedQueryConcept CreateConceptRecord(RF2ConceptGroup rf2ConceptGroup)
        {
            RF2Concept rf2Concept = rf2ConceptGroup.Active;

            if (rf2Concept == null)
            {
                return(null);
            }

            RF2ConceptGroup module           = this.rf2Parser.GetConceptGroup(rf2Concept.ModuleId);
            RF2ConceptGroup definitionStatus = this.rf2Parser.GetConceptGroup(rf2Concept.DefinitionStatusId);

            List <String> synonyms = new List <string>();

            foreach (RF2DescriptionGroup descriptionGroup in rf2ConceptGroup.DescriptionGroups)
            {
                RF2Description description = descriptionGroup.GetActiveEnglishDescription();
                switch (description.TypeId)
                {
                case RF2Parser.SynonymTypeId:
                    synonyms.Add(description.Term);
                    break;

                case RF2Parser.FullySpecifiedNameConceptId:
                    break;

                default:
                    Console.WriteLine($"Unimplemented description type {this.rf2Parser.GetConceptGroup(description.TypeId).GetFullySpecifiedName()}");
                    break;
                }
            }

            SnomedQueryConcept concept = new SnomedQueryConcept(
                rf2Concept.Id,                              // conceptId,
                rf2ConceptGroup.GetFullySpecifiedName(),    // conceptFullyQualifiedName,
                synonyms.ToArray(),                         // conceptSynonymns,
                module.GetFullySpecifiedName(),             // String conceptModule,
                definitionStatus.GetFullySpecifiedName(),   // String conceptDefinitionStatus,
                rf2Concept.EffectiveTime                    // conceptEffectiveTime
                );

            return(concept);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Parse all SNOMED realtionships and create applicadia attributes for each one.
        /// </summary>
        void CreateRelationship(RF2RelationshipGroup rf2RelationshipGroup,
                                ConcurrentDictionary <Int64, List <SnomedQueryConcept> > parentMap,
                                ConcurrentDictionary <Int64, List <SnomedQueryConcept> > childMap)
        {
            RF2Relationship rf2Relationship = rf2RelationshipGroup.Active;

            if (rf2Relationship == null)
            {
                return;
            }

            switch (rf2Relationship.TypeId)
            {
            case RF2Parser.IsAConceptId:
                SnomedQueryConcept source = this.FindConcept(rf2Relationship.Source.Id);
                SnomedQueryConcept dest   = this.FindConcept(rf2Relationship.Destination.Id);
                this.Add(parentMap, source, dest);
                this.Add(childMap, dest, source);
                break;
            }
        }