aboutsummaryrefslogblamecommitdiff
path: root/R/checkexperiment.R
blob: 941856be64a3c0ca7deb36a1505cd9424fc05cd8 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                              

                            
                                                          



                                                          
                                                                         



                                                                         
                                                


                                            








                                                               










                                                                  

                       
 




                                                       

                                                       

                                             
                                             

                            
                          


                         







                                                                          
 
 



                                                          

                                                           

                                                            
                                                                

                                                  

                                    






                                                                     
                                                        
                                                                           

                                                                
    
 













                                                  
    
                               


                                                




                                                  
                          
                                                                                      
                          



                                                
                                                                                  

     


                                                                              
 
checkexperiment <- function(id, db = "ecotox", endpoint = "%")
{
    databases <- data.frame(
        responsename=c("viability","activity","response"),
        testtype=c("celltype","enzyme","organism"),
        exptype=c("plate","plate","experiment"))
    rownames(databases) <- c("cytotox","enzymes","ecotox")

    if (!(db %in% rownames(databases))) stop("Database is not supported")

    library(RODBC) 
    channel <- odbcConnect(db,uid="cytotox",pwd="cytotox",case="tolower")

    responsename = as.character(databases[db,1])
    testtype = as.character(databases[db,2])
    exptype = as.character(databases[db,3])
        
    expquery <- paste("SELECT experimentator,substance, ",
        testtype, ",conc,unit,", responsename, ",performed,ok",
        " FROM ",db," WHERE ",exptype,"=", id, 
            sep = "")

    if (db == "ecotox") {
        expquery <- paste(expquery, " AND type LIKE '", 
                endpoint, "'", sep = "")
    }

    expdata <- sqlQuery(channel,expquery)

    if (db %in% c("cytotox","enzymes")) {
        controlquery <- paste("SELECT type,response FROM controls 
            WHERE plate=",id)
        controldata <- sqlQuery(channel,controlquery)
    }

    odbcClose(channel)

    op <- par(ask=TRUE)
    on.exit(par(op))

    if (db %in% c("cytotox","enzymes")) {
        blinds <- subset(controldata,type=="blind")
        controls <- subset(controldata,type=="control")

        numberOfBlinds <- length(blinds$response)
        meanOfBlinds <- signif(mean(blinds$response),2)
        stdOfBlinds <- signif(sd(blinds$response),2)
    } else {
        controls <- subset(expdata,conc == 0)
        expdata <- subset(expdata, conc != 0)

        numberOfBlinds <- NA
        meanOfBlinds <- NA
        stdOfBlinds <- NA
        
    }
    numberOfControls <- length(controls$response)
    if (numberOfControls > 0) {
        meanOfControls <- signif(mean(controls$response),2)
        stdOfControls <- signif(sd(controls$response),2)
        percentstdOfcontrols <-signif(stdOfControls *100/meanOfControls,2)
    } else {
        meanOfControls <- stdOfControls <- percentstdOfcontrols <- NA
    }


    if (length(expdata$experimentator) < 1) {
        stop("There is no response data for ",exptype," ",
            id," in database ",db,"\n")
    } 
    exptypestring <- paste(toupper(substring(exptype,1,1)),
        substring(exptype,2),sep="")
    expdata$experimentator <- factor(expdata$experimentator)
    expdata$type <- factor(expdata[[testtype]])
    expdata$performed <- factor(as.character(expdata$performed))
    expdata$substance <- factor(expdata$substance)
    expdata$unit <- factor(expdata$unit)
    expdata$ok <- factor(expdata$ok)
    
    cat("\n",exptypestring,id,"from database",db,":\n\n",
        "\tExperimentator(s):\t",levels(expdata$experimentator),"\n",
        "\tType(s):\t\t",levels(expdata$type),"\n",
        "\tPerformed on:\t\t",levels(expdata$performed),"\n",
        "\tSubstance(s):\t\t",levels(expdata$substance),"\n",
        "\tConcentration unit(s):\t",levels(expdata$unit),"\n",
        "\tOK:\t\t\t",levels(expdata$ok),"\n",
        "\t\tNumber \tMean \tStd. Dev. \t% Std. Dev.\n",
        "\tblind\t",numberOfBlinds,"\t",meanOfBlinds,"\t",stdOfBlinds,"\n",
        "\tcontrol\t",numberOfControls,"\t",meanOfControls,"\t",
            stdOfControls,"\t\t",percentstdOfcontrols,"\n")
    

    if (db == "ecotox") {
        boxplot(controls$response,
            names="controls",
            ylab="Response",
            ylim=c(0,max(controls$response)),
            boxwex=0.4,
            main=paste("Plate ",id))
    } else {
        boxplot(blinds$response,controls$response,
            names=c("blinds","controls"),
            ylab="Response",
            boxwex=0.4,
            main=paste("Plate ",id))
    }
    
    drdata <- expdata[c(2,4,6)]
    drdata$substance <- factor(drdata$substance)
    substances <- levels(drdata$substance)
       
    lld <- log10(min(subset(drdata,conc!=0)$conc))
    lhd <- log10(max(drdata$conc))

    plot(1,type="n",
        xlim=c(lld - 0.5, lhd + 2), 
        ylim= c(-0.1, 2), 
        xlab=paste("decadic logarithm of the concentration in ",levels(expdata$unit)),
        ylab=responsename)
    
    drdatalist <- split(drdata,drdata$substance)
    
    for (i in 1:length(drdatalist)) {
        points(log10(drdatalist[[i]]$conc),drdatalist[[i]][[responsename]],col=i);
    }

    legend("topright",substances, pch=1, col=1:length(substances), inset=0.05)
    title(main=paste(levels(expdata$experimentator),
        " - ",levels(expdata$type)))
}

Contact - Imprint