## Introduction to using the elastic net QSPR model for prediction of
## log(ELF/plasma ratio) of anti-infectives

## Clean up workspace
rm(list=ls())

## set correct working directory, change this as needed
setwd("p:/manuscripts/lungQSAR2/data/")

## first, load necessary packages
library(caret)
library(elasticnet)
library(rcdk)

## load the model and data normalization/preprocessing objects here
load("SUPPLEMENTAL_finalELF_ENET_model.Rdata")

## Define your SMILES structure (for example, retrieve from Pubchem)
## Here we use the SMILES of amoxycillin as an example.
smiles <- data.frame(name="Amoxycillin",
                     smiles="CC1(C(N2C(S1)C(C2=O)NC(=O)C(C3=CC=C(C=C3)O)N)C(=O)O)C")
## get the descriptors
AB <- parse.smiles(as.character(smiles$smiles))
## Descriptor categories to generate
dc <- get.desc.categories() 
## Save descriptors per category
dConstitutional <- get.desc.names(dc[4])
dElectric <- get.desc.names(dc[1])
dTopological <- get.desc.names(dc[2])
dGeometrical <- get.desc.names(dc[3])
dHybrid <- get.desc.names(dc[5])
## Generate descriptors based on SMILES
## Exclude descriptors that give errors
descC <- eval.desc(AB, dConstitutional, verbose=T)
descE <- eval.desc(AB, dElectric, verbose=T)
descT <- eval.desc(AB, dTopological, verbose=T)
descG <- eval.desc(AB, dGeometrical, verbose=T)
descH <- eval.desc(AB, dHybrid, verbose=T)
##merge descriptors into one dataframe
desc <- cbind(Name = smiles$name,  descC, descE, descT, descG, descH)
##Filter the descriptors that were not used in the final model
##Don't touch this part!
removed.descriptors <- names(desc)[remcols0]
desc <- desc[,-remcols0]
removed.descriptors <- c(removed.descriptors,names(desc)[(remcol-4)])
desc <- desc[,-(remcol-4)] 
##Preprocess the descriptors
desc[,-1] <- predict(preprocvalues,desc[,-1])

## Make the prediction. This is the number you want
pred <- predict(fit, desc[,-1])
message(paste("The log(EPR) is ",pred,
              " and the predicted ELF-plasma ratio is ",exp(pred),".",sep=""))


## #Do you want to see, which predictor columns were omitted? If yes, uncomment the line below.
# removed.descriptors
