예제 #1
0
파일: mol_op.c 프로젝트: Richard-Hall/rdkit
Datum fmcs_mols(PG_FUNCTION_ARGS) {
  // elog(WARNING, "fmcs_mols() called. FINALFUNC");
  void *lst = PG_GETARG_POINTER(0);
  // char t[256];
  // sprintf(t,"lst=%p, fcinfo: %p, %p", lst, fcinfo->flinfo->fn_extra,
  // fcinfo->flinfo->fn_mcxt);
  // elog(WARNING, t);
  //  char *params = PG_GETARG_CSTRING(1);
  char *str = findMCS(lst, NULL);  // params);
  Assert(str != 0);
  int32 ts_size = VARHDRSZ + strlen(str);
  text *ts = (text *)palloc(ts_size);
  SET_VARSIZE(ts, ts_size);
  memcpy(VARDATA(ts), str, strlen(str));
  PG_RETURN_TEXT_P(ts);
}
예제 #2
0
 MCSResult findMCS (const std::vector<ROMOL_SPTR>& mols,
                    bool maximizeBonds,
                    double threshold,
                    unsigned timeout,
                    bool verbose,
                    bool matchValences,
                    bool ringMatchesRingOnly,
                    bool completeRingsOnly,
                    AtomComparator atomComp,
                    BondComparator bondComp){ 
     MCSParameters *ps=new MCSParameters();
     ps->MaximizeBonds=maximizeBonds;
     ps->Threshold=threshold;
     ps->Timeout=timeout;
     ps->Verbose=verbose;
     ps->AtomCompareParameters.MatchValences=matchValences;
     switch(atomComp) {
     case AtomCompareAny:
         ps->AtomTyper=MCSAtomCompareAny;
         break;
     case AtomCompareElements:
         ps->AtomTyper=MCSAtomCompareElements;
         break;
     case AtomCompareIsotopes:
         ps->AtomTyper=MCSAtomCompareIsotopes;
         break;
     }
     switch(bondComp) {
     case BondCompareAny:
         ps->BondTyper=MCSBondCompareAny;
         break;
     case BondCompareOrder:
         ps->BondTyper=MCSBondCompareOrder;
         break;
     case BondCompareOrderExact:
         ps->BondTyper=MCSBondCompareOrderExact;
         break;
     }
     ps->BondCompareParameters.RingMatchesRingOnly=ringMatchesRingOnly;
     ps->BondCompareParameters.CompleteRingsOnly=completeRingsOnly;
     MCSResult res=findMCS(mols,ps);
     delete ps;
     return res;
 }