public virtual void AddField(IPopulationAnalysisField populationAnalysisField)
        {
            if (populationAnalysisField == null)
            {
                return;
            }

            if (_populationAnalysis.Has(populationAnalysisField))
            {
                return;
            }

            _populationAnalysis.Add(populationAnalysisField);
            _eventPublisher.PublishEvent(new FieldAddedToPopulationAnalysisEvent(_populationAnalysis, populationAnalysisField));
            UpdateView();
        }
        public PopulationAnalysisDerivedField LoadDerivedFieldFor(PopulationAnalysis populationAnalysis, PopulationAnalysisDataField populationAnalysisDataField)
        {
            var field = _templateTask.LoadFromTemplate <PopulationAnalysisDerivedField>(TemplateType.PopulationAnalysisField);

            if (field == null)
            {
                return(null);
            }

            //validate data type
            if (!field.CanBeUsedFor(populationAnalysisDataField.DataType))
            {
                throw new PKSimException(PKSimConstants.Error.DerivedFieldCannotBeUsedForFieldOfType(field.Name, populationAnalysisDataField.Name, populationAnalysisDataField.DataType));
            }

            //Rename referenced once loaded
            var groupingField = field as PopulationAnalysisGroupingField;

            if (groupingField != null)
            {
                if (!validateReferenceFieldInGrouping(populationAnalysisDataField, groupingField))
                {
                    return(null);
                }
            }

            //rename field if required
            if (populationAnalysis.Has(field.Name))
            {
                var name = renameFieldAfterImport(populationAnalysis, field);
                if (string.IsNullOrEmpty(name))
                {
                    return(null);
                }

                field.Name = name;
            }

            return(field);
        }