public GOTerm(SimulationParameters.GOTermParam termParams) { name = termParams.termName; description = termParams.description; pValue = termParams.pValue; weight = termParams.startingValue; }
public FinalCell(Vector3 position, SimulationParameters.SimpleBehaviorParam behaviorConfig, int startingFood) : base(position, startingFood) { cellBehaviors = new SimpleBehaviorAggregate(behaviorConfig); this.generation = 1; initializeFinalCell(); checkChildProbabilities(this); }
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); }
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); }
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); }
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); }
public Tissue(SimulationParameters.TissueParameters tissueParams) { firstCorner = tissueParams.firstCorner; secondCorner = tissueParams.secondCorner; }
public FinalCell(Vector3 position, SimulationParameters.GOTermBehaviorParams behaviorConfig, int startingFood) : base(position, startingFood) { throw new NotImplementedException("havent tested GO behaviors"); }
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"); } }
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; }
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; }
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; }