コード例 #1
0
ファイル: Converter710To720.cs プロジェクト: VKEkbote/PK-Sim
        private void convertIndividual(Individual individual)
        {
            if (individual == null)
            {
                return;
            }


            _individualCalculationMethodsUpdater.AddMissingCalculationMethodsTo(individual);

            if (!individual.IsHuman)
            {
                return;
            }

            if (individual.Organism.Parameter(CoreConstants.Parameter.BSA) != null)
            {
                return;
            }

            var defaultHuman = _defaultIndividualRetriever.DefaultHuman();
            var bsa          = defaultHuman.Organism.Parameter(CoreConstants.Parameter.BSA);

            individual.Organism.Add(_cloner.Clone(bsa));
        }
コード例 #2
0
        private void updateFractionOfBloodForSampling(Individual individual)
        {
            var defaultHuman = _defaultIndividualRetriever.DefaultHuman();
            var oneStandardFractionOfBloodParameter = defaultHuman.GetAllChildren <IParameter>(x => x.IsNamed(FRACTION_OF_BLOOD_FOR_SAMPLING)).First();
            var allFractionOfBloodParameters        = individual.GetAllChildren <IParameter>(x => x.IsNamed(FRACTION_OF_BLOOD_FOR_SAMPLING));

            allFractionOfBloodParameters.Each(x => { x.Info.UpdatePropertiesFrom(oneStandardFractionOfBloodParameter.Info); });
        }
コード例 #3
0
        public void Visit(Individual individual)
        {
            _individualCalculationMethodsUpdater.AddMissingCalculationMethodsTo(individual);

            performCommonConversion(individual);
            Visit(individual.OriginData);

            foreach (var transporter in individual.AllMolecules <IndividualTransporter>().SelectMany(x => x.AllExpressionsContainers()))
            {
                var oldProcessNames = transporter.ProcessNames.ToList();
                transporter.ClearProcessNames();
                foreach (var processName in oldProcessNames)
                {
                    transporter.AddProcessName(processName.Replace("_MM", ""));
                }
            }

            //change container type for molecules
            foreach (var molecule in individual.AllMolecules())
            {
                molecule.ContainerType = ContainerType.Molecule;
                updateOntogeny(molecule);
            }

            //special parameters that need conversion by hand
            convertIndividualParameters(individual.Organism);
            convertIndividualForTwoPore(individual);

            var human = _defaultIndividualRetriever.DefaultHuman();

            individual.Organism.Add(clone(human.Organism, CoreConstants.Parameters.ONTOGENY_FACTOR_ALBUMIN));
            individual.Organism.Add(clone(human.Organism, CoreConstants.Parameters.ONTOGENY_FACTOR_AGP));
            individual.Organism.Add(clone(human.Organism, CoreConstants.Parameters.PLASMA_PROTEIN_SCALE_FACTOR));


            if (!individual.IsHuman)
            {
                individual.OriginData.AddCalculationMethod(_calculationMethodRepository.FindByName("MucosaVolume_Animals"));
            }
            else
            {
                individual.OriginData.AddCalculationMethod(_calculationMethodRepository.FindByName("MucosaVolume_Human"));
                individual.OriginData.GestationalAge     = CoreConstants.NOT_PRETERM_GESTATIONAL_AGE_IN_WEEKS;
                individual.OriginData.GestationalAgeUnit = CoreConstants.Units.Weeks;

                var gestationalAge = human.Organism.Parameter(Constants.Parameters.GESTATIONAL_AGE);

                if (!individual.Organism.ContainsName(Constants.Parameters.GESTATIONAL_AGE))
                {
                    individual.Organism.Add(_cloner.Clone(gestationalAge));
                }
            }
        }
コード例 #4
0
        private void addFractionEndosomalParametersTo(Individual individual)
        {
            var defaultHuman = _defaultIndividualRetriever.DefaultHuman();
            var allFractionEndosomalParameters =
                defaultHuman.GetAllChildren <IParameter>(x => x.IsNamed(FRACTION_ENDOSOMAL));

            allFractionEndosomalParameters.Each(x =>
            {
                //Find container in the individual to convert
                var containerPath = new ObjectPath(x.ParentContainer.ConsolidatedPath());

                var container = individual.Root.EntityAt <IContainer>(containerPath);
                //add clone of parameter
                container.Add(_cloner.Clone(x));
            });
        }
