def deepCopyForce(self, ff): p = ff.params if (ff.charmm): ff2 = self.forces.makeForceField(self.phys, "charmm") else: ff2 = self.forces.makeForceField(self.phys) for ii in ff.forcetypes: ff2.forcetypes.append(ii) ff2.params = p ff2.build() #self.forces.removeForceField(ff) import ForceGroup ForceGroup._swig_setattr_nondynamic(ff2, ForceGroup.ForceGroup, "thisown", 0) return ff2
def deepCopyForce(self, ff): p = ff.params if ff.charmm: ff2 = self.forces.makeForceField(self.phys, "charmm") else: ff2 = self.forces.makeForceField(self.phys) for ii in ff.forcetypes: ff2.forcetypes.append(ii) ff2.params = p ff2.build() # self.forces.removeForceField(ff) import ForceGroup ForceGroup._swig_setattr_nondynamic(ff2, ForceGroup.ForceGroup, "thisown", 0) return ff2
def build(self): """ Using an MDL force factory, instantiate all force objects stored in the forcetypes data member of each force field. These will be SWIG-wrapped objects and are appended to the forcearray data member of each force field. """ # TMC 1-13-08: I think this can be improved. Future: # 1. Have a build() member of the ForceField class. # 2. Make the ForceFactory a singleton. # 3. Give the ForceFactory a method which maps force characters to creation functions. In this way there are multiple mapping levels. self.forceFactory.hd = 0 if (self.params['LennardJones'] != self.params['Coulomb']): self.breakLennardJonesCoulombForce() self.dirty = 0 self.forcearray = [] bornflag=-1 for forcetype in self.forcetypes: if (forcetype == 'b'): self.forcearray.append(self.forceFactory.createBondForce(self.bc)) elif (forcetype == 'a'): self.forcearray.append(self.forceFactory.createAngleForce(self.bc)) elif (forcetype == 'd'): self.forcearray.append(self.forceFactory.createDihedralForce(self.bc)) elif (forcetype == 'i'): self.forcearray.append(self.forceFactory.createImproperForce(self.bc)) elif (forcetype == 'l'): self.forcearray.append(self.forceFactory.createLennardJonesForce(self.bc, self.params['LennardJones'])) elif (forcetype == 'c'): if (self.params['Coulomb']['algorithm'] == 'SCPISM'): self.phys.myTop.doSCPISM = 1 self.phys.build() #if (not self.params['Coulomb'].has_key('NoBorn')): # print "CREATING BORN FORCE" # self.forcearray.append(self.forceFactory.createBornForce(self.bc, self.params['Coulomb'])) # bornflag = len(self.forcearray)-1 #else: # print "NOT CREATING BORN FORCE" if (self.params['Coulomb']['algorithm'] == 'GB' or self.params['Coulomb']['algorithm'] == 'GBACE'): self.forcearray.append(self.forceFactory.createBornBurial()) self.addForce(self.forcearray[len(self.forcearray)-1]) self.forcearray.append(self.forceFactory.createBornRadii()) self.addForce(self.forcearray[len(self.forcearray)-1]) if (not self.params['Coulomb'].has_key('OnlyBorn')): self.forcearray.append(self.forceFactory.createCoulombForce(self.bc, self.params['Coulomb'])) elif (forcetype == 'e'): self.forcearray.append(self.forceFactory.createCoulombDiElecForce(self.bc, self.params['CoulombDiElec'])) elif (forcetype == 'lc'): self.forcearray.append(self.forceFactory.createLennardJonesCoulombForce(self.bc, self.params['LennardJonesCoulomb'])) elif (forcetype == 'h'): self.forcearray.append(self.forceFactory.createHarmDihedralForce(self.bc, self.params['HarmonicDihedral'])) self.addForce(self.forcearray[len(self.forcearray)-1]) import ForceGroup ForceGroup._swig_setattr_nondynamic(self.forcearray[len(self.forcearray)-1], ForceGroup.Force, "thisown", 0) if (bornflag != -1): self.forcetypes.insert(bornflag, 'c') for pyforce in self.pythonforces: self.forcearray.append(PySystemForce.PySystemForce(pyforce)) PySystemForce._swig_setattr_nondynamic(self.forcearray[len(self.forcearray)-1], PySystemForce.PySystemForce, "thisown", 0) self.addSystemForce(self.forcearray[len(self.forcearray)-1])
def build(self): """ Using an MDL force factory, instantiate all force objects stored in the forcetypes data member of each force field. These will be SWIG-wrapped objects and are appended to the forcearray data member of each force field. """ # TMC 1-13-08: I think this can be improved. Future: # 1. Have a build() member of the ForceField class. # 2. Make the ForceFactory a singleton. # 3. Give the ForceFactory a method which maps force characters to creation functions. In this way there are multiple mapping levels. self.forceFactory.hd = 0 if (self.params['LennardJones'] != self.params['Coulomb']): self.breakLennardJonesCoulombForce() self.dirty = 0 self.forcearray = [] bornflag = -1 for forcetype in self.forcetypes: if (forcetype == 'b'): self.forcearray.append( self.forceFactory.createBondForce(self.bc)) elif (forcetype == 'a'): self.forcearray.append( self.forceFactory.createAngleForce(self.bc)) elif (forcetype == 'd'): self.forcearray.append( self.forceFactory.createDihedralForce(self.bc)) elif (forcetype == 'i'): self.forcearray.append( self.forceFactory.createImproperForce(self.bc)) elif (forcetype == 'l'): self.forcearray.append( self.forceFactory.createLennardJonesForce( self.bc, self.params['LennardJones'])) elif (forcetype == 'c'): if (self.params['Coulomb']['algorithm'] == 'SCPISM'): self.phys.myTop.doSCPISM = 1 self.phys.build() #if (not self.params['Coulomb'].has_key('NoBorn')): # print "CREATING BORN FORCE" # self.forcearray.append(self.forceFactory.createBornForce(self.bc, self.params['Coulomb'])) # bornflag = len(self.forcearray)-1 #else: # print "NOT CREATING BORN FORCE" if (self.params['Coulomb']['algorithm'] == 'GB' or self.params['Coulomb']['algorithm'] == 'GBACE'): self.forcearray.append( self.forceFactory.createBornBurial()) self.addForce(self.forcearray[len(self.forcearray) - 1]) self.forcearray.append(self.forceFactory.createBornRadii()) self.addForce(self.forcearray[len(self.forcearray) - 1]) if (not self.params['Coulomb'].has_key('OnlyBorn')): self.forcearray.append( self.forceFactory.createCoulombForce( self.bc, self.params['Coulomb'])) elif (forcetype == 'e'): self.forcearray.append( self.forceFactory.createCoulombDiElecForce( self.bc, self.params['CoulombDiElec'])) elif (forcetype == 'lc'): self.forcearray.append( self.forceFactory.createLennardJonesCoulombForce( self.bc, self.params['LennardJonesCoulomb'])) elif (forcetype == 'h'): self.forcearray.append( self.forceFactory.createHarmDihedralForce( self.bc, self.params['HarmonicDihedral'])) self.addForce(self.forcearray[len(self.forcearray) - 1]) import ForceGroup ForceGroup._swig_setattr_nondynamic( self.forcearray[len(self.forcearray) - 1], ForceGroup.Force, "thisown", 0) if (bornflag != -1): self.forcetypes.insert(bornflag, 'c') for pyforce in self.pythonforces: self.forcearray.append(PySystemForce.PySystemForce(pyforce)) PySystemForce._swig_setattr_nondynamic( self.forcearray[len(self.forcearray) - 1], PySystemForce.PySystemForce, "thisown", 0) self.addSystemForce(self.forcearray[len(self.forcearray) - 1])