private void validateImportedQuantities(SimulationResultsImport simulationResultsImport, IModelCoreSimulation simulation)
        {
            var allQuantities = _quantitiesRetriever.QuantitiesFrom(simulation);

            foreach (var quantityPath in simulationResultsImport.SimulationResults.AllQuantityPaths())
            {
                var quantity = allQuantities[quantityPath];
                if (quantity != null)
                {
                    continue;
                }

                simulationResultsImport.AddError(Error.CouldNotFindQuantityWithPath(quantityPath));
            }
        }
Ejemplo n.º 2
0
      public DataTable PopulationTableFrom(IndividualValuesCache population, IModelCoreSimulation simulation = null)
      {
         var dataTable = new DataTable();
         var allParameters = _entitiesInSimulationRetriever.QuantitiesFrom(simulation);
         dataTable.BeginLoadData();

         //add individual ids column
         population.IndividualIds.Each(i => dataTable.Rows.Add(dataTable.NewRow()));
         addColumnValues(dataTable, Constants.Population.INDIVIDUAL_ID_COLUMN, population.IndividualIds);


         //Create one column for the parameter path
         addCovariates(population, dataTable);

         //add advanced parameters
         foreach (var parameterValues in population.AllParameterValues)
         {
            var parameterPathWithoutUnit = allParameters.Contains(parameterValues.ParameterPath) ? parameterValues.ParameterPath : parameterValues.ParameterPath.StripUnit();
            addColumnValues(dataTable, parameterPathWithoutUnit, parameterValues.Values);
         }

         dataTable.EndLoadData();
         return dataTable;
      }
        public void UpdateSimulationPersistable(ISimulation simulation)
        {
            var allQuantities = _entitiesInSimulationRetriever.QuantitiesFrom(simulation);

            updatePersitable(allQuantities, simulation.OutputSelections);
        }
        public DataTable ResultsToDataTable(SimulationResults simulationResults, IModelCoreSimulation simulation)
        {
            //Id	Time	Output1	Output2	...	OutputN
            var dataTable = new DataTable();

            var allQuantities     = _quantityRetriever.QuantitiesFrom(simulation);
            var timeColumnName    = Constants.NameWithUnitFor(TIME, _timeDimension.BaseUnit);
            var quantityPathCache = new Cache <string, string>();

            dataTable.AddColumn <int>(INDIVIDUAL_ID);
            dataTable.AddColumn <string>(timeColumnName);

            if (simulationResults.IsNull())
            {
                return(dataTable);
            }

            var allQuantityPaths = simulationResults.AllQuantityPaths();

            foreach (var quantityPath in allQuantityPaths)
            {
                var quantity = allQuantities[quantityPath];
                if (quantity == null)
                {
                    continue;
                }

                //export results in base unit so that they can be computed automatically from matlab scripts
                quantityPathCache[quantityPath] = Constants.NameWithUnitFor(quantityPath, quantity.Dimension.BaseUnit);
                dataTable.AddColumn <string>(quantityPathCache[quantityPath]);
            }

            dataTable.BeginLoadData();
            int numberOfValues = simulationResults.Time.Length;

            foreach (var individualResults in simulationResults.OrderBy(x => x.IndividualId))
            {
                var allQuantitiesCache = new Cache <string, QuantityValues>(x => x.QuantityPath);
                allQuantitiesCache.AddRange(individualResults);

                for (int i = 0; i < numberOfValues; i++)
                {
                    var row = dataTable.NewRow();
                    row[INDIVIDUAL_ID]  = individualResults.IndividualId;
                    row[timeColumnName] = simulationResults.Time[i].ConvertedTo <string>();

                    foreach (var quantityPath in allQuantityPaths)
                    {
                        var quantity = allQuantities[quantityPath];
                        if (quantity == null)
                        {
                            continue;
                        }

                        row[quantityPathCache[quantityPath]] = allQuantitiesCache[quantityPath][i].ConvertedTo <string>();
                    }

                    dataTable.Rows.Add(row);
                }
            }

            dataTable.EndLoadData();
            return(dataTable);
        }