Beispiel #1
0
void test5() {
  // test working from SMILES
  std::cout << " ----------> Test5 " << std::endl;
  RWMol *m1 = SmilesToMol("[Xa]CC([Xb])CC", 0, 0);
  CHECK_INVARIANT(m1, "");
  markAttachmentPoints(m1, 'X');

  RWMOL_SPTR_VECT sidechains;
  sidechains.push_back(RWMOL_SPTR(SmilesToMol("[X]OC(=O)", 0, 0)));
  sidechains.push_back(RWMOL_SPTR(SmilesToMol("[X]OC(=O)C", 0, 0)));
  sidechains.push_back(RWMOL_SPTR(SmilesToMol("[X]OC(=O)CCC", 0, 0)));
  prepareSidechains(&sidechains, 'X');

  VECT_RWMOL_SPTR_VECT allSideChains;
  allSideChains.push_back(sidechains);
  allSideChains.push_back(sidechains);

  RWMOL_SPTR_VECT library;
  library = enumerateLibrary(m1, allSideChains, false);

  CHECK_INVARIANT(library.size() == 9, "");
  CHECK_INVARIANT(library[0]->getNumAtoms() == 10, "");
  CHECK_INVARIANT(library[1]->getNumAtoms() == 11, "");
  CHECK_INVARIANT(library[2]->getNumAtoms() == 13, "");
  CHECK_INVARIANT(library[3]->getNumAtoms() == 11, "");
  CHECK_INVARIANT(library[4]->getNumAtoms() == 12, "");
  CHECK_INVARIANT(library[5]->getNumAtoms() == 14, "");
  CHECK_INVARIANT(library[6]->getNumAtoms() == 13, "");
  CHECK_INVARIANT(library[7]->getNumAtoms() == 14, "");
  CHECK_INVARIANT(library[8]->getNumAtoms() == 16, "");

  library.clear();
  std::cout << " <---------- Done " << std::endl;
}
  // ------------------------------------------------------------------
  //
  //  Reads a template and library of sidechains from input files.
  //   the template file should be a mol file and the sidechain files
  //   SD files
  //
  // ------------------------------------------------------------------
  RWMOL_SPTR_VECT enumFromFiles(const char *templateName,
			    std::vector<const char *> &sidechainNames){
    PRECONDITION(templateName,"bad template file name passed in");

    // build and mark the template molecule
    RWMol *templ = MolFileToMol(templateName,false);
    if(!templ) throw EnumException("could not construct template molecule"); 
    markAttachmentPoints(templ,'X');

    // now build and mark each set of sidechains:
    RWMOL_SPTR_VECT sidechains;
    VECT_RWMOL_SPTR_VECT allSidechains;
    for(std::vector<const char*>::const_iterator i=sidechainNames.begin();
	i!=sidechainNames.end();i++){
      sidechains = SDFileToMols(*i,false);
      if(!sidechains.size()){
	std::string err="no sidechains read from file: ";
	err += *i;
	throw EnumException(err.c_str());
      }
      prepareSidechains(&sidechains,'X');
      allSidechains.push_back(sidechains);
    }

    // enumerate the library:
    RWMOL_SPTR_VECT library=enumerateLibrary(templ,allSidechains);


    //--------------------------
    //
    // Clean up the molecules and sidechains we constructed along the
    // way. 
    //
    //--------------------------
    delete templ;
#if 0
    VECT_RWMOL_SPTR_VECT::iterator vmpvI;
    for(vmpvI=allSidechains.begin();vmpvI!=allSidechains.end();vmpvI++){
      RWMOL_SPTR_VECT::iterator mpvI;
      for(mpvI=vmpvI->begin();mpvI!=vmpvI->end();mpvI++){
	delete *mpvI;
      }
      vmpvI->clear();
    }
#endif
    allSidechains.clear();

    return library;
  }