# PRINT INITIAL STRING I0 print "\nI0: ", print z #io.plotVector(prop[0][0],stringgraph,z, rangex=[-numpy.pi, numpy.pi], rangey=[-numpy.pi, numpy.pi]) dt = 1.0 for iter in range(0, numsteps): # NUMBER OF FTSM ITERATIONS for p in range(0, numpoints): # LOOPING OVER POINTS if (iter >= 10000 and iter <= 100000): kappa += (100. - 40.) / 90000. if (p != 0 or iter != 0): FTSM.setConstraint(PHI, PSI, phi=z[p][0], psi=z[p][1], kappa=kappa, forcefield=ff) # UPDATE FREE SPACE # USE FIRST SYSTEM TO GET M # USE SECOND SYSTEM TO OBTAIN PHI AND PSI DIFFERENCES # FROM TARGETS zp0 = z[p][0] z[p][0] -= (kappa / gamma) * dt * (FTSM.M(x[p], PHI, PHI) * (z[p][0] - y[p].dihedral(PHI)) + FTSM.M(x[p], PHI, PSI) * (z[p][1] - y[p].dihedral(PSI))) z[p][1] -= (kappa / gamma) * dt * (FTSM.M(x[p], PSI, PHI) * (zp0 - y[p].dihedral(PHI)) + FTSM.M(x[p], PSI, PSI) *
'switching': 'C2' } ff.params['CoulombDiElec'] = { 'algorithm': 'Cutoff', 'switching': 'Cn', 'switchon': 10, 'cutoff': 12, 'order': 2 } for ii in range(0, numgridsquares): for jj in range(0, numgridsquares): print "BOX: ", ii, jj if (ii != 0): FTSM.setConstraint(PHI, PSI, midpts[ii][jj][0], midpts[ii][jj][1], kappa, ff) elif (jj != 0): FTSM.setConstraint(PHI, PSI, midpts[ii][jj][0], midpts[ii][jj][1], kappa, ff) pts = ii * numgridsquares + jj for i in range(0, 20): myProp.propagate(scheme="LangevinImpulse", steps=100, dt=1.0, forcefield=ff, params={ 'temp': 300, 'gamma': 91 })
#stringgraph=io.newGraph('Phi', 'Psi') # PRINT INITIAL STRING I0 print "\nI0: ", print z #io.plotVector(prop[0][0],stringgraph,z, rangex=[-numpy.pi, numpy.pi], rangey=[-numpy.pi, numpy.pi]) dt = 1.0 for iter in range(0, numsteps): # NUMBER OF FTSM ITERATIONS for p in range(0, numpoints): # LOOPING OVER POINTS if (iter >= 10000 and iter <= 100000): kappa += (100.-40.)/90000. if (p != 0 or iter != 0): FTSM.setConstraint(PHI, PSI, phi=z[p][0], psi=z[p][1], kappa=kappa, forcefield=ff) # UPDATE FREE SPACE # USE FIRST SYSTEM TO GET M # USE SECOND SYSTEM TO OBTAIN PHI AND PSI DIFFERENCES # FROM TARGETS zp0 = z[p][0] z[p][0] -= (kappa/gamma)*dt*(FTSM.M(x[p], PHI, PHI)*(z[p][0]-y[p].dihedral(PHI)) + FTSM.M(x[p], PHI, PSI)*(z[p][1] - y[p].dihedral(PSI))) z[p][1] -= (kappa/gamma)*dt*(FTSM.M(x[p], PSI, PHI)*(zp0-y[p].dihedral(PHI)) + FTSM.M(x[p], PSI, PSI)*(z[p][1] - y[p].dihedral(PSI))) # UPDATE CARTESIAN prop[p][0].propagate(scheme="velocityscale", steps=1, dt=dt, forcefield=ff, params={'T0':300}) prop[p][1].propagate(scheme="velocityscale", steps=1, dt=dt, forcefield=ff, params={'T0':300})
sys.exit(0) ff.params['HarmonicDihedral'] = {'kbias':[kappa, kappa], 'dihedralnum':[PHI-1, PSI-1], 'angle':[z_p[0], z_p[1]]} dt = 1.0 kappaincr = (1000.-40.)/100000. for iter in range(0, 2000): # NUMBER OF FTSM ITERATIONS #for workpt in range(0, numpoints): # LOOPING OVER POINTS if (iter >= 10001 and iter <= 110000): kappa += kappaincr if (iter != 0): FTSM.setConstraint(PHI, PSI, phi=z_p[0], psi=z_p[1], kappa=kappa, forcefield=ff) # UPDATE FREE SPACE # USE FIRST SYSTEM TO GET M # USE SECOND SYSTEM TO OBTAIN PHI AND PSI DIFFERENCES # FROM TARGETS zp0 = z_p[0] z_p[0] -= (kappa/gamma)*dt*(FTSM.M(x, PHI, PHI)*(z_p[0]-y.angle(PHI)) + FTSM.M(x, PHI, PSI)*(z_p[1] - y.angle(PSI))) z_p[1] -= (kappa/gamma)*dt*(FTSM.M(x, PSI, PHI)*(zp0-y.angle(PHI)) + FTSM.M(x, PSI, PSI)*(z_p[1] - y.angle(PSI))) # UPDATE CARTESIAN # Dr. Izaguirre: I have checked and this constraint # is correct. The energy is harmonic, but the force (the gradient) # is not harmonic. In fact it is exactly what is in the paper. prop[0].propagate(scheme="velocityscale", steps=1, dt=dt, forcefield=ff, params={'T0':300}) prop[1].propagate(scheme="velocityscale", steps=1, dt=dt, forcefield=ff, params={'T0':300})
'cutoff':12, 'switchon':10, 'switching':'C2'} ff.params['CoulombDiElec'] = {'algorithm':'Cutoff', 'switching':'Cn', 'switchon':10, 'cutoff':12, 'order':2} for ii in range(0,numgridsquares): for jj in range(0,numgridsquares): print "BOX: ", ii, jj if (ii !=0): FTSM.setConstraint(PHI, PSI, midpts[ii][jj][0],midpts[ii][jj][1],kappa,ff) elif (jj != 0) : FTSM.setConstraint(PHI, PSI, midpts[ii][jj][0],midpts[ii][jj][1],kappa,ff) pts = ii*numgridsquares + jj for i in range(0,20): myProp.propagate(scheme="LangevinImpulse",steps=100,dt=1.0,forcefield=ff,params={'temp':300,'gamma':91}) FTSM.setConstraint(PHI, PSI, midpts[ii][jj][0],midpts[ii][jj][1],kappa1,ff) #Equilibrate at this point for a bit myProp.propagate(scheme="LangevinImpulse",steps=50,dt=1.0,forcefield=ff,params={'temp':300,'gamma':91}) ef = outdir+'/sampleatrc.energies.'+str(ii)+'.'+str(jj) df = outdir+'/sampleatrc.'+str(ii)+'.'+str(jj)+'.dcd'
#converged = False #d = 40000 #initial = copy(z) convergedPhis = [] convergedPsis = [] matlabfile = open("formatlab.txt", "w") for iter in range(0, numsteps): # NUMBER OF FTSM ITERATIONS for p in range(0, numpoints): # LOOPING OVER POINTS if (iter >= 15000):# and iter <= 100000): kappa += (100.-40.)/90000. if (p != 0 or iter != 0): FTSM.setConstraint(PHI, PSI, phi=z[p][0], psi=z[p][1], kappa=kappa, forcefield=ff) # UPDATE FREE SPACE # USE FIRST SYSTEM TO GET M # USE SECOND SYSTEM TO OBTAIN PHI AND PSI DIFFERENCES # FROM TARGETS zp0 = z[p][0] z[p][0] -= (kappa/gamma)*dt*(FTSM.M(x[p], PHI, PHI)*(z[p][0]-y[p].dihedral(PHI)) + FTSM.M(x[p], PHI, PSI)*(z[p][1] - y[p].dihedral(PSI))) z[p][1] -= (kappa/gamma)*dt*(FTSM.M(x[p], PSI, PHI)*(zp0-y[p].dihedral(PHI)) + FTSM.M(x[p], PSI, PSI)*(z[p][1] - y[p].dihedral(PSI))) # My own function which sets phi and psi for individual force objects # Saves performance since I only change 'angle', I don't want to define # all new force objects by changing params. #if (iter != 0 or p != 0): # FTSM.setConstraint(phi=z[p][0], psi=z[p][1], kappa=kappa, forcefield=ff) # UPDATE CARTESIAN
io.plotVector(proparray[0][0],stringgraph,S, rangex=[-numpy.pi, 0], rangey=[-100*numpy.pi/180, numpy.pi]) # SET THE STATE BACK TO THE ORIGINAL PDB #io.readPDBPos(physarray[0][0], "examples/alanSolStates/alanC7axial_wb5_min_eq.pdb") dt = 1.0 for iter in range(0, 100000): # NUMBER OF FTSM ITERATIONS for workpt in range(0, numpoints): # LOOPING OVER POINTS if (iter >= 10000 and iter <= 100000): kappa += (100.-40.)/90000. # UPDATE FREE SPACE # USE FIRST SYSTEM TO GET M # USE SECOND SYSTEM TO OBTAIN PHI AND PSI DIFFERENCES # FROM TARGETS M = FTSM.M(physarray[workpt][0], PHI_DIHEDRAL, PSI_DIHEDRAL) #print "DIFFERENCE: ", S[workpt][0]-physarray[workpt][1].phi(PHI_DIHEDRAL), " " , S[workpt][1]-physarray[workpt][1].phi(PSI_DIHEDRAL) S[workpt][0] -= (kappa/gamma)*M*dt*(S[workpt][0]-physarray[workpt][1].phi(PHI_DIHEDRAL)) S[workpt][1] -= (kappa/gamma)*M*dt*(S[workpt][1]-physarray[workpt][1].phi(PSI_DIHEDRAL)) # UPDATE CARTESIAN # Dr. Izaguirre: I have checked and this constraint # is correct. The energy is harmonic, but the force (the gradient) # is not harmonic. In fact it is exactly what is in the paper. proparray[workpt][0].propagate(scheme="LangevinImpulse", steps=1, dt=dt, forcefield=ff) proparray[workpt][1].propagate(scheme="LangevinImpulse", steps=1, dt=dt, forcefield=ff) # My own function which sets phi and psi for individual force objects # Saves performance since I only change 'angle', I don't want to define # all new force objects by changing params.
'kbias': [kappa, kappa], 'dihedralnum': [PHI - 1, PSI - 1], 'angle': [z_p[0], z_p[1]] } dt = 1.0 kappaincr = (1000. - 40.) / 100000. for iter in range(0, 2000): # NUMBER OF FTSM ITERATIONS #for workpt in range(0, numpoints): # LOOPING OVER POINTS if (iter >= 10001 and iter <= 110000): kappa += kappaincr if (iter != 0): FTSM.setConstraint(PHI, PSI, phi=z_p[0], psi=z_p[1], kappa=kappa, forcefield=ff) # UPDATE FREE SPACE # USE FIRST SYSTEM TO GET M # USE SECOND SYSTEM TO OBTAIN PHI AND PSI DIFFERENCES # FROM TARGETS zp0 = z_p[0] z_p[0] -= (kappa / gamma) * dt * (FTSM.M(x, PHI, PHI) * (z_p[0] - y.angle(PHI)) + FTSM.M(x, PHI, PSI) * (z_p[1] - y.angle(PSI))) z_p[1] -= (kappa / gamma) * dt * (FTSM.M(x, PSI, PHI) * (zp0 - y.angle(PHI)) + FTSM.M(x, PSI, PSI) * (z_p[1] - y.angle(PSI)))