コード例 #1
0
ファイル: GOTerm.cs プロジェクト: aizotov/CancerSimulation
 public GOTerm(SimulationParameters.GOTermParam termParams)
 {
     name = termParams.termName;
     description = termParams.description;
     pValue = termParams.pValue;
     weight = termParams.startingValue;
 }
コード例 #2
0
ファイル: FinalCell.cs プロジェクト: aizotov/CancerSimulation
        public FinalCell(Vector3 position, SimulationParameters.SimpleBehaviorParam behaviorConfig, int startingFood)
            : base(position, startingFood)
        {
            cellBehaviors = new SimpleBehaviorAggregate(behaviorConfig);

            this.generation = 1;
            initializeFinalCell();
            checkChildProbabilities(this);
        }
コード例 #3
0
ファイル: BlastCell.cs プロジェクト: aizotov/CancerSimulation
        public BlastCell(Vector3 position, SimulationParameters.SimpleBehaviorParam behaviorConfig, int startingFood)
            : base(position, startingFood)
        {
            cellBehaviors = new SimpleBehaviorAggregate(behaviorConfig);

            Console.WriteLine("creating first blast cell at: " + position);

            initializeBlastCell();
            checkChildProbabilities(this);
        }
コード例 #4
0
        public Environment(SimulationParameters simulationParams)
        {
            instance = this;

            firstCorner = simulationParams.environmentFirstCorner;
            secondCorner = simulationParams.environmentSecondCorner;

            BlastCellTotal = 0;
            FinalCellTotal = 0;
            MutatedCellTotal = 0;

            tissues = new List<Tissue>();
            foreach (SimulationParameters.TissueParameters tissueParam in simulationParams.tissueParams)
            {
                tissues.Add(new Tissue(tissueParam));
            }

            cells = new List<TissueCell>();
            newCells = new List<TissueCell>();
            dyingCells = new List<TissueCell>();

            signals = new List<Signal>();
            newSignals = new List<Signal>();
            expiredSignals = new List<Signal>();

            pressurePoints = new List<LocationContents>();

            Console.WriteLine("setting up environment matrix");
            environmentMatrix = new LocationContents[(int)secondCorner.X + 1, (int)secondCorner.Y + 1, (int)secondCorner.Z + 1];
            createMatrix(firstCorner, secondCorner);

            Console.WriteLine("setting up initial pressure around the [" + tissues.Count + "] tissue(s)");
            foreach(Tissue t in tissues)
                setupPressureAroundTissue(t, simulationParams.SectorPressureDistance, simulationParams.SectorPressureInitial, simulationParams.SectorPressureIncrement);

            Console.WriteLine("setting up sectors");
            sectorMap = new Sector[(int)secondCorner.X + 1, (int)secondCorner.Y + 1, (int)secondCorner.Z + 1];
            List<Sector> sectors = sectorSetup(simulationParams.SectorHeight, simulationParams.SectorWidth, simulationParams.SectorDepth);
            Console.WriteLine("there are [" + sectors.Count + "] total sectors");

            Console.WriteLine("creating location->sector map");
            CreateSectorMap(sectors);

            Console.WriteLine("initializing circulatory system");
            circulatorySystem = new CirculatorySystem(simulationParams.PipeParams, simulationParams.PipeCorners);

            Console.WriteLine("setting up initial pressue around the pipes");
            setupPressureAroundPipes(circulatorySystem, simulationParams.PipePressureDistance, simulationParams.PipePressureInitial, simulationParams.PipePressureIncrement);

            Console.WriteLine("initializing cells");
            Console.WriteLine("behavior: " + simulationParams.behaviorType);
            BlastCell.InitializeDivideProbabilities(simulationParams.cellParameters.BlastCellDivideIntoBlastProbability, simulationParams.cellParameters.BlastCellDivideIntoFinalProbability);
            initializeCells(simulationParams.startingCells, simulationParams.behaviorType);
        }
コード例 #5
0
ファイル: BlastCell.cs プロジェクト: aizotov/CancerSimulation
        public BlastCell(Vector3 position, SimulationParameters.GOTermBehaviorParams behaviorConfig, int startingFood)
            : base(position, startingFood)
        {
            throw new NotImplementedException("haven't tested GO behavior");

            //insantiate go behavior aggregate
            //cellBehaviors = new GOBehaviorAggregate(behaviorConfig, this);

            Console.WriteLine("creating first blast cell at: " + position);

            initializeBlastCell();
            checkChildProbabilities(this);
        }
