SteppableBasePy class

In the example above you may wonder how it is possible that it is sufficient to type:

for cell in self.cell_list:

to iterate over a list of all cells in the simulation. Where does self.cell_list come from and how it accesses/stores information about all cells? The full answer to this question is beyond the scope of this manual so we will give you only a hint what happens here. The self.cell_list is a member of a SteppableBasePy class. All CC3D Python steppable inherit this class and consequently self.cell_list is a member of all steppables (please see a chapter on class inheritance from any Python manual if this looks unfamiliar). Under the hood the self.cell_list is a handle, or a “pointer”, if you prefer this terminology, to the C++ object that stores all cells in the simulation. The content of cell inventory, and cell ordering of cells there is fully managed by C++ code. We use self.cellList to access C++ cell objects usually iterating over entire list of cells. The cell in the

for cell in self.cell_list:


old syntax self.cellList is still supported

is a pointer to C++ cell object. You can easily see what members C++ cell object has by modifying the step function as follows:

def step(self, mcs):
    for cell in self.cellList:
        print dir(cell)

The result looks as follows:


Figure 6 Checking out properties of a cell C++ object

The dir built-in Python function prints out names of members of any Python object. Here it printed out members of CellG class which represents CC3D cells. We will go over these properties later.

The simplicity of the above code snippets is mainly due to underlying implementation of SteppableBasePy class. You can find this class in <CC3D\_installation\_dir>/pythonSetupScripts/ The definition of this class goes on for several hundreds lines of code (clearly a bit too much to present it here). If you are interested in checking out what members this class has use the dir Python function again:

def step(self,mcs):
    print ('Members of SteppableBasePy class')
    print dir(self)

You should know from Python programing manual that self refers to the class object. Therefore by printing dir(self) we are actually printing Python list of all members of cellsortingSteppable class. Because cellsortingSteppable class contains all the functions of SteppableBasePy class we can inspect this way base class SteppableBasePy. The output of the above simulation should look as follows:


Figure 7 Printing all members of SteppableBasePy class

If you look carefully, you can see that cellList is a member of SteppabeBasePy class. Alternatively you can study source code of SteppablBasePy.

One of the goals of this manual is to teach you how to effectively use features of SteppableBasePy class to create complex biological simulations. This class is very powerful and has many constructs which make coding simple.