def __init__(self, _energyWrapper): EnergyFunctionPy.__init__(self) self.energyWrapper = _energyWrapper self.st = 0.0 self.lambda_s = 0.0 self.potts = self.energyWrapper.potts self.cellField = self.energyWrapper.potts.getCellFieldG() self.nfparams = NeighborFinderParams()
def __init__(self,_energyWrapper): EnergyFunctionPy.__init__(self) self.energyWrapper=_energyWrapper self.st=0.0 self.lambda_s=0.0 self.potts=self.energyWrapper.potts self.cellField=self.energyWrapper.potts.getCellFieldG() self.nfparams=NeighborFinderParams()
class SurfaceEnergyFunction(EnergyFunctionPy): def __init__(self,_energyWrapper): EnergyFunctionPy.__init__(self) self.energyWrapper=_energyWrapper self.st=0.0 self.lambda_s=0.0 self.potts=self.energyWrapper.potts self.cellField=self.energyWrapper.potts.getCellFieldG() self.nfparams=NeighborFinderParams() def diffEnergy(self, surface, diff): return self.lambda_s *(diff * diff + 2 * diff * (surface - self.st)) def setParams(self,_lambda,_targetSurface): self.lambda_s=_lambda; self.st=_targetSurface def changeEnergy(self): energy=0.0 oldDiff=0 newDiff=0 oldCellId=-1 newCellId=-1 nCellId=-1 print_flag=0; #print "changePoint=",self.energyWrapper.changePt #if self.energyWrapper.changePoint.x==35 and self.energyWrapper.changePoint.y==16: #print_flag=1; #print "got:",self.energyWrapper.changePoint if self.energyWrapper.isOldCellValid(): oldCellId=self.energyWrapper.oldCell.id if self.energyWrapper.isNewCellValid(): newCellId=self.energyWrapper.newCell.id #if print_flag: #print "changePoint:",self.energyWrapper.changePoint self.nfparams.reset() self.nfparams.pt=self.energyWrapper.changePoint self.nfparams.checkBounds=0 #print "nfparams.pt=",self.nfparams.pt," neighbor=",self.cellField.nextNeighbor(self.nfparams) while 1: n=self.cellField.nextNeighbor(self.nfparams) if self.nfparams.distance>1: break #if print_flag: #print "chPt=",self.nfparams.pt," n=",n nCell=self.cellField.get(n) if self.energyWrapper.isCellMedium(nCell): nCellId=-1 else: nCellId=nCell.id; #print "energyWrapper.newCell=",self.energyWrapper.newCell.id," nCell=",nCell.id if newCellId==nCellId: newDiff=newDiff-1 else: newDiff=newDiff+1 if oldCellId==nCellId: oldDiff=oldDiff+1 else: oldDiff=oldDiff-1 #if print_flag: #print "oldDiff=",oldDiff," newDiff",newDiff if(self.energyWrapper.isNewCellValid()): #print "newCell.id=",self.energyWrapper.newCell.id #print "self.energyWrapper.newCell.surface=",self.energyWrapper.newCell.surface #energy+=self.diffEnergy(self.energyWrapper.newCell.surface, newDiff) energy+=self.lambda_s *(newDiff**2 + 2 * newDiff * (self.energyWrapper.newCell.surface - self.st)) #if print_flag: #print "self.energyWrapper.newCell.surface=",self.energyWrapper.newCell.surface #else: #print "NONE newCell.id=",self.energyWrapper.newCell.id if(self.energyWrapper.isOldCellValid()): #energy+=self.diffEnergy(self.energyWrapper.oldCell.surface, oldDiff) energy+=self.lambda_s *(oldDiff**2 + 2 * oldDiff * (self.energyWrapper.oldCell.surface - self.st)) #if print_flag: #print "self.energyWrapper.oldCell.surface=",self.energyWrapper.oldCell.surface #print "energy=",energy #if print_flag: #print "pt=",self.energyWrapper.changePoint," e=",energy return energy
class SurfaceEnergyFunction(EnergyFunctionPy): def __init__(self, _energyWrapper): EnergyFunctionPy.__init__(self) self.energyWrapper = _energyWrapper self.st = 0.0 self.lambda_s = 0.0 self.potts = self.energyWrapper.potts self.cellField = self.energyWrapper.potts.getCellFieldG() self.nfparams = NeighborFinderParams() def diffEnergy(self, surface, diff): return self.lambda_s * (diff * diff + 2 * diff * (surface - self.st)) def setParams(self, _lambda, _targetSurface): self.lambda_s = _lambda self.st = _targetSurface def changeEnergy(self): energy = 0.0 oldDiff = 0 newDiff = 0 oldCellId = -1 newCellId = -1 nCellId = -1 print_flag = 0 #print "changePoint=",self.energyWrapper.changePt #if self.energyWrapper.changePoint.x==35 and self.energyWrapper.changePoint.y==16: #print_flag=1; #print "got:",self.energyWrapper.changePoint if self.energyWrapper.isOldCellValid(): oldCellId = self.energyWrapper.oldCell.id if self.energyWrapper.isNewCellValid(): newCellId = self.energyWrapper.newCell.id #if print_flag: #print "changePoint:",self.energyWrapper.changePoint self.nfparams.reset() self.nfparams.pt = self.energyWrapper.changePoint self.nfparams.checkBounds = 0 #print "nfparams.pt=",self.nfparams.pt," neighbor=",self.cellField.nextNeighbor(self.nfparams) while 1: n = self.cellField.nextNeighbor(self.nfparams) if self.nfparams.distance > 1: break #if print_flag: #print "chPt=",self.nfparams.pt," n=",n nCell = self.cellField.get(n) if self.energyWrapper.isCellMedium(nCell): nCellId = -1 else: nCellId = nCell.id #print "energyWrapper.newCell=",self.energyWrapper.newCell.id," nCell=",nCell.id if newCellId == nCellId: newDiff = newDiff - 1 else: newDiff = newDiff + 1 if oldCellId == nCellId: oldDiff = oldDiff + 1 else: oldDiff = oldDiff - 1 #if print_flag: #print "oldDiff=",oldDiff," newDiff",newDiff if (self.energyWrapper.isNewCellValid()): #print "newCell.id=",self.energyWrapper.newCell.id #print "self.energyWrapper.newCell.surface=",self.energyWrapper.newCell.surface #energy+=self.diffEnergy(self.energyWrapper.newCell.surface, newDiff) energy += self.lambda_s * ( newDiff**2 + 2 * newDiff * (self.energyWrapper.newCell.surface - self.st)) #if print_flag: #print "self.energyWrapper.newCell.surface=",self.energyWrapper.newCell.surface #else: #print "NONE newCell.id=",self.energyWrapper.newCell.id if (self.energyWrapper.isOldCellValid()): #energy+=self.diffEnergy(self.energyWrapper.oldCell.surface, oldDiff) energy += self.lambda_s * ( oldDiff**2 + 2 * oldDiff * (self.energyWrapper.oldCell.surface - self.st)) #if print_flag: #print "self.energyWrapper.oldCell.surface=",self.energyWrapper.oldCell.surface #print "energy=",energy #if print_flag: #print "pt=",self.energyWrapper.changePoint," e=",energy return energy