/// <summary>
        /// Convert the specified outFile.
        /// </summary>
        /// <param name='outFile'>
        /// Out file.
        /// </param>
        public void Convert(string outFile)
        {
            OutputFile = outFile;

            var path = Path.GetDirectoryName(OutputFile);
            var baseName = Path.GetFileNameWithoutExtension(OutputFile);

            if (path == null)
            {
                path = Environment.CurrentDirectory;
            }

            var sbmlFile = Path.Combine(path, baseName + "-sbml.xml");

            CCopasiRootContainer.init();
            var dataModel = CCopasiRootContainer.addDatamodel();
            dataModel.loadModel(CopasiFile);

            // write sbml model
            dataModel.exportSBML(sbmlFile, true);

            // construct SED-ML
            SedML = new SedMLInfo();
            SedML.ListOfModels.Add(new Model(
                                       "model1", sbmlFile));

            SedML.ListOfModels[0].ModelContent = File.ReadAllText(sbmlFile);

            var trajectory = (CTrajectoryTask)dataModel.getTask("Time-Course");
            if (trajectory != null)
            {
                var problem = (CTrajectoryProblem)trajectory.getProblem();
                var method = (CTrajectoryMethod)trajectory.getMethod();
                var startTime = problem.getOutputStartTime();
                var steps = (int)problem.getStepNumber();
                var initial = dataModel.getModel().getInitialTime();
                var endTime = startTime + steps * problem.getStepSize();

                var kisao = method.getSubType() == CCopasiMethod.deterministic
                                ? Algorithm.DeterministicAlgorithm
                                : Algorithm.StochasticAlgorithm;

                var simulation = new UniformTimeCourse("sim1", initial, startTime, endTime, steps)
                    {
                        Algorithm = kisao
                    };

                SedML.ListOfSimulations.Add(simulation);

                SedML.ListOfTasks.Add(new Task("task1", "sim1", "model1"));

                for (int i = 0; i < dataModel.getPlotDefinitionList().size(); i++)
                {
                    var current = dataModel.getPlotSpecification((uint)i);
                    var plot = CreatePlot(dataModel, current);

                    if (plot.ListOfCurves.Count > 0)
                        SedML.ListOfOutputs.Add(plot);
                }

                CreateDataGenerators(SedML);
            }
            SedML.FixCommonErrors();
        }
 /// <summary>
 /// Creates the data generators.
 /// </summary>
 /// <param name='info'>
 /// Info.
 /// </param>
 void CreateDataGenerators(SedMLInfo info)
 {
     info.UpdateStores();
     foreach (var item in dataIds)
     {
         info.ListOfDataGenerators.Add(new DataGenerator
         {
             Id = item,
             Name = names[item],
             ListOfVariables = new List<Variable>
                 {
                 new Variable ("v", "task1", SBMLLanguage.GetXPath (types [item], item))
             },
             MathML = "v"
         }
         );
     }
 }