sim = Simulation()

cell1_id = sim.add_cell(cell1)
cell2_id = sim.add_cell(cell2)
cell3_id = sim.add_cell(cell3)
IM1_id = sim.add_internal_model(IM1)
IM2_id = sim.add_internal_model(IM2)

connections = np.array([[False,False,False],[True,True,True],[False,True,True]])

sim.set_internal_model([cell1_id],IM1_id)
sim.set_internal_model([cell2_id,cell3_id],IM2_id)
a_diff = sim.add_interaction('a','a','diffusion',connections,params=[1.0])

def lin(x,t):
    return np.maximum((-x+t+np.sin(10.0*t))*(t < 6.0),1.0)

# sim.add_modulator(a_diff,'xtgeneral',None,fun=lin)

sim.set_initial_conditions([cell1_id],{'a':1.0})
sim.set_initial_conditions([cell2_id,cell3_id],{'a':0.0})


t = np.linspace(0,10,1000)
cell_data = sim.simulate(t)

plt.plot(t,cell_data[cell1_id])
plt.plot(t,cell_data[cell2_id])
plt.plot(t,cell_data[cell3_id])
plt.show()
# add the cells and internal models to simulation
cell1_id = sim.add_cell(cell1)
cell2_id = sim.add_cell(cell2)
cell3_id = sim.add_cell(cell3)

im1_id = sim.add_internal_model(IM1)
im2_id = sim.add_internal_model(IM2)

sim.set_internal_model([cell1_id,cell2_id],im1_id) # first two cells have IM1
sim.set_internal_model([cell3_id],im2_id)          # last cell as IM2

connections = np.array([[False,False,False],[False,True,True],[False,True,True]])
sim.add_interaction('a','a','diffusion',connections,params=[1.0])

# cell1 and cell2 start with the same initial conditions
sim.set_initial_conditions([cell1_id,cell2_id],{'a':0.1,'b':0.0,'c':0.0})
sim.set_initial_conditions([cell3_id],{'a':0}) # cell3 starts with 0 'a'

t = np.linspace(0,20,1000)
cell_data = sim.simulate(t) # cell_data is a list of 3 numpy arrays containing cell specific data

plt.figure()
plt.subplot(311)
plt.plot(t,cell_data[cell1_id])
plt.title('cell1')
plt.legend(['a','b','c'])

plt.subplot(312)
plt.plot(t,cell_data[cell2_id])
plt.title('cell2')
plt.legend(['a','b','c'])