PageRenderTime 142ms CodeModel.GetById 130ms RepoModel.GetById 0ms app.codeStats 0ms

/rcdk/R/matching.R

http://github.com/rajarshi/cdkr
R | 37 lines | 26 code | 4 blank | 7 comment | 6 complexity | aa3f35954deec551ee32d7d8665063de MD5 | raw file
  1. #' matches
  2. #'
  3. #' @param query Required. A SMARTSQuery
  4. #' @param target Required. The molecule to query. Should be a `jobjRef` representing an `IAtomContainer`
  5. #' @param return.matches Optional. Default \code{FALSE}
  6. #' @export
  7. matches <- function(query, target, return.matches=FALSE) {
  8. if (!is.list(target)) target <- list(target)
  9. if (!all(unlist(lapply(target, class)) == 'jobjRef'))
  10. stop("targets must be a list of IAtomContainer objects or a single IAtomContainer object")
  11. dcob <- get.chem.object.builder()
  12. ## make an SQT
  13. sqt <- new(J("org/openscience/cdk/smiles/smarts/SMARTSQueryTool"), query, dcob)
  14. matchings <- unlist(lapply(target, function(z) sqt$matches(z)))
  15. matchings <- lapply(target, function(z) {
  16. status <- sqt$matches(z)
  17. if (status) {
  18. mappings <- sqt$getUniqueMatchingAtoms()
  19. mappings <- lapply(1:mappings$size(), function(i) {
  20. atomIndices <- mappings$get(as.integer(i-1))
  21. atomIndinces <- .javalist.to.rlist(atomIndices)
  22. sapply(atomIndices, .jsimplify)
  23. })
  24. } else{
  25. mappings <- NULL
  26. }
  27. return(list(match=status, mapping=mappings))
  28. })
  29. if (!return.matches) return(unlist(lapply(matchings, "[", 1)))
  30. else {
  31. return(matchings)
  32. }
  33. }