def step(self, mcs):
        if mcs > 100 and not mcs % 100:
            # get <Plugin Name="LengthConstraint"> section of XML file
            lengthConstraintXMLData = self.simulator.getCC3DModuleData(
                "Plugin", "LengthConstraint")
            # check if we were able to successfully get the section from simulator
            if lengthConstraintXMLData:
                # get <LengthEnergyParameters CellType="Body1" TargetLength="xxx" LambdaLength="xxx" /> element
                lengthEnergyParametersBody1 = lengthConstraintXMLData.getFirstElement(
                    "LengthEnergyParameters", d2mss({"CellType": "Body1"}))
                # check if the attempt was succesful
                if lengthEnergyParametersBody1:
                    # get value of the TargetLength attribute from <LengthEnergyParameters CellType="Body1" TargetLength="xxx" LambdaLength="xxx" /> element
                    targetLength = lengthEnergyParametersBody1.getAttributeAsDouble(
                        "TargetLength")
                    #increase targetLength by 1
                    targetLength += 0.5
                    # update <LengthEnergyParameters CellType="Body1" TargetLength="xxx" LambdaLength="xxx" /> element remembering abuot converting targetLength to string
                    lengthEnergyParametersBody1.updateElementAttributes(
                        d2mss({"TargetLength": str(targetLength)}))
                # finally call simulator.updateCC3DModule(lengthConstraintXMLData) to tell simulator to update model parameters - this is actual steering
                self.simulator.updateCC3DModule(lengthConstraintXMLData)
        if mcs > 3000:
            # here we relax connectivity constraint at MCS>3000
            connectivityXMLData = self.simulator.getCC3DModuleData(
                "Plugin", "Connectivity")
            if connectivityXMLData:
                penaltyElement = connectivityXMLData.getFirstElement("Penalty")
                if penaltyElement:
                    penaltyElement.updateElementValue(str(0))

                self.simulator.updateCC3DModule(connectivityXMLData)
 def step(self,mcs):
     if mcs>100 and not mcs%100:
         # get <Plugin Name="LengthConstraint"> section of XML file 
         lengthConstraintXMLData=self.simulator.getCC3DModuleData("Plugin","LengthConstraint")
         # check if we were able to successfully get the section from simulator
         if lengthConstraintXMLData:
             # get <LengthEnergyParameters CellType="Body1" TargetLength="xxx" LambdaLength="xxx" /> element  
             lengthEnergyParametersBody1=lengthConstraintXMLData.getFirstElement("LengthEnergyParameters",d2mss({"CellType":"Body1"}))
             # check if the attempt was succesful
             if lengthEnergyParametersBody1:
                 # get value of the TargetLength attribute from <LengthEnergyParameters CellType="Body1" TargetLength="xxx" LambdaLength="xxx" /> element  
                 targetLength=lengthEnergyParametersBody1.getAttributeAsDouble("TargetLength")
                 #increase targetLength by 1
                 targetLength+=0.5
                 # update <LengthEnergyParameters CellType="Body1" TargetLength="xxx" LambdaLength="xxx" /> element remembering abuot converting targetLength to string
                 lengthEnergyParametersBody1.updateElementAttributes(d2mss({"TargetLength":str(targetLength)}))
             # finally call simulator.updateCC3DModule(lengthConstraintXMLData) to tell simulator to update model parameters - this is actual steering        
             self.simulator.updateCC3DModule(lengthConstraintXMLData)
     if mcs>3000:
         # here we relax connectivity constraint at MCS>3000
         connectivityXMLData=self.simulator.getCC3DModuleData("Plugin","Connectivity")
         if connectivityXMLData:
             penaltyElement=connectivityXMLData.getFirstElement("Penalty")
             if penaltyElement:
                 penaltyElement.updateElementValue(str(0))
              
             self.simulator.updateCC3DModule(connectivityXMLData)
