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)
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 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);
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 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)