Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
   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])
Ejemplo n.º 4
0
    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])