Example #3
0
 def adjustGravity(self):
     extPotXMLData=self.simulator.getCC3DModuleData("Plugin","ExternalPotential")
     if extPotXMLData:
         waterExtPotElem=extPotXMLData.getFirstElement("ExternalPotentialParameters",d2mss({"CellType":"Water"}))
         if waterExtPotElem:
             y=waterExtPotElem.getAttributeAsDouble("y")
             y=20
             waterExtPotElem.updateElementAttributes(d2mss({"y":str(y)}))
             
         self.simulator.updateCC3DModule(extPotXMLData)
Example #4
0
    def adjustGravity(self):
        extPotXMLData = self.simulator.getCC3DModuleData("Plugin", "ExternalPotential")
        if extPotXMLData:
            waterExtPotElem = extPotXMLData.getFirstElement("ExternalPotentialParameters", d2mss({"CellType": "Water"}))
            if waterExtPotElem:
                y = waterExtPotElem.getAttributeAsDouble("y")
                y = 20
                waterExtPotElem.updateElementAttributes(d2mss({"y": str(y)}))

            self.simulator.updateCC3DModule(extPotXMLData)
 def step(self,mcs):
     if mcs>100 and not mcs%100:
         # get <Plugin Name="Chemotaxis"> section of XML file 
         chemotaxisXMLData=self.simulator.getCC3DModuleData("Plugin","Chemotaxis")
         # check if we were able to successfully get the section from simulator
         if chemotaxisXMLData:
             # get <ChemicalField Source="DiffusionSolverFE" Name="ATTR" > element  
             chemicalField=chemotaxisXMLData.getFirstElement("ChemicalField",d2mss({"Source":"DiffusionSolverFE", "Name":"ATTR"}))
             # check if the attempt was succesful
             if chemicalField:
                 # get <ChemotaxisByType Type="Macrophage" Lambda="xxx"/> - notice we only specify "Type":"Macrophage" because Lambda is subject to change - i.e. this is steerable parameter
                 chemotaxisByTypeMacrophageElement=chemicalField.getFirstElement("ChemotaxisByType",d2mss({"Type":"Macrophage"}))
                 if chemotaxisByTypeMacrophageElement:
                     # get value of Lambda from <ChemotaxisByType Type="Macrophage" Lambda="xxx"/>
                     # notice that no conversion fro strin to float is necessary as getAttributeAsDouble returns floating point value
                     lambdaVal=chemotaxisByTypeMacrophageElement.getAttributeAsDouble("Lambda")
                     print "lambdaVal=",lambdaVal
                     # decrease lambda by 0.2
                     lambdaVal-=3
                     # update attribute value of Lambda - but remember about float to string conversion
                     chemotaxisByTypeMacrophageElement.updateElementAttributes(d2mss({"Lambda":str(lambdaVal)}))
         self.simulator.updateCC3DModule(chemotaxisXMLData);
Example #6
0
 def setValue(self, value):
 
     self.__itemValue = value
     if self.__elementType=="attribute":
         from XMLUtils import dictionaryToMapStrStr as d2mss
         self.__domNode.updateElementAttributes(d2mss({self.__itemName:str(self.__itemValue)}))
         # # # print MODULENAME,"UPDATING ATTRIBUTE ",self.__itemName," to value ",self.__itemValue
     else:
         self.__domNode.updateElementValue(str(self.__itemValue))
         # # # print MODULENAME,"UPDATING ELEMENT ",self.__itemName," to value ",self.__itemValue," __domNode.getName()=",self.__domNode.getName()
         # # # print MODULENAME,"VALUE CHECK ",self.__domNode.getText()
     
     if self.type() is None:
         self.setType(value)