コード例 #6
0
        public CirculatorySystem(SimulationParameters.PipeParameters pipeParams, SimulationParameters.PipeLocations pipeCorners)
        {
            instance = this;

            this.pipeShrinkRate = pipeParams.PipeShrink;

            pipeCells = new List<EndothelialCell>();
            hungryCells = new List<TissueCell>();
            growingPipes = new List<GrowingPipe>();

            maxNumGrowthsPerTurn = pipeParams.MaxGrowthPerTurn;

            EndothelialCell root = new EndothelialCell(pipeCorners.location, pipeParams.PipeRootOrientation, pipeParams.PipeStartingWidth, null);
            setupPipes(root, pipeCorners.children);
        }
コード例 #7
0
ファイル: Tissue.cs プロジェクト: aizotov/CancerSimulation
 public Tissue(SimulationParameters.TissueParameters tissueParams)
 {
     firstCorner = tissueParams.firstCorner;
     secondCorner = tissueParams.secondCorner;
 }
コード例 #8
0
ファイル: FinalCell.cs プロジェクト: aizotov/CancerSimulation
 public FinalCell(Vector3 position, SimulationParameters.GOTermBehaviorParams behaviorConfig, int startingFood)
     : base(position, startingFood)
 {
     throw new NotImplementedException("havent tested GO behaviors");
 }
コード例 #9
0
        private void initializeCells(List<SimulationParameters.CellStartConfig> startingCells, SimulationParameters.BehaviorTypes cellBehaviorType)
        {
            foreach (SimulationParameters.CellStartConfig cellConfig in startingCells)
            {
                if (!GoodPoint(cellConfig.location))
                    throw new Exception("invalid cell start location " + cellConfig.location + "... it isn't part of tissue [" + firstCorner + "," + secondCorner + "]");

                if (cellBehaviorType == SimulationParameters.BehaviorTypes.SimpleBehaviors)
                {
                    if (cellConfig.cellType == typeof(BlastCell))
                        AddNewCell(new BlastCell(cellConfig.location, cellConfig.simpleBehavior, cellConfig.startingFood));
                    else if (cellConfig.cellType == typeof(FinalCell))
                        AddNewCell(new FinalCell(cellConfig.location, cellConfig.simpleBehavior, cellConfig.startingFood));
                    else
                        throw new Exception("unsupported cell type [" + cellConfig.cellType + "]");
                }

                else if (cellBehaviorType == SimulationParameters.BehaviorTypes.GOBehaviors)
                    throw new NotImplementedException("haven't tested GO behaviors yet");
                else
                    throw new Exception("unsupported cell behavior type");

            }
        }
コード例 #10
0
        public SimpleBehaviorAggregate(SimulationParameters.SimpleBehaviorParam startingValues)
        {
            if (startingValues.startingDivideRate == 0)
                Console.WriteLine("possible invalid divide rate param");
            divideBehavior = new SimpleDivide(startingValues.startingDivideRate);
            SimpleDivide.MaxValue = 1.0;
            SimpleDivide.MinValue = 0.0;

            if (startingValues.startingDeathRate == 0)
                Console.WriteLine("possible invalid death rate param");
            deathBehavior = new SimpleDeathBehavior(startingValues.startingDeathRate);
            SimpleDeathBehavior.MaxValue = 1.0;
            SimpleDeathBehavior.MinValue = 0.0;

            if (startingValues.startingPressureToleranceAtLocation == 0)
                Console.WriteLine("possible invalid pressure tol @ location param");
            pressureToleranceAtLocation = new SimplePressureToleranceAtLocation(startingValues.startingPressureToleranceAtLocation);
            SimplePressureToleranceAtLocation.MaxValue = SimulationCore.Instance.SimulationParams.cellParameters.MaxPressureToleranceAtLocation;
            SimplePressureToleranceAtLocation.MinValue = SimulationCore.Instance.SimulationParams.cellParameters.MinPressureToleranceAtLocation;

            if (startingValues.startingPressureToleranceAtNeighbors == 0)
                Console.WriteLine("possible invalid perssure tol @ neighbors param");
            pressureToleranceAtNeighbors = new SimplePressureToleranceAtNeighbors(startingValues.startingPressureToleranceAtNeighbors);
            SimplePressureToleranceAtNeighbors.MaxValue = SimulationCore.Instance.SimulationParams.cellParameters.MaxPressureToleranceAtNeighbors;
            SimplePressureToleranceAtNeighbors.MinValue = SimulationCore.Instance.SimulationParams.cellParameters.MinPressureToleranceAtNeighbors;

            if (startingValues.FoodConsumptionRate == 0)
                Console.WriteLine("possible inavlid food consumption rate param");
            foodConsumptionBehavior = new SimpleFoodConsumptionRate(startingValues.FoodConsumptionRate);
            SimpleFoodConsumptionRate.MaxValue = SimulationCore.Instance.SimulationParams.cellParameters.MaxFoodConsumptionRate;
            SimpleFoodConsumptionRate.MinValue = SimulationCore.Instance.SimulationParams.cellParameters.MinFoodConsumptionRate;

            if (startingValues.FoodMaxStorage == 0)
                Console.WriteLine("possible invalid food max storage rate param");
            foodMaxStorage = new SimpleFoodMaxStorage(startingValues.FoodMaxStorage);
            SimpleFoodMaxStorage.MaxValue = SimulationCore.Instance.SimulationParams.cellParameters.MaxFoodStorage;
            SimpleFoodMaxStorage.MinValue = SimulationCore.Instance.SimulationParams.cellParameters.MinFoodStorage;

            if (startingValues.FoodConcernLevel == 0)
                Console.WriteLine("possible invalid food concern lvl param");
            foodConcern = new SimpleFoodConcern(startingValues.FoodConcernLevel);
            SimpleFoodConcern.MaxValue = SimulationCore.Instance.SimulationParams.cellParameters.MaxFoodConcernLevel;
            SimpleFoodConcern.MinValue = SimulationCore.Instance.SimulationParams.cellParameters.MinFoodConcernLevel;

            //if (startingValues.MoveProbability == 0)
            //    Console.WriteLine("possible invalid move probablity param");
            moveAbility = new SimpleMove(startingValues.MoveProbability);
            SimpleMove.MaxValue = 1.0;
            SimpleMove.MinValue = 0.0;

            pipeEnter = new SimplePipeEnter(startingValues.EnterPipeProbability);
            SimplePipeEnter.MaxValue = 1.0;
            SimplePipeEnter.MinValue = 0.0;

            pipeLeave = new SimplePipeLeave(startingValues.LeavePipeProbability);
            SimplePipeLeave.MaxValue = 1.0;
            SimplePipeLeave.MinValue = 0.0;

            pipeSurvival = new SimplePipeSurvival(startingValues.SurvivePipeProbability);
            SimplePipeSurvival.MaxValue = 1.0;
            SimplePipeSurvival.MinValue = 0.0;

            callPipeProbability = new SimpleCallPipe(startingValues.CallPipeProbability);
            SimpleCallPipe.MaxValue = 1.0;
            SimpleCallPipe.MinValue = 0.0;
        }
