def configureSimulation(sim):
    import CompuCellSetup
    from XMLUtils import ElementCC3D

    cc3d=ElementCC3D("CompuCell3D")
    potts=cc3d.ElementCC3D("Potts")
    potts.ElementCC3D("Dimensions",{"x":100,"y":100,"z":1})
    potts.ElementCC3D("Steps",{},1000000)
    potts.ElementCC3D("Anneal",{},10)
    potts.ElementCC3D("DebugOutputFrequency",{},0)
    potts.ElementCC3D("Temperature",{},10)
    potts.ElementCC3D("LatticeType",{},"Hexagonal")
    potts.ElementCC3D("NeighborOrder",{},2)
    

    cellType=cc3d.ElementCC3D("Plugin",{"Name":"CellType"})
    cellType.ElementCC3D("CellType", {"TypeName":"Medium", "TypeId":"0"})
    cellType.ElementCC3D("CellType", {"TypeName":"CellOfType1", "TypeId":"1"})
    cellType.ElementCC3D("CellType", {"TypeName":"Apoptotic", "TypeId":"2"})


    volume=cc3d.ElementCC3D("Plugin",{"Name":"Volume"})
    
    surface=cc3d.ElementCC3D("Plugin",{"Name":"Surface"})
    
    cc3d.ElementCC3D("Plugin",{"Name":"NeighborTracker"})


    contact=cc3d.ElementCC3D("Plugin",{"Name":"Contact"})
    contact.ElementCC3D("Energy", {"Type1":"Medium", "Type2":"Medium"},0)
    contact.ElementCC3D("Energy", {"Type1":"CellOfType1", "Type2":"CellOfType1"},15)
    contact.ElementCC3D("Energy", {"Type1":"CellOfType1", "Type2":"Medium"},15)
    contact.ElementCC3D("Energy",{"Type1":"CellOfType1", "Type2":"Apoptotic"},5)
    contact.ElementCC3D("Energy", {"Type1":"Apoptotic", "Type2":"Medium"},7)
    contact.ElementCC3D("Energy", {"Type1":"Apoptotic", "Type2":"Apoptotic"},25)
    contact.ElementCC3D("NeighborOrder", {}, 2)


    blobInitializer=cc3d.ElementCC3D("Steppable",{"Type":"BlobInitializer"})
    
    blobInitializer.ElementCC3D("Width",{},5)
    blobInitializer.ElementCC3D("Radius",{},40)


    CompuCellSetup.setSimulationXMLDescription(cc3d)
    
import sys
from os import environ
import string
sys.path.append(environ["PYTHON_MODULE_PATH"])
    
import CompuCellSetup

##CompuCellSetup.simulationPaths.simulationPythonScriptName = "something"
sim,simthread = CompuCellSetup.getCoreSimulationObjects()
configureSimulation(sim)

import CompuCell
CompuCellSetup.initializeSimulationObjects(sim,simthread)


pyAttributeAdderDict,dictAdder=CompuCellSetup.attachDictionaryToCells(sim)

from PySteppables import SteppableRegistry
steppableRegistry=SteppableRegistry()

from SteppablePresentation import CellPropertyandModifier
steppableRegistry.registerSteppable(CellPropertyandModifier(_simulator=sim,_frequency=500))

##from SteppablePresentation import CellTypeVisualizer
##steppableRegistry.registerSteppable(CellTypeVisualizer(_simulator=sim,_frequency=1))
##
##from SteppablePresentation import Output
##steppableRegistry.registerSteppable(Output(_simulator=sim,_frequency=5))
##
##from SteppablePresentation import ApoptosisCheck
##steppableRegistry.registerSteppable(ApoptosisCheck(_simulator=sim,_frequency=1))
##
##from SteppablePresentation import Apoptosis
##steppableRegistry.registerSteppable(Apoptosis(_simulator=sim,_frequency=1))
##
##from SteppablePresentation import PropertySwitcher
##steppableRegistry.registerSteppable(PropertySwitcher(_simulator=sim,_frequency=1))
##
##from SteppablePresentation import MassConservationViaMacrophage
##steppableRegistry.registerSteppable(MassConservationViaMacrophage(_simulator=sim,_frequency=5))
##
##from SteppablePresentation import Mitosis
##steppableRegistry.registerSteppable(Mitosis(_simulator=sim,_frequency=10))


CompuCellSetup.mainLoop(sim,simthread,steppableRegistry)