コード例 #5
0
        private void exportToFolder(string exportFolder)
        {
            var defaultIndividual = _defaultIndividualRetriever.DefaultHuman();
            var batchSimulation   = new Simulation();

            batchSimulation.Individual = new Individual
            {
                Age        = defaultIndividual.Age,
                Height     = defaultIndividual.MeanHeight,
                Species    = defaultIndividual.Species.Name,
                Population = defaultIndividual.Population.Name,
            };

            batchSimulation.Compounds.Add(new Compound {
                Name = "Standard Molecule", Lipophilicity = 3, FractionUnbound = 0.1, MolWeight = 4E-7, SolubilityAtRefpH = 9999, RefpH = 7
            });
            var intrevanousBolus = new ApplicationProtocol {
                CompoundName = "Standard Molecule", ApplicationType = CoreConstants.Application.Name.IntravenousBolus, Dose = 1, DoseUnit = "mg/kg", DosingInterval = DosingIntervals.Single.ToString()
            };


            batchSimulation.Configuration = new SimulationConfiguration {
                Model = CoreConstants.Model.FourComp
            };
            batchSimulation.ApplicationProtocols.Add(intrevanousBolus);
            var fourCompIvBolusMgPerKg = configurationFrom(batchSimulation);

            batchSimulation.Configuration = new SimulationConfiguration {
                Model = CoreConstants.Model.TwoPores
            };
            var twoPore = configurationFrom(batchSimulation);

            batchSimulation.ApplicationProtocols.Clear();
            intrevanousBolus.DoseUnit = "mg";
            batchSimulation.ApplicationProtocols.Add(intrevanousBolus);
            batchSimulation.Configuration = new SimulationConfiguration {
                Model = CoreConstants.Model.FourComp
            };
            var fourCompIvBolusMg = configurationFrom(batchSimulation);


            twoPore.SpatialStructure.Name  = "Human 2 Pores";
            twoPore.PassiveTransports.Name = "2 Pores Passive Transports";

            fourCompIvBolusMgPerKg.SpatialStructure.Name  = "Human Standard";
            fourCompIvBolusMgPerKg.PassiveTransports.Name = "Standard Passive Transports";
            fourCompIvBolusMgPerKg.EventGroups.Name       = "IV Bolus";
            fourCompIvBolusMgPerKg.Molecules.Name         = "Standard Molecule";
            fourCompIvBolusMgPerKg.Observers.Name         = "Standard Observer";


            fourCompIvBolusMg.EventGroups.Name = "IV Bolus (mg)";

            var defaultCompound = fourCompIvBolusMgPerKg.Molecules.First();

            defaultCompound.Name = string.Empty;
            defaultCompound.Parameter(CoreConstants.Parameter.LIPOPHILICITY).Value     = double.NaN;
            defaultCompound.Parameter(CoreConstants.Parameter.MOLECULAR_WEIGHT).Value  = double.NaN;
            defaultCompound.Parameter(CoreConstants.Parameter.FractionUnbound).Value   = double.NaN;
            defaultCompound.Parameter(CoreConstants.Parameter.SolubilityAtRefpH).Value = double.NaN;

            _moBiExportTask.UpdateObserverForAllFlag(fourCompIvBolusMgPerKg.Observers);

            var buildingBlocks = new IBuildingBlock[]
            {
                twoPore.SpatialStructure, twoPore.PassiveTransports,
                fourCompIvBolusMgPerKg.SpatialStructure, fourCompIvBolusMgPerKg.PassiveTransports, fourCompIvBolusMgPerKg.EventGroups, fourCompIvBolusMgPerKg.Molecules, fourCompIvBolusMgPerKg.Observers,
                fourCompIvBolusMg.EventGroups
            };

            buildingBlocks.Each(bb => saveToPKML(bb, exportFolder));
        }