void CreateCellPopulation(string folder) { CellProvider provider = new CellProvider(); provider.ReadParameters(folder); provider.ReadResults(); provider.ReadParticleNeighbourhoods(); provider.PlayResults(0); populationSize = provider.popSize; maxPopulationSize = provider.maxPopSize; cells = new MGCell[provider.maxPopSize]; sigma = new int[provider.maxPopSize]; contacts = new int[maxPopulationSize]; contactsIndices = new int[maxPopulationSize]; int start = 0; tissues = new List <Tissue>(provider.nbOfCellTypes); Random rand = new Random(0); for (int i = 0; i < provider.nbOfCellTypesPerFrame[provider.nbOfFrames - 1]; i++) { //Console.WriteLine(provider.nbOfCellsPerTypePerFrame[provider.nbOfFrames - 1][i]); tissues.Add(new Tissue(provider.nbOfCellsPerTypePerFrame[provider.nbOfFrames - 1][i], provider.maxPopSize)); tissues[i].indices = new int[tissues[i].maxPopulationSize]; start += i == 0 ? 0 : tissues[i - 1].populationSize; for (int j = 0; j < tissues[i].populationSize; j++) { int index = start + j; //Console.WriteLine(index); cells[index] = new MGCell(index, i, provider.meshPerCell[index]); //Console.WriteLine(index + ", " + provider.meshPerCell[index].vertexCount()); cells[index].tissueId = i; tissues[i].indices[j] = index; tissues[i].cells[j] = cells[index]; sigma[index] = index; cells[index].cycleTime = rand.Next(MGModel.cellCyclePeriod); tissues[i].reference += cells[index].ComputeCentreFromMesh(); //Console.WriteLine(cells[index].cycleTime); contactsIndices[index] = index; contacts[index] = 0; } tissues[i].mesh = provider.meshPerCell[start]; tissues[i].reference /= tissues[i].populationSize; } for (int i = 0; i < provider.externalEdges.Count; i++) { Edge edge = new Edge(cells[(int)provider.externalEdges[i].x].vertices[(int)provider.externalEdges[i].y], cells[(int)provider.externalEdges[i].z].vertices[(int)provider.externalEdges[i].w]); cells[(int)provider.externalEdges[i].x].externalEdges.add(edge); cells[(int)provider.externalEdges[i].z].externalEdges.add(new Edge(edge.ends[1], edge.ends[0])); cells[(int)provider.externalEdges[i].x].vertices[(int)provider.externalEdges[i].y].externalNeighbours.Add(new int[] { (int)provider.externalEdges[i].z, (int)provider.externalEdges[i].w }); cells[(int)provider.externalEdges[i].z].vertices[(int)provider.externalEdges[i].w].externalNeighbours.Add(new int[] { (int)provider.externalEdges[i].x, (int)provider.externalEdges[i].y }); if ((int)provider.externalEdges[i].x == 0 && (int)provider.externalEdges[i].y == 26) { //Console.WriteLine(provider.externalEdges[i].z + ", " + provider.externalEdges[i].w); } } for (int i = 0; i < populationSize; i++) { contacts[i] = cells[i].externalEdges.getCount(); } }
void CreateCellPopulation(string folder) { CellProvider provider = new CellProvider(); provider.ReadParameters(folder); provider.ReadResults(); provider.PlayResults(0); populationSize = provider.popSize; maxPopulationSize = provider.maxPopSize; cells = new MGCell[provider.maxPopSize]; sigma = new int[provider.maxPopSize]; int start = 0; tissues = new List <Tissue>(provider.nbOfCellTypes); /* * for (int i = 0; i < provider.nbOfCellTypes; i++) * { * tissues.Add(new Tissue(provider.nbOfCellsPerType[i], provider.maxPopSize)); * tissues[i].indices = new int[tissues[i].maxPopulationSize]; * * start += i == 0 ? 0 : tissues[i - 1].populationSize; * for (int j = 0; j < tissues[i].populationSize; j++) * { * int index = start + j; * * //Console.WriteLine(index); * cells[index] = new MGCell(index, provider.meshPerCell[index]); * //Console.WriteLine(index + ", " + provider.meshPerCell[index].vertexCount()); * cells[index].tissueId = i; * * tissues[i].indices[j] = index; * tissues[i].cells[j] = cells[index]; * sigma[index] = index; * cells[index].cycleTime = new Random().Next(MGModel.cellCyclePeriod); * tissues[i].reference += cells[index].ComputeCentreFromMesh(); * } * tissues[i].mesh = provider.meshPerCell[start]; * tissues[i].reference /= tissues[i].populationSize; * } */ for (int i = 0; i < provider.nbOfCellTypesPerFrame[provider.nbOfFrames - 1]; i++) { //Console.WriteLine(provider.nbOfCellsPerTypePerFrame[provider.nbOfFrames - 1][i]); tissues.Add(new Tissue(provider.nbOfCellsPerTypePerFrame[provider.nbOfFrames - 1][i], provider.maxPopSize)); tissues[i].indices = new int[tissues[i].maxPopulationSize]; start += i == 0 ? 0 : tissues[i - 1].populationSize; for (int j = 0; j < tissues[i].populationSize; j++) { int index = start + j; //Console.WriteLine(index); cells[index] = new MGCell(index, provider.meshPerCell[index]); //Console.WriteLine(index + ", " + provider.meshPerCell[index].vertexCount()); cells[index].tissueId = i; tissues[i].indices[j] = index; tissues[i].cells[j] = cells[index]; sigma[index] = index; cells[index].cycleTime = new Random().Next(MGModel.cellCyclePeriod); tissues[i].reference += cells[index].ComputeCentreFromMesh(); } tissues[i].mesh = provider.meshPerCell[start]; tissues[i].reference /= tissues[i].populationSize; } //Console.WriteLine(tissues.Capacity); /* * int cellTypeStartStates = 0; * for (int i = 0; i < provider.nbOfCellTypes; i++) * { * if (i > 0) cellTypeStartStates += provider.nbOfCellsPerType[i - 1]; * for (int j = 0; j < provider.nbOfCellsPerType[i]; j++) * { * cells[cellTypeStartStates + j] = new MGCell(cellTypeStartStates + j, provider.meshPerCell[cellTypeStartStates + j]); * } * } * //*/ }