示例#1
0
        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();
            }
        }
示例#2
0
        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]);
             *  }
             * }
             * //*/
        }