コード例 #11
0
        private VertexPositionColor[] getSingleTissueBorderVertices(SimulationParameters.TissueParameters tissueParams)
        {
            // cubes are drawn from center of 3d coordinate, they spill over 0.5 units into surrounding locations
            // because of this, need to offset border vertices for clean look

            Vector3 first = tissueParams.firstCorner - new Vector3(0.5f, 0.5f, 0.5f);
            Vector3 second = tissueParams.secondCorner + new Vector3(0.5f, 0.5f, 0.5f);

            VertexPositionColor a = new VertexPositionColor(first, tissueBorderColor);
            VertexPositionColor b = new VertexPositionColor(new Vector3(first.X, first.Y, second.Z), tissueBorderColor);
            VertexPositionColor c = new VertexPositionColor(new Vector3(second.X, first.Y, second.Z), tissueBorderColor);
            VertexPositionColor d = new VertexPositionColor(new Vector3(second.X, first.Y, first.Z), tissueBorderColor);

            VertexPositionColor e = new VertexPositionColor(new Vector3(first.X, second.Y, first.Z), tissueBorderColor);
            VertexPositionColor f = new VertexPositionColor(new Vector3(first.X, second.Y, second.Z), tissueBorderColor);
            VertexPositionColor g = new VertexPositionColor(second, tissueBorderColor);
            VertexPositionColor h = new VertexPositionColor(new Vector3(second.X, second.Y, first.Z), tissueBorderColor);

            VertexPositionColor[] tissueBorderVertices = {a,b, b,c, c,d, d,a, a,e, b,f, c,g, d,h, e,f, f,g, g,h, h,e};

            return tissueBorderVertices;
        }
コード例 #12
0
        public void StartSimulation(String configName)
        {
            Console.WriteLine("reading config file [" + configName + "]");
            SimulationParameters simulationParams = readParamsFromFile(configName); //new SimulationParameters();
            this.SimulationParams = simulationParams;

            Console.WriteLine("instantiating environment");
            environment = new Environment(simulationParams);

            Console.WriteLine("setting up tissue borders");
            tissueBorderVertices = getTissueBorderVertices(simulationParams.tissueParams);

            Console.WriteLine("initializing camera");
            Console.WriteLine("eye: " + simulationParams.CameraEye);
            Console.WriteLine("look at: " + simulationParams.CameraLookAt);
            initializeCamera(simulationParams.CameraEye, simulationParams.CameraLookAt);

            runningSimulation = true;
            allowMovement = false;
        }