program dies due to MolFormatException

User 55ffa2f197

10-04-2012 01:37:41

Hi, I am processing a large smiles file. Some of the smiles are illegal in format. I am using following block to read the smiles file, but the program died with following error, is there a way to ignore the bad smiles and move on until it finishes the whole file


Error I am getting:



chemaxon.formats.MolFormatException


at chemaxon.marvin.io.formats.smiles.SmilesImport.readMol0(


at chemaxon.marvin.io.formats.smiles.SmilesImport.readMol(


at chemaxon.marvin.io.formats.smiles.SmilesImport.readMol(


at chemaxon.marvin.io.MRecordImporter.readStructure(


at chemaxon.marvin.io.MRecordImporter.readMol(


at chemaxon.marvin.io.MRecordImporter.readMol(


at chemaxon.marvin.io.MRecordImporter.readMol0(



 



 



: Unmatched brackets in SMILES string *=**123(*456789SmilesImport.java:1029)SmilesImport.java:566)SmilesImport.java:526)MRecordImporter.java:764)MRecordImporter.java:709)MRecordImporter.java:678)MRecordImporter.java:593)


 



Code bloack for reading the smiles file


public void sssMapping( BufferedReader in ) {
        String line;
        String[] line2 = new String[2];
        int count = 1;
        try {
         while((line=in.readLine())!=null){
          line2 = line.split(",");
          Molecule t = MolImporter.importMol(line2[1]);
          t.aromatize();
          ms.setTarget( t );
         
          for ( Map.Entry<Integer, Molecule> entry : queryMol.entrySet() ){
           Molecule q = ( Molecule ) entry.getValue();
           int smarts_id = entry.getKey();
           ms.setQuery( q );
           int mc = ms.getMatchCount();
           if ( mc > 0 ) {
            System.out.println( line2[0] + '\t' + mc + '\t' + smarts_id );
           }
         }
          System.err.println( "process " + count );
          ++count;
         }
        }   catch (RuntimeException ioe){
        
        } catch ( MolFormatException e ) {
         e.printStackTrace();
        } catch ( IOException e ) {
         e.printStackTrace();
        } catch ( SearchException e ){
         e.printStackTrace();
        }        }



 


ChemAxon 25dcd765a3

10-04-2012 10:43:49

I would suggest to catch the exception in the import and continue reading:


try{


Molecule t = MolImporter.importMol(line2[1]);


} catch ( MolFormatException e ) {


// handle the problematic SMILES for later use eg. log the string


}

User 55ffa2f197

10-04-2012 12:25:19

Yes, it works. I was not thinking, and get a bit lasy to lump try catch at the end of the reading loop


Thanks


Dong