# Creating a new Standard Output file from scratch

## Creating a simple SO with PopulationEstimate

This section will walk you through the creation of a simple SO file.

First we create the data structure with the maximum likelihood parameter estimates.

    MLE <- data.frame(POP_CL=2.23, POP_V=40, IVCL=0.4, IVV=0.3)

Next we add the additional columnType attribute.

    attributes(MLE)$columnType <- list(c("structuralParameter"), c("structuralParameter"), c("varParameter", "variance"), c("varParameter", "variance"))

This sets POP_CL and POP_V to be structural parameters and IVCL and IVV to be variability parameters on the variance scale.

The next step is to create the PopulationEstimates object.

    library(libsoc)
    popest <- so_PopulationEstimates$new()

The MLE data.frame can now be attached.

    popest$MLE <- MLE

Now we create the parent objects of the PopulationEstimates.

    est <- so_Estimation$new()
    est$PopulationEstimates <- popest
    block <- so_SOBlock$new()
    block$blkId <- "myEstimationRun"
    block$Estimation <- est
    so <- so_SO$new()
    so$add_SOBlock(block)

It is possible to add messages using a convenient method

    block$add_message("WARNING", "myTool", "name_of_warning", "This is the description", 2)

Another method adds a rawresults datafile from the tool.

    block$add_rawresults_datafile("Description", "file", "id1")

The resulting structure can be inspected

    so

    ## Reference class object of class "so_SO"
    ## Field "id":
    ## NULL
    ## Field "metadataFile":
    ## NULL
    ## Field "Description":
    ## NULL
    ## Field "PharmMLRef":
    ## NULL
    ## Field "SOBlock":
    ## [[1]]
    ## Reference class object of class "so_SOBlock"
    ## Field "blkId":
    ## [1] "myEstimationRun"
    ## Field "ToolSettings":
    ## NULL
    ## Field "RawResults":
    ## Reference class object of class "so_RawResults"
    ## Field "DataFile":
    ## [[1]]
    ## data frame with 0 columns and 0 rows
    ##
    ## Field "GraphicsFile":
    ## NULL
    ## Field ".cobj":
    ## <pointer: 0x557d3be2cc30>
    ## Field "TaskInformation":
    ## Reference class object of class "so_TaskInformation"
    ## Field "Message":
    ## [[1]]
    ## Reference class object of class "so_Message"
    ## Field "type":
    ## [1] "WARNING"
    ## Field "Toolname":
    ## [1] "myTool"
    ## Field "Name":
    ## [1] "name_of_warning"
    ## Field "Content":
    ## [1] "This is the description"
    ## Field "Severity":
    ## [1] 2
    ## Field ".cobj":
    ## <pointer: 0x557d3cd77b60>
    ##
    ## Field "OutputFilePath":
    ## NULL
    ## Field "RunTime":
    ## NULL
    ## Field "NumberChains":
    ## NULL
    ## Field "NumberIterations":
    ## NULL
    ## Field ".cobj":
    ## <pointer: 0x557d3bf964e0>
    ## Field "Estimation":
    ## Reference class object of class "so_Estimation"
    ## Field "PopulationEstimates":
    ## Reference class object of class "so_PopulationEstimates"
    ## Field "MLE":
    ##   POP_CL POP_V IVCL IVV
    ## 1   2.23    40  0.4 0.3
    ## Field "Bayesian":
    ## NULL
    ## Field "OtherMethod":
    ## NULL
    ## Field ".cobj":
    ## <pointer: 0x557d3c874d40>
    ## Field "PrecisionPopulationEstimates":
    ## NULL
    ## Field "IndividualEstimates":
    ## NULL
    ## Field "PrecisionIndividualEstimates":
    ## NULL
    ## Field "Residuals":
    ## NULL
    ## Field "Predictions":
    ## NULL
    ## Field "OFMeasures":
    ## NULL
    ## Field "TargetToolMessages":
    ## NULL
    ## Field ".cobj":
    ## <pointer: 0x557d3b6e5080>
    ## Field "Simulation":
    ## NULL
    ## Field "ModelDiagnostic":
    ## NULL
    ## Field "OptimalDesign":
    ## NULL
    ## Field ".cobj":
    ## <pointer: 0x557d3b517fa0>
    ##
    ## Field ".cobj":
    ## <pointer: 0x557d3d6dd040>

And written using so$so_write(“filename.SO.xml”)