예제 #1
0
 def setMOLLYForceGroups(self):
     """
 Initialize MOLLY force fields and energies.
 """
     self.myMOLLYForcesBonded = ForceGroup()
     self.myMOLLYForcesHBonded = ForceGroup()
     self.myHBondForces = ForceGroup()
     self.mollyEnergy = ScalarStructure.ScalarStructure()
예제 #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
예제 #3
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
예제 #4
0
파일: MTS.py 프로젝트: badi/protomol-mirror
 def setMOLLYForceGroups(self):
   """
   Initialize MOLLY force fields and energies.
   """
   self.myMOLLYForcesBonded = ForceGroup()
   self.myMOLLYForcesHBonded = ForceGroup()
   self.myHBondForces = ForceGroup()
   self.mollyEnergy = ScalarStructure.ScalarStructure()
예제 #5
0
파일: MTS.py 프로젝트: badi/protomol-mirror
class MOLLY(MTS):
  """
  Parent class for all MOLLY propagators.
  """
  def setMOLLYForceGroups(self):
    """
    Initialize MOLLY force fields and energies.
    """
    self.myMOLLYForcesBonded = ForceGroup()
    self.myMOLLYForcesHBonded = ForceGroup()
    self.myHBondForces = ForceGroup()
    self.mollyEnergy = ScalarStructure.ScalarStructure()
  def calculateBondedForces(self):
    """
    Evaluate mollified bonded forces.
    """
    self.mollyForces.zero()
    self.myMOLLYForcesBonded.evaluateSystemForces(self.getTopo(), self.mollyPos, self.mollyForces, self.mollyEnergy)
예제 #6
0
class MOLLY(MTS):
    """
  Parent class for all MOLLY propagators.
  """
    def setMOLLYForceGroups(self):
        """
    Initialize MOLLY force fields and energies.
    """
        self.myMOLLYForcesBonded = ForceGroup()
        self.myMOLLYForcesHBonded = ForceGroup()
        self.myHBondForces = ForceGroup()
        self.mollyEnergy = ScalarStructure.ScalarStructure()

    def calculateBondedForces(self):
        """
    Evaluate mollified bonded forces.
    """
        self.mollyForces.zero()
        self.myMOLLYForcesBonded.evaluateSystemForces(self.getTopo(),
                                                      self.mollyPos,
                                                      self.mollyForces,
                                                      self.mollyEnergy)
def shootFireworkRing(x, y, z, color1, color2, amp):
    f = ParticleEffect.ParticleEffect()
    p0 = Particles.Particles('particles-1')
    p0.setFactory('PointParticleFactory')
    p0.setRenderer('SparkleParticleRenderer')
    p0.setEmitter('RingEmitter')
    p0.setPoolSize(100)
    p0.setBirthRate(0.01)
    p0.setLitterSize(100)
    p0.setLitterSpread(0)
    p0.factory.setLifespanBase(1.5)
    p0.factory.setLifespanSpread(0.5)
    p0.factory.setMassBase(1.0)
    p0.factory.setMassSpread(0.0)
    p0.factory.setTerminalVelocityBase(20.0)
    p0.factory.setTerminalVelocitySpread(2.0)
    p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT)
    p0.renderer.setUserAlpha(1.0)
    p0.renderer.setCenterColor(color1)
    p0.renderer.setEdgeColor(color2)
    p0.renderer.setBirthRadius(0.29999999999999999)
    p0.renderer.setDeathRadius(0.29999999999999999)
    p0.renderer.setLifeScale(SparkleParticleRenderer.SPNOSCALE)
    p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE)
    p0.emitter.setAmplitude(0)
    p0.emitter.setAmplitudeSpread(0)
    f0 = ForceGroup.ForceGroup('gravity')
    force0 = LinearSourceForce(Point3(x, y,
                                      z + 10), LinearDistanceForce.FTONEOVERR,
                               0.10000000000000001, 1.1000000000000001 * amp,
                               1)
    force0.setActive(1)
    f0.addForce(force0)
    force1 = LinearSinkForce(Point3(x, y, z + 10),
                             LinearDistanceForce.FTONEOVERR, 0.5, 2.0 * amp, 1)
    force1.setActive(1)
    f0.addForce(force1)
    f.addForceGroup(f0)
    p0.emitter.setRadius(4.0)
    f.addParticles(p0)
    f.setPos(x, y, z + 10)
    f.setHpr(0, random.random() * 180, random.random() * 180)
    sfx = loader.loadSfx('phase_4/audio/sfx/firework_distance_03.mp3')
    t = Sequence(Func(f.start, render, render),
                 Func(sfx.play),
                 Wait(0.5),
                 Func(p0.setBirthRate, 3),
                 Wait(1.5),
                 Func(f.cleanup),
                 name=getNextSequenceName('shootFireworkRing'))
    t.start()