Example #7
0
    def setValue(self, value):

        self.__itemValue = value
        if self.__elementType == "attribute":
            from XMLUtils import dictionaryToMapStrStr as d2mss
            self.__domNode.updateElementAttributes(
                d2mss({self.__itemName: str(self.__itemValue)}))
            # # # print MODULENAME,"UPDATING ATTRIBUTE ",self.__itemName," to value ",self.__itemValue
        else:
            self.__domNode.updateElementValue(str(self.__itemValue))
            # # # print MODULENAME,"UPDATING ELEMENT ",self.__itemName," to value ",self.__itemValue," __domNode.getName()=",self.__domNode.getName()
            # # # print MODULENAME,"VALUE CHECK ",self.__domNode.getText()

        if self.type() is None:
            self.setType(value)
 def step(self, mcs):
     if mcs > 100:
         # get <Steppable Type="FlexibleDiffusionSolverFE"> section of XML file
         fiexDiffXMLData = self.simulator.getCC3DModuleData(
             "Steppable", "FlexibleDiffusionSolverFE")
         # check if we were able to successfully get the section from simulator
         if fiexDiffXMLData:
             # get a list of <DiffusionField> elements  - notice how we use CC3DXMLListPy to construct Python iterable list
             diffusionFieldsElementVec = CC3DXMLListPy(
                 fiexDiffXMLData.getElements("DiffusionField"))
             # go over all <DiffusionFields> elements - here we have only one such element but if you have more fields in the solver
             # you will need chek all of them to find required  element
             for diffusionFieldElement in diffusionFieldsElementVec:
                 # here we assume that <DiffusionData>
                 #                              <FieldName>xxx</FieldName> element exists and pick the one whose value is "FGF"
                 if diffusionFieldElement.getFirstElement(
                         "DiffusionData").getFirstElement(
                             "FieldName").getText() == "FGF":
                     # we get diffusion constant element , again no checking if such element exists - we assume it does
                     diffConstElement = diffusionFieldElement.getFirstElement(
                         "DiffusionData").getFirstElement(
                             "DiffusionConstant")
                     # convert string value of <DiffusionConstant> element  to float
                     diffConst = float(diffConstElement.getText())
                     # increase diffusion constant
                     diffConst += 0.01
                     # update the value of the <DiffusionConstant> element - convert flot to string
                     diffConstElement.updateElementValue(str(diffConst))
                     # getting <SecretionData> section
                     if mcs > 500:
                         # get  <SecretionData>
                         #          <Secretion Type="Bacterium">2</Secretion>
                         # notice we skip checking if the attemt was sucessful and assume it was
                         secretionElement = diffusionFieldElement.getFirstElement(
                             "SecretionData").getFirstElement(
                                 "Secretion", d2mss({"Type": "Bacterium"}))
                         secretionConst = float(secretionElement.getText())
                         #increase secretion of Bacterium by 2
                         secretionConst += 2
                         print "secretionConst=", secretionConst
                         #update value of the <Secretion Type="Bacterium">
                         secretionElement.updateElementValue(
                             str(secretionConst))
             # finally call simulator.updateCC3DModule(fiexDiffXMLData) to tell simulator to update model parameters - this is actual steering
             self.simulator.updateCC3DModule(fiexDiffXMLData)
    def modifyContactEnergies(self,
                              BB_offset,
                              GG_offset,
                              steadyStateOffset,
                              BB_scale=-30.0,
                              GG_scale=-10.0,
                              MM_scale=30.0,
                              MB_scale=-10.0,
                              MG_scale=0.0,
                              BG_scale=10.0):

        contactXMLData = self.simulator.getCC3DModuleData("Plugin", "Contact")
        BB = contactXMLData.getFirstElement(
            "Energy", d2mss({
                "Type1": "Blue",
                "Type2": "Blue"
            }))
        GG = contactXMLData.getFirstElement(
            "Energy", d2mss({
                "Type1": "Green",
                "Type2": "Green"
            }))
        MM = contactXMLData.getFirstElement(
            "Energy", d2mss({
                "Type1": "Medium",
                "Type2": "Medium"
            }))
        MB = contactXMLData.getFirstElement(
            "Energy", d2mss({
                "Type1": "Medium",
                "Type2": "Blue"
            }))
        MG = contactXMLData.getFirstElement(
            "Energy", d2mss({
                "Type1": "Medium",
                "Type2": "Green"
            }))
        BG = contactXMLData.getFirstElement(
            "Energy", d2mss({
                "Type1": "Blue",
                "Type2": "Green"
            }))

        BB.updateElementValue(str(BB_scale + BB_offset - steadyStateOffset))
        GG.updateElementValue(str(GG_scale + GG_offset - steadyStateOffset))
        MM.updateElementValue(str(MM_scale))
        MB.updateElementValue(str(MB_scale))
        MG.updateElementValue(str(MG_scale))
        BG.updateElementValue(str(BG_scale))

        self.simulator.updateCC3DModule(contactXMLData)
 def step(self, mcs):
     if mcs > 100:
         # get <Steppable Type="FlexibleDiffusionSolverFE"> section of XML file
         fiexDiffXMLData = self.simulator.getCC3DModuleData("Steppable", "FlexibleDiffusionSolverFE")
         # check if we were able to successfully get the section from simulator
         if fiexDiffXMLData:
             # get a list of <DiffusionField> elements  - notice how we use CC3DXMLListPy to construct Python iterable list
             diffusionFieldsElementVec = CC3DXMLListPy(fiexDiffXMLData.getElements("DiffusionField"))
             # go over all <DiffusionFields> elements - here we have only one such element but if you have more fields in the solver
             # you will need chek all of them to find required  element
             for diffusionFieldElement in diffusionFieldsElementVec:
                 # here we assume that <DiffusionData>
                 #                              <FieldName>xxx</FieldName> element exists and pick the one whose value is "FGF"
                 if (
                     diffusionFieldElement.getFirstElement("DiffusionData").getFirstElement("FieldName").getText()
                     == "FGF"
                 ):
                     # we get diffusion constant element , again no checking if such element exists - we assume it does
                     diffConstElement = diffusionFieldElement.getFirstElement("DiffusionData").getFirstElement(
                         "DiffusionConstant"
                     )
                     # convert string value of <DiffusionConstant> element  to float
                     diffConst = float(diffConstElement.getText())
                     # increase diffusion constant
                     diffConst += 0.01
                     # update the value of the <DiffusionConstant> element - convert flot to string
                     diffConstElement.updateElementValue(str(diffConst))
                     # getting <SecretionData> section
                     if mcs > 500:
                         # get  <SecretionData>
                         #          <Secretion Type="Bacterium">2</Secretion>
                         # notice we skip checking if the attemt was sucessful and assume it was
                         secretionElement = diffusionFieldElement.getFirstElement("SecretionData").getFirstElement(
                             "Secretion", d2mss({"Type": "Bacterium"})
                         )
                         secretionConst = float(secretionElement.getText())
                         # increase secretion of Bacterium by 2
                         secretionConst += 2
                         print "secretionConst=", secretionConst
                         # update value of the <Secretion Type="Bacterium">
                         secretionElement.updateElementValue(str(secretionConst))
             # finally call simulator.updateCC3DModule(fiexDiffXMLData) to tell simulator to update model parameters - this is actual steering
             self.simulator.updateCC3DModule(fiexDiffXMLData)
 def writeContactEnergies( self, mcs, fileName = "contactEnergies.txt", append = "w" ):
     contactXMLData = self.simulator.getCC3DModuleData( "Plugin", "Contact" )
     BB = contactXMLData.getFirstElement( "Energy", d2mss({"Type1":"Blue", "Type2":"Blue"}) ).getText()
     GG = contactXMLData.getFirstElement( "Energy", d2mss({"Type1":"Green", "Type2":"Green"}) ).getText()
     MM = contactXMLData.getFirstElement( "Energy", d2mss({"Type1":"Medium", "Type2":"Medium"}) ).getText()
     MB = contactXMLData.getFirstElement( "Energy", d2mss({"Type1":"Medium", "Type2":"Blue"}) ).getText()
     MG = contactXMLData.getFirstElement( "Energy", d2mss({"Type1":"Medium", "Type2":"Green"}) ).getText()
     BG = contactXMLData.getFirstElement( "Energy", d2mss({"Type1":"Blue", "Type2":"Green"}) ).getText()
     
     outputFile = open( fileName, append )
     if( append == "w" ):
         outputFile.write( "\t%s\t%s\t%s\t%s\t%s\t%s\n" % (   "BB", "GG", "MM", "MB", "MG", "BG" ) )
     outputFile.write( "%s\t%s\t%s\t%s\t%s\t%s\t%s\n" % ( mcs, BB,   GG,   MM,   MB,   MG,   BG  ) )
     outputFile.close()
    def writeContactEnergies(self,
                             mcs,
                             fileName="contactEnergies.txt",
                             append="w"):
        contactXMLData = self.simulator.getCC3DModuleData("Plugin", "Contact")
        BB = contactXMLData.getFirstElement(
            "Energy", d2mss({
                "Type1": "Blue",
                "Type2": "Blue"
            })).getText()
        GG = contactXMLData.getFirstElement(
            "Energy", d2mss({
                "Type1": "Green",
                "Type2": "Green"
            })).getText()
        MM = contactXMLData.getFirstElement(
            "Energy", d2mss({
                "Type1": "Medium",
                "Type2": "Medium"
            })).getText()
        MB = contactXMLData.getFirstElement(
            "Energy", d2mss({
                "Type1": "Medium",
                "Type2": "Blue"
            })).getText()
        MG = contactXMLData.getFirstElement(
            "Energy", d2mss({
                "Type1": "Medium",
                "Type2": "Green"
            })).getText()
        BG = contactXMLData.getFirstElement(
            "Energy", d2mss({
                "Type1": "Blue",
                "Type2": "Green"
            })).getText()

        outputFile = open(fileName, append)
        if (append == "w"):
            outputFile.write("\t%s\t%s\t%s\t%s\t%s\t%s\n" %
                             ("BB", "GG", "MM", "MB", "MG", "BG"))
        outputFile.write("%s\t%s\t%s\t%s\t%s\t%s\t%s\n" %
                         (mcs, BB, GG, MM, MB, MG, BG))
        outputFile.close()
 def modifyContactEnergies( self, BB_offset, GG_offset, steadyStateOffset,
     BB_scale = -30.0,  GG_scale = -10.0,
     MM_scale =  30.0,  MB_scale = -10.0,
     MG_scale =   0.0,  BG_scale =  10.0 ):
     
     contactXMLData = self.simulator.getCC3DModuleData( "Plugin", "Contact" )
     BB = contactXMLData.getFirstElement( "Energy", d2mss( {"Type1":"Blue", "Type2":"Blue"} ) )
     GG = contactXMLData.getFirstElement( "Energy", d2mss( {"Type1":"Green", "Type2":"Green"} ) )
     MM = contactXMLData.getFirstElement( "Energy", d2mss( {"Type1":"Medium", "Type2":"Medium"} ) )
     MB = contactXMLData.getFirstElement( "Energy", d2mss( {"Type1":"Medium", "Type2":"Blue"} ) )
     MG = contactXMLData.getFirstElement( "Energy", d2mss( {"Type1":"Medium", "Type2":"Green"} ) )
     BG = contactXMLData.getFirstElement( "Energy", d2mss( {"Type1":"Blue", "Type2":"Green"} ) )
     
     BB.updateElementValue( str( BB_scale + BB_offset  - steadyStateOffset ) )
     GG.updateElementValue( str( GG_scale + GG_offset - steadyStateOffset ) )
     MM.updateElementValue( str( MM_scale ) )
     MB.updateElementValue( str( MB_scale ) )
     MG.updateElementValue( str( MG_scale ) )
     BG.updateElementValue( str( BG_scale ) )
     
     self.simulator.updateCC3DModule(contactXMLData)
        editor = self.__ui.getCurrentEditor()

        cc3dXML2ObjConverter = XMLUtils.Xml2Obj()
        try:
            root_element = cc3dXML2ObjConverter.ParseString(str(editor.text()))
        except xml.parsers.expat.ExpatError, e:
            QMessageBox.critical(self.__ui, "Error Parsing CC3DML file",
                                 e.__str__())
            print 'GOT PARSING ERROR:', e
            return

        root_element.getFirstElement('Plugin')
        print 'root_element=', root_element

        cellTypeElement = root_element.getFirstElement(
            "Plugin", d2mss({"Name": "CellType"}))

        cellTypeDict = {}
        if not cellTypeElement or cellTypeElement is None:

            return cellTypeDict

        from XMLUtils import CC3DXMLListPy

        cellTypeElementVec = cellTypeElement.getElements("CellType")
        cellTypeElementVec = CC3DXMLListPy(
            cellTypeElement.getElements("CellType"))

        for element in cellTypeElementVec:
            typeName = ''
            typeId = -1
        import xml
        from XMLUtils import dictionaryToMapStrStr as d2mss
        editor = self.__ui.getCurrentEditor()

        cc3dXML2ObjConverter = XMLUtils.Xml2Obj()
        try:
            root_element = cc3dXML2ObjConverter.ParseString(str(editor.text()))
        except xml.parsers.expat.ExpatError, e:
            QMessageBox.critical(self.__ui, "Error Parsing CC3DML file", e.__str__())
            print 'GOT PARSING ERROR:', e
            return

        root_element.getFirstElement('Plugin')
        print 'root_element=', root_element

        cellTypeElement = root_element.getFirstElement("Plugin", d2mss({"Name": "CellType"}))

        cellTypeDict = {}
        if not cellTypeElement or cellTypeElement is None:
            return cellTypeDict

        from XMLUtils import CC3DXMLListPy

        cellTypeElementVec = cellTypeElement.getElements("CellType")
        cellTypeElementVec = CC3DXMLListPy(cellTypeElement.getElements("CellType"))

        for element in cellTypeElementVec:
            typeName = ''
            typeId = -1
            typeFreeze = False
            if element.findAttribute('TypeName'):
   pottsXMLData=self.simulator.getCC3DModuleData("Potts")
   temperatureElement=pottsXMLData.getFirstElement("Temperature")
   currentT=float(temperatureElement.getText())
   temperatureElement.updateElementValue(str(newT))
   self.simulator.updateCC3DModule(pottsXMLData)
 #
 Contact Energy Manipulation:
   from XMLUtils import dictionaryToMapStrStr as d2mss
   
   contactXMLData=self.simulator.getCC3DModuleData("Plugin","Contact")
   Type1name=self.typeIdTypeNameDict[cell.type]
   cellNeighborList=self.getCellNeighbors(cell) # generates list of neighbors of cell 'cell'
   for neighbor in cellNeighborList:
     if neighbor.neighborAddress:
       Type2name=self.typeIdTypeNameDict[neighbor.neighborAddress.type]
       contactEnergy=contactXMLData.getFirstElement("Energy",d2mss({"Type1":Type1name,"Type2":Type2name}))
       if not contactEnergy:
         contactEnergy=contactXMLData.getFirstElement("Energy",d2mss({"Type1":Type2name,"Type2":Type1name}))
       EnergyValue=float(contactEnergy.getText())
       contactEnergy.updateElementValue(str(NEW_VALUE))
 #
 Mitosis:
   from PySteppablesExamples import MitosisSteppableBase
   
   cells2div=[]
   for cell in self.cellList:
     if cell.volume>50:
       cells2div.append(cell)
   for cell in cells2div:
     self.divideCellRandomOrientation(cell)
     self.divideCellOrientationVectorBased(cell,1,0,0)