import ru.biosoft.physicell.biofvm.Microenvironment;
import ru.biosoft.physicell.core.Cell;
import ru.biosoft.physicell.core.CellDefinition;
import ru.biosoft.physicell.core.Model;
import ru.biosoft.physicell.core.Model.Event;
import ru.biosoft.physicell.core.RandomGenerator;
public class TherapyEvent extends Event
{
public TherapyEvent(Model model)
{
super( model );
executionTime = model.getParameterDouble( "therapy_activation_time" );
}
@Override
public void execute() throws Exception
{
// System.out.println( "Therapy started!" );
model.setSaveFullInterval( model.getParameterDouble( "save_interval_after_therapy_start" ) ); // 3.0;
introduceBiorobots( model );
}
public void introduceBiorobots(Model model) throws Exception
{
Microenvironment m = model.getMicroenvironment();
// idea: we'll "inject" them in a little column
double workerFraction = model.getParameterDouble( "worker_fraction" ); // 0.10; /* param */
int numberInjectedCells = model.getParameterInt( "number_of_injected_cells" ); // 500; /* param */
// make these vary with domain size
double left = m.options.X_range[1] - 150.0; // 600.0;
double right = m.options.X_range[1] - 50.0; // 700.0;
double bottom = m.options.Y_range[0] + 50.0; // -700;
double top = m.options.Y_range[1] - 50.0; // 700;
CellDefinition workerCD = model.getCellDefinition( "worker cell" );
CellDefinition cargoCD = model.getCellDefinition( "cargo cell" );
RandomGenerator rng = model.getRNG();
for( int i = 0; i < numberInjectedCells; i++ )
{
double[] position = {0, 0, 0};
position[0] = rng.UniformRandom( left, right );
position[1] = rng.UniformRandom( bottom, top );
if( model.getRNG().UniformRandom() <= workerFraction )
{
Cell.createCell( workerCD, model, position );
}
else
{
Cell.createCell( cargoCD, model, position );
}
}
}
}