def shootFireworkCircleSprite(x, y, z, color, texture, amp):
    f = ParticleEffect.ParticleEffect()
    p0 = Particles.Particles('particles-1')
    p0.setFactory('PointParticleFactory')
    p0.setRenderer('SpriteParticleRenderer')
    p0.setEmitter('SphereVolumeEmitter')
    p0.setPoolSize(100)
    p0.setBirthRate(0.01)
    p0.setLitterSize(100)
    p0.factory.setLifespanBase(2.0)
    p0.factory.setLifespanSpread(0.5)
    p0.factory.setTerminalVelocityBase(400.0)
    p0.factory.setTerminalVelocitySpread(40.0)
    p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAUSER)
    p0.renderer.setUserAlpha(1.0)
    p0.renderer.setFromNode(texture)
    p0.renderer.setColor(color)
    p0.renderer.setXScaleFlag(1)
    p0.renderer.setYScaleFlag(1)
    p0.renderer.setInitialXScale(0.01)
    p0.renderer.setFinalXScale(0.040000000000000001)
    p0.renderer.setInitialYScale(0.01)
    p0.renderer.setFinalYScale(0.040000000000000001)
    p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE)
    p0.emitter.setAmplitudeSpread(0.10000000000000001)
    p0.emitter.setAmplitude(amp)
    p0.emitter.setRadius(0.10000000000000001)
    f.addParticles(p0)
    circleForceGroup = ForceGroup.ForceGroup('gravity')
    force1 = LinearSinkForce(Point3(x, y, z - 100),
                             LinearDistanceForce.FTONEOVERRSQUARED, 2.0,
                             0.29999999999999999 * amp * 0.10000000000000001,
                             1)
    force1.setActive(1)
    circleForceGroup.addForce(force1)
    f.addForceGroup(circleForceGroup)
    f.setPos(x, y, z + 10)
    sfxName = random.choice(('phase_4/audio/sfx/firework_explosion_01.mp3',
                             'phase_4/audio/sfx/firework_explosion_02.mp3',
                             'phase_4/audio/sfx/firework_explosion_03.mp3'))
    sfx = loader.loadSfx(sfxName)
    t = Sequence(Func(f.start, render, render),
                 Func(sfx.play),
                 Wait(0.5),
                 Func(p0.setBirthRate, 3),
                 Wait(2.0),
                 Func(f.cleanup),
                 name=getNextSequenceName('shootFireworkSprite'))
    t.start()
def shootFireworkRocket(x, y, z, color1, color2, amp):
    f = ParticleEffect.ParticleEffect()
    p0 = Particles.Particles('particles-1')
    p0.setFactory('PointParticleFactory')
    p0.setRenderer('SparkleParticleRenderer')
    p0.setEmitter('SphereVolumeEmitter')
    p0.setPoolSize(110)
    p0.setBirthRate(0.01)
    p0.setLitterSize(2)
    p0.setLitterSpread(0)
    p0.factory.setLifespanBase(0.40000000000000002)
    p0.factory.setLifespanSpread(0.10000000000000001)
    p0.factory.setMassBase(1.0)
    p0.factory.setMassSpread(0.0)
    p0.factory.setTerminalVelocityBase(400.0)
    p0.factory.setTerminalVelocitySpread(0.0)
    p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT)
    p0.renderer.setUserAlpha(1.0)
    p0.renderer.setCenterColor(color1)
    p0.renderer.setEdgeColor(color2)
    p0.renderer.setBirthRadius(0.59999999999999998)
    p0.renderer.setDeathRadius(0.59999999999999998)
    p0.renderer.setLifeScale(SparkleParticleRenderer.SPNOSCALE)
    p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE)
    p0.emitter.setAmplitude(amp)
    p0.emitter.setAmplitudeSpread(0.0)
    p0.emitter.setRadius(0.29999999999999999)
    f.addParticles(p0)
    gravityForceGroup = ForceGroup.ForceGroup('gravity')
    force0 = LinearVectorForce(Vec3(0.0, 0.0, -10.0), 1.0, 0)
    force0.setActive(1)
    gravityForceGroup.addForce(force0)
    f.addForceGroup(gravityForceGroup)
    f.setPos(x, y, z)
    sfxName = random.choice(('phase_4/audio/sfx/firework_whistle_01.mp3',
                             'phase_4/audio/sfx/firework_whistle_02.mp3'))
    sfx = loader.loadSfx(sfxName)
    t = Sequence(Func(f.start, render, render),
                 Func(sfx.play),
                 LerpPosInterval(f,
                                 2.0,
                                 Vec3(x, y, z + 20 * amp),
                                 blendType='easeInOut'),
                 Func(p0.setBirthRate, 3),
                 Wait(0.5),
                 Func(f.cleanup),
                 name=getNextSequenceName('shootFirework'))
    t.start()
예제 #10
0
def shootFireworkCircleGeneric(x, y, z, color1, color2, amp, poolSize):
    f = ParticleEffect.ParticleEffect()
    p0 = Particles.Particles('particles-1')
    p0.setFactory('PointParticleFactory')
    p0.setRenderer('SparkleParticleRenderer')
    p0.setEmitter('SphereVolumeEmitter')
    p0.setPoolSize(poolSize)
    p0.setBirthRate(0.01)
    p0.setLitterSize(poolSize)
    p0.factory.setLifespanBase(2.0)
    p0.factory.setLifespanSpread(0.5)
    p0.factory.setTerminalVelocityBase(400.0)
    p0.factory.setTerminalVelocitySpread(40.0)
    p0.renderer.setAlphaMode(BaseParticleRenderer.PRALPHAOUT)
    p0.renderer.setUserAlpha(1.0)
    p0.renderer.setCenterColor(color1)
    p0.renderer.setEdgeColor(color1)
    p0.renderer.setBirthRadius(0.4)
    p0.renderer.setDeathRadius(0.6)
    p0.renderer.setLifeScale(SparkleParticleRenderer.SPSCALE)
    p0.emitter.setEmissionType(BaseParticleEmitter.ETRADIATE)
    p0.emitter.setAmplitudeSpread(0.1)
    p0.emitter.setAmplitude(amp)
    p0.emitter.setRadius(0.1)
    f.addParticles(p0)
    circleForceGroup = ForceGroup.ForceGroup('gravity')
    force1 = LinearSinkForce(Point3(x, y, z - 100),
                             LinearDistanceForce.FTONEOVERRSQUARED, 2.0,
                             0.3 * amp * 0.1, 1)
    force1.setActive(1)
    circleForceGroup.addForce(force1)
    f.addForceGroup(circleForceGroup)
    f.setPos(x, y, z + 10)
    sfxName = random.choice(('phase_4/audio/sfx/firework_explosion_01.mp3',
                             'phase_4/audio/sfx/firework_explosion_02.mp3',
                             'phase_4/audio/sfx/firework_explosion_03.mp3'))
    sfx = loader.loadSfx(sfxName)
    t = Sequence(Func(f.start, render, render),
                 Func(sfx.play),
                 Wait(0.5),
                 Func(p0.setBirthRate, 3),
                 Wait(0.5),
                 Func(p0.renderer.setCenterColor, color2),
                 Func(p0.renderer.setEdgeColor, color2),
                 Wait(1.5),
                 Func(f.cleanup),
                 name=getNextSequenceName('shootFireworkCircle'))
    t.start()
예제 #11
0
if __name__ == "__main__":
    from direct.directbase.TestStart import *
    
    from panda3d.physics import LinearVectorForce
    from panda3d.core import Vec3
    import ParticleEffect
    from direct.tkpanels import ParticlePanel
    import Particles
    import ForceGroup
    
    # Showbase
    base.enableParticles()
    
    # ForceGroup
    fg = ForceGroup.ForceGroup()
    gravity = LinearVectorForce(Vec3(0.0, 0.0, -10.0))
    fg.addForce(gravity)
    
    # Particles
    p = Particles.Particles()

    # Particle effect
    pe = ParticleEffect.ParticleEffect('particle-fx')
    pe.reparentTo(render)
    #pe.setPos(0.0, 5.0, 4.0)
    pe.addForceGroup(fg)
    pe.addParticles(p)
    
    # Particle Panel
    pp = ParticlePanel.ParticlePanel(pe)
예제 #12
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])
예제 #13
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])