Changeset 596

Show
Ignore:
Timestamp:
12-03-12 23:56:25 (2 years ago)
Author:
hailiang.mei@…
Message:

several fixes.

Location:
trunk/code/conceptwiki/imports/imports-chemspider
Files:
1 added
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/code/conceptwiki/imports/imports-chemspider/pom.xml

    r575 r596  
    2020                <org.openrdf.sesame.version>2.6.0</org.openrdf.sesame.version> 
    2121                <org.apache.tomcat.version>7.0.21</org.apache.tomcat.version> 
     22                <commons-dbcp.version>1.4</commons-dbcp.version> 
    2223        </properties> 
    2324         
     
    8788                <scope>runtime</scope> 
    8889                </dependency> 
     90                <!-- 
     91                        Deprecated dependency for maintaining compatibility with the old code. Should 
     92                        be replaced by the Tomcat implementation ASAP. 
     93                --> 
     94                <dependency> 
     95                        <groupId>commons-dbcp</groupId> 
     96                        <artifactId>commons-dbcp</artifactId> 
     97                        <version>${commons-dbcp.version}</version> 
     98                        <scope>runtime</scope> 
     99                </dependency> 
    89100        </dependencies> 
    90101</project> 
  • trunk/code/conceptwiki/imports/imports-chemspider/src/main/java/nl/nbic/conceptwiki/imports/chemspider/ChemSpiderImportMesh_fixingTags.java

    r595 r596  
    11package nl.nbic.conceptwiki.imports.chemspider; 
    22 
     3import java.io.BufferedReader; 
     4import java.io.FileNotFoundException; 
     5import java.io.FileReader; 
    36import java.io.FileWriter; 
    47import java.io.IOException; 
    58import java.sql.ResultSet; 
    69import java.sql.SQLException; 
     10import java.util.ArrayList; 
    711import java.util.List; 
    812import java.util.Map; 
    913import java.util.Set; 
     14import java.util.StringTokenizer; 
    1015 
    1116import javax.inject.Inject; 
     
    2429import org.slf4j.Logger; 
    2530import org.slf4j.LoggerFactory; 
     31import org.springframework.beans.factory.annotation.Value; 
    2632import org.springframework.context.ApplicationContext; 
    2733import org.springframework.context.support.ClassPathXmlApplicationContext; 
     
    4753    @Inject 
    4854    private GraphTemplate graphTemplate; 
     55    @Value("${chemspider.dupcuis}") 
     56    private String dupCuiFile; 
    4957     
    5058    /* 
     
    96104    private Set<String> superCUIs = Sets.newHashSet(); 
    97105     
    98     private void loadMeSHToMultipleCUIsMapping() { 
     106    private void loadMeSHToMultipleCUIsMapping() throws IOException { 
     107         
     108        Set<String> meshCodeMappedByMultipleChemspiderConcepts = Sets.newHashSet(); 
     109         
     110        BufferedReader reader = new BufferedReader(new FileReader(dupCuiFile)); 
     111        String line; 
     112        while ((line = reader.readLine()) != null) { 
     113                StringTokenizer tokenizer = new StringTokenizer(line.trim()); 
     114                 
     115                String meshCode = tokenizer.nextToken(); 
     116                String cs1 = tokenizer.nextToken(); 
     117                String cs2 = tokenizer.nextToken(); 
     118                 
     119                meshCodeMappedByMultipleChemspiderConcepts.add(meshCode); 
     120        } 
     121        reader.close(); 
    99122         
    100123        final SqlRowSet results = 
     
    112135            final String qcCUI = mappings.getString("cui"); 
    113136            final String dupMeSHCode = mappings.getString("code"); 
     137             
     138            if (!meshCodeMappedByMultipleChemspiderConcepts.contains(dupMeSHCode)) { 
     139                // this mesh code is unknown by chemspider import. Skip it. 
     140                continue; 
     141            } 
    114142             
    115143            // Retrieve list of CUIs mapped to this MeSH code. 
     
    132160            // end QC 
    133161             
    134             meshCUIsMapping.put(dupMeSHCode, cuis); 
    135              
    136162            int nrSuperCUIs = 0;             
    137163            String superCUI = null; 
     
    142168                } 
    143169            } 
     170                         
    144171             
    145172            if (nrSuperCUIs == 1) { 
     173                meshCUIsMapping.put(dupMeSHCode, cuis); 
    146174                meshSuperCUIMapping.put(dupMeSHCode, superCUI); 
    147175            } 
    148             else { 
    149                 // nrSuperCUIs can only be 1 
    150                 logger.error("nrSuperCUIs is {}", nrSuperCUIs); 
    151                 logger.error("when {} is mapped to {}", dupMeSHCode, cuis.toString()); 
    152                 System.exit(1); 
    153             } 
     176//            else if (nrSuperCUIs == 0) { 
     177//              // do nothing, forget about this MeSH code as there is no super type CUI 
     178//              logger.error("nrSuperCUIs is {}", nrSuperCUIs); 
     179//                logger.error("when {} is mapped to {}", dupMeSHCode, cuis.toString()); 
     180//                System.exit(1); 
     181//            } 
     182//            else { 
     183//                // nrSuperCUIs can only be 1 
     184//                logger.error("nrSuperCUIs is {}", nrSuperCUIs); 
     185//                logger.error("when {} is mapped to {}", dupMeSHCode, cuis.toString()); 
     186//                System.exit(1); 
     187//            } 
    154188        } 
     189         
     190        /** 
     191         * dup_cui.txt: 3456 mesh code 
     192         *  
     193         * 1382 of 3456 have more than 1 UMLS ID 
     194         *  
     195         * 1279 of 1382 have exactly one super type UMLS ID. Thus can be fixed. 
     196         *  
     197         */ 
    155198         
    156199        // start QC 
     
    167210        } 
    168211        // end QC 
     212        logger.info("meshCUIsMapping size {}", meshCUIsMapping.size()); 
     213        logger.info("meshSuperCUIMapping size {}", meshSuperCUIMapping.size()); 
     214         
    169215    } 
    170216     
     
    176222        FileWriter writer = new FileWriter("/tmp/chemspiderMeSHTagReplacement.txt"); 
    177223         
    178         Transaction tx = graphTemplate.getGraphDb().beginTx(); 
    179          
    180224        // We loop through all MeSH code that might be used as chemspider concepts' tag 
    181225        for (String meshCode: meshCUIsMapping.keySet()) { 
    182226             
    183227            String superCUI = meshSuperCUIMapping.get(meshCode);             
     228            logger.info("superCUI: {}", superCUI); 
    184229            Concept superUMLSConcept = conceptService.getConceptsByNotation(superCUI, SCOPE, 1, umlsBranch).get(0); 
    185230             
     
    196241                // Check if any concept using this CUI as tag needs to fixed or not. It needs to be fixed if: 
    197242                // #1: there are concepts in chemspider branch tagged to this concept. 
    198                 List<Concept> childConcepts = conceptService.getConceptsByTag(cuiConcept.getUuid(), SCOPE, Integer.MAX_VALUE);              
    199                 for (Concept oneChildConcept: childConcepts) {                     
     243                List<Concept> childConcepts = conceptService.getConceptsByTag(cuiConcept.getUuid(), SCOPE.includeTags(), Integer.MAX_VALUE); 
     244                for (Concept oneChildConcept: childConcepts) { 
     245                         
     246                        Set<Concept> toBeRemovedTags = null; 
     247                         
     248                        for (Concept c:oneChildConcept.getTags()) { 
     249                                if (c.getUuid().equals(cuiConcept.getUuid())) { 
     250                                        toBeRemovedTags = Sets.newHashSet(c); 
     251                                } 
     252                        } 
     253                         
    200254                    if (conceptService.getConcept(oneChildConcept.getUuid(), chemspiderBranch).getLabels().size() > 0) { 
    201255                        // this concept was created/updated during chemspider import. Replace the tag with superCUI. 
    202                         tagService.createTag(superCUI); 
    203                         final Set<Concept> toBeAddedTags = ImmutableSet.of(superUMLSConcept); 
    204                         final Set<Concept> toBeRemovedTags = ImmutableSet.of(cuiConcept); 
    205                         final Changeset changeset = new ChangesetImpl().withAdd(new ActionImpl().withTags(toBeAddedTags)) 
    206                                                                         .withRemove(new ActionImpl().withTags(toBeRemovedTags)); 
     256                        tagService.createTag(superUMLSConcept.getUuid()); 
     257                        final Set<Concept> toBeAddedTags = Sets.newHashSet(superUMLSConcept); 
     258                         
     259                        final Changeset changeset = new ChangesetImpl().withRemove(new ActionImpl().withTags(toBeRemovedTags)).withAdd(new ActionImpl().withTags(toBeAddedTags)); 
     260                         
     261                        Transaction tx = graphTemplate.getGraphDb().beginTx(); 
    207262                        conceptService.updateConcept(oneChildConcept.getUuid(), changeset, chemspiderBranch); 
     263                        tx.success(); 
     264                        tx.finish(); 
    208265                         
    209266                        writer.write(meshCode + "\t" + cuiCode + "\t" + superCUI + "\n"); 
     
    216273            if ((counter % chunkSize) == 0) { 
    217274                logger.info("counter: {}", counter); 
    218                 // time for a transaction. 
    219                 tx.success(); 
    220                 tx.finish(); 
    221                 tx = graphTemplate.getGraphDb().beginTx(); 
    222275            } 
    223276        }         
    224         // finish the last transaction 
    225         tx.success(); 
    226         tx.finish(); 
    227277         
    228278        writer.flush(); 
     
    235285         
    236286        final ApplicationContext ctx = new ClassPathXmlApplicationContext("/nl/nbic/conceptwiki/imports/import-chemspider-context.xml"); 
     287         
    237288        final ChemSpiderImportMesh_fixingTags chemSpiderImportMesh_fixingTags = (ChemSpiderImportMesh_fixingTags)ctx.getBean(ChemSpiderImportMesh_fixingTags.class); 
    238289