def setMOLLYForceGroups(self): """ Initialize MOLLY force fields and energies. """ self.myMOLLYForcesBonded = ForceGroup() self.myMOLLYForcesHBonded = ForceGroup() self.myHBondForces = ForceGroup() self.mollyEnergy = ScalarStructure.ScalarStructure()
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
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()
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()
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)
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])