Dear Charles Schwieters,
I am studying the structure of one anticancer peptide that has a ciclic
part of 10 amino acids and a linear part of 10 aa more.I determine the
structure already with XPLOR and beside the decent amount of distance
restriction from NOEs the RMSD is around 2A. I was thinking of
running Multiple-state Structure Calculation with eNOEs. Could you provide
me an example script of how to implement it in Xplor. I attached the
script that I am using.
Many thanks in advance,
Celia Gonzalez

########################################################################

To unsubscribe from the XPLOR-NIH list, click the following link:
http://list.nih.gov/cgi-bin/wa.exe?SUBED1=XPLOR-NIH&A=1
xplor.requireVersion("2.24")


#
# slow cooling protocol in torsion angle space for protein G. Uses 
# NOE, J-coupling restraints.
#
# this version refines from a reasonable model structure.
#
# CDS 2013/07/10
#

# this checks for typos on the command-line. User-customized arguments can
# also be specified.
#
xplor.parseArguments()


# filename for output structures. This string must contain the STRUCTURE
# literal so that each calculated structure has a unique name. The SCRIPT
# literal is replaced by this filename (or stdin if redirected using <),
# but it is optional.
#
inFilename = "out_sa/anneal300_*.sa"    #structures to analyze
outFilename = "out_refine/SCRIPT_STRUCTURE.sa"   #fit output structures

# protocol module has many high-level helper functions.
#
import protocol
protocol.initRandomSeed(3421)   #explicitly set random seed

#Inicializar par'ametros m'ios
#protocol.parameters['protein']="parallhdg.pro"
protocol.initParams(("protein-3.2-mod.par"))


protocol.initStruct("CIGB300.psf")

command = xplor.command
# read an existing model
#
protocol.initCoords("out_sa/anneal300_ave.pdb")

protocol.fixupCovalentGeom(maxIters=100,useVDW=1)

#
# a PotList contains a list of potential terms. This is used to specify which
# terms are active during refinement.
#
from potList import PotList
potList = PotList()

# parameters to ramp up during the simulated annealing protocol
#
from simulationTools import MultRamp, StaticRamp, InitialParams

rampedParams=[]
highTempParams=[]

# compare atomic Cartesian rmsd with a reference structure
#  backbone and heavy atom RMSDs will be printed in the output
#  structure files
#
from posDiffPotTools import create_PosDiffPot
refRMSD = create_PosDiffPot("refRMSD","name CA or name C or name N",
                            pdbFile="out_sa/anneal300_ave.pdb",
                            psf=("CIGB300.psf"),
                            cmpSel="not name H*")

# set up NOE potential
noe=PotList('noe')
potList.append(noe)
from noePotTools import create_NOEPot
for (name,scale,file) in [('all',1,"NOE300.tbl"),
                          #add entries for additional tables
                          ]:
    pot = create_NOEPot(name,file)
#    pot.setPotType("soft") # if you think there may be bad NOEs
    pot.setScale(scale)
    noe.append(pot)
rampedParams.append( MultRamp(2,30, "noe.setScale( VALUE )") )

## set up J coupling - with Karplus coefficients
#from jCoupPotTools import create_JCoupPot
#jCoup = create_JCoupPot("jcoup","jna_CI.tbl",
#                        A=6.98,B=-1.38,C=1.72,phase=-60.0)
#potList.append(jCoup)

## Set up dihedral angles
from xplorPot import XplorPot
#protocol.initDihedrals("dihe.tbl",
#                       useDefaults=False  # by default, symmetric sidechain
                                           # restraints are included
#                       )
#potList.append( XplorPot('CDIH') )
#highTempParams.append( StaticRamp("potList['CDIH'].setScale(10)") )
#rampedParams.append( StaticRamp("potList['CDIH'].setScale(200)") )

from dihedralPotTools import create_DihedralPot
dihePot = create_DihedralPot('dihePot') #,"dihe.tbl")
potList.append( dihePot )
highTempParams.append( StaticRamp("dihePot.setScale(10)") )
rampedParams.append( StaticRamp("dihePot.setScale(200)") )



# hbdb - distance/angle bb hbond term
#
protocol.initHBDB()
potList.append( XplorPot('HBDB') )

# HBPot - knowledge-based hydrogen bond term add new
#
from hbPotTools import create_HBPot
hb = create_HBPot('hb')
hb.setScale(2.5)
potList.append( hb )


# Statistical torsion angle potential
#
from torsionDBPotTools import create_TorsionDBPot
torsionDBPot = create_TorsionDBPot('tDB') #, selection="not resid 21"
potList.append( torsionDBPot )
rampedParams.append( MultRamp(.002,2,"torsionDBPot.setScale(VALUE)") )

#
# setup parameters for atom-atom repulsive term. (van der Waals-like term)
#
from repelPotTools import create_RepelPot,initRepel
repel = create_RepelPot('repel')
potList.append(repel)
rampedParams.append( StaticRamp("initRepel(repel,use14=False)") )
rampedParams.append( MultRamp(.004,4,  "repel.setScale( VALUE)") )
# nonbonded interaction only between CA atoms
highTempParams.append( StaticRamp("""initRepel(repel,
                                               use14=True,
                                               scale=0.004,
                                               repel=1.2,
                                               moveTol=45,
                                               interactingAtoms='name CA'
                                               )""") )

# Selected 1-4 interactions.
import torsionDBPotTools
repel14 = torsionDBPotTools.create_Terminal14Pot('repel14')
potList.append(repel14)
highTempParams.append(StaticRamp("repel14.setScale(0)"))
rampedParams.append(MultRamp(0.004, 4, "repel14.setScale(VALUE)"))
# nonbonded interaction only between CA atoms
highTempParams.append( StaticRamp("""protocol.initNBond(cutnb=100,
                                                        rcon=0.004,
                                                        tolerance=45,
                                                        repel=1.2,
                                                        onlyCA=0)""") )


potList.append( XplorPot("BOND") )
potList.append( XplorPot("ANGL") )
potList['ANGL'].setThreshold( 5 )
rampedParams.append( MultRamp(0.4,1,"potList['ANGL'].setScale(VALUE)") )
potList.append( XplorPot("IMPR") )
potList['IMPR'].setThreshold( 5 )
rampedParams.append( MultRamp(0.1,1,"potList['IMPR'].setScale(VALUE)") )
      


# Give atoms uniform weights, except for the anisotropy axis
#
protocol.massSetup()


# IVM setup
#   the IVM is used for performing dynamics and minimization in torsion-angle
#   space, and in Cartesian space.
#
from ivm import IVM
dyn = IVM()


# reset ivm topology for torsion-angle dynamics
#
dyn.reset()

protocol.torsionTopology(dyn)

# minc used for final cartesian minimization
#
minc = IVM()
protocol.initMinimize(minc)

protocol.cartesianTopology(minc)



# object which performs simulated annealing
#
from simulationTools import AnnealIVM
init_t  = 3000.     # Need high temp and slow annealing to converge
cool = AnnealIVM(initTemp =init_t,
                 finalTemp=25,
                 tempStep =12.5,
                 ivm=dyn,
                 rampedParams = rampedParams)

def accept(potList):
    """
    return True if current structure meets acceptance criteria
    """
    if potList['noe'].violations()>0:
        return False
    if potList['dihePot'].violations()>0:
        return False
    if potList['BOND'].violations()>0:
        return False
    if potList['ANGL'].violations()>0:
        return False
    if potList['IMPR'].violations()>0:
        return False
    if potList['repel'].violations()>0:
        return False
  
    return True

def calcOneStructure(loopInfo):
    """ this function calculates a single structure, performs analysis on the
    structure, and then writes out a pdb file, with remarks.
    """

    # initialize parameters for high temp dynamics.
    InitialParams( rampedParams )
    # high-temp dynamics setup - only need to specify parameters which
    #   differfrom initial values in rampedParams
    InitialParams( highTempParams )

    # high temp dynamics
    #
    protocol.initDynamics(dyn,
                          potList=potList, # potential terms to use
                          bathTemp=init_t,
                          initVelocities=1,
                          finalTime=10,    # stops at 10ps or 5000 steps
                          numSteps=5000,   # whichever comes first
                          printInterval=100)

    dyn.setETolerance( init_t/100 )  #used to det. stepsize. default: t/1000 
    dyn.run()

    # initialize parameters for cooling loop
    InitialParams( rampedParams )


    # initialize integrator for simulated annealing
    #
    protocol.initDynamics(dyn,
                          potList=potList,
                          numSteps=100,       #at each temp: 100 steps or
                          finalTime=.2 ,       # .2ps, whichever is less
                          printInterval=100)

    # perform simulated annealing
    #
    cool.run()
              
              
    # final torsion angle minimization
    #
    protocol.initMinimize(dyn,
                          printInterval=50)
    dyn.run()

    # final all- atom minimization
    #
    protocol.initMinimize(minc,
                          potList=potList,
                          dEPred=10,
                          numSteps=1000,
                          printInterval=50
                          )
    minc.run()

    #do analysis and write structure when this routine is finished.
    pass



from simulationTools import StructureLoop, FinalParams
StructureLoop(structLoopAction=calcOneStructure,
              pdbFilesIn=inFilename,
              pdbTemplate=outFilename,
#	      numStructures=numberOfStructures,              
              calcMissingStructs=True, #calculate only missing structures
              doWriteStructures=True,  #analyze and write coords after calc
              genViolationStats=1,
              averagePotList=potList,
              averageSortPots=[potList['BOND'],potList['ANGL'],potList['IMPR'],
                               noe,dihePot],  #potList['tDB']
              averageCrossTerms=refRMSD,
              averageTopFraction=0.1, #report only on best 5% of structs
              #averageAccept=accept,   #only use structures which pass accept()
              averageContext=FinalParams(rampedParams),
              averageFilename="out_refine/SCRIPT_ave.pdb",    #generate regularized ave structure
              averageFitSel="name CA or name N or name C or name O ",
              averageCompSel="not name H*"     ).run()

xplor.requireVersion("2.24")


#
# slow cooling protocol in torsion angle space for protein G. Uses 
# NOE, J-coupling restraints.
#
# this script performs annealing from an extended structure.
# It is faster than the original anneal.py
#
# CDS 2009/07/24
#

# this checks for typos on the command-line. User-customized arguments can
# also be specified.
#
xplor.parseArguments()


# filename for output structures. This string must contain the STRUCTURE
# literal so that each calculated structure has a unique name. The SCRIPT
# literal is replaced by this filename (or stdin if redirected using <),
# but it is optional.
#
outFilename = "out_sa/SCRIPT_STRUCTURE.sa"
numberOfStructures=200   #usually you want to create at least 20 

# protocol module has many high-level helper functions.
#
import protocol

protocol.initRandomSeed()   #set random seed - by time

#command = xplor.command('parameter @TOPPAR:parallhdg.pro @TOPPAR:aldrin_par_1.0.pro end')

command = xplor.command  #averiguar para que esta aqui

#Inicializar par'ametros m'ios
#protocol.parameters['protein']="parallhdg.pro"
protocol.initParams(("protein-3.2-mod.par"))

#Inicializar estructura
protocol.initStruct("CIGB300.psf")

# generate random extended initial structure with correct covalent geometry
#
protocol.genExtendedStructure()

#Inicializar coordenadas
#protocol.initCoords("template_VAD315.pdb")

#
# a PotList contains a list of potential terms. This is used to specify which
# terms are active during refinement.
#
from potList import PotList
potList = PotList()

# parameters to ramp up during the simulated annealing protocol
#
from simulationTools import MultRamp, StaticRamp, InitialParams

rampedParams=[]
highTempParams=[]

# compare atomic Cartesian rmsd with a reference structure
#  backbone and heavy atom RMSDs will be printed in the output
#  structure files
#
#from posDiffPotTools import create_PosDiffPot
#refRMSD = create_PosDiffPot("refRMSD","name CA or name C or name N",
#                            pdbFile='modelo.pdb',psf='AVV036.psf',
#                           cmpSel="not name H*")

# set up NOE potential
noe=PotList('noe')
potList.append(noe)
from noePotTools import create_NOEPot
for (name,scale,file) in [('all',1,"NOE300.tbl"),
                          #add entries for additional tables
                          ]:
    pot = create_NOEPot(name,file)
#    pot.setPotType("soft") # if you think there may be bad NOEs
    pot.setScale(scale)
    noe.append(pot)
rampedParams.append( MultRamp(2,30, "noe.setScale( VALUE )") )

## set up J coupling - with Karplus coefficients
#from jCoupPotTools import create_JCoupPot
#jCoup = create_JCoupPot("jcoup","jna_CI.tbl",
#                        A=6.98,B=-1.38,C=1.72,phase=-60.0)
#potList.append(jCoup)

## Set up dihedral angles
from xplorPot import XplorPot
#dihedralRestraintFilename="dihe.tbl"
#protocol.initDihedrals(dihedralRestraintFilename,
#                       useDefaults=False  # by default, symmetric sidechain
                                           # restraints are included
#                       )
potList.append( XplorPot('CDIH') )
highTempParams.append( StaticRamp("potList['CDIH'].setScale(10)") )
rampedParams.append( StaticRamp("potList['CDIH'].setScale(200)") )
#set custom values of threshold values for violation calculation

potList['CDIH'].setThreshold( 5 )


# hbdb - hbond database-based term
# CHEQUEAR SI SE INCLUYE O NO
protocol.initHBDB()
potList.append( XplorPot('HBDB') )

#New torsion angle database potential

from torsionDBPotTools import create_TorsionDBPot
torsionDB = create_TorsionDBPot('torsionDB') #, selection="not resid 21"
potList.append( torsionDB )
rampedParams.append( MultRamp(.002,2,"torsionDB.setScale(VALUE)") )

#
# setup parameters for atom-atom repulsive term. (van der Waals-like term)
#
potList.append( XplorPot('VDW') )
rampedParams.append( StaticRamp("protocol.initNBond()") )
rampedParams.append( MultRamp(0.9,0.8,
                              "command('param nbonds repel VALUE end end')") )
rampedParams.append( MultRamp(.004,4,
                              "command('param nbonds rcon VALUE end end')") )
# nonbonded interaction only between CA atoms
highTempParams.append( StaticRamp("""protocol.initNBond(cutnb=100,
                                                        rcon=0.004,
                                                        tolerance=45,
                                                        repel=1.2,
                                                        onlyCA=0)""") )


potList.append( XplorPot("BOND") )
potList.append( XplorPot("ANGL") )
potList['ANGL'].setThreshold( 5 )
rampedParams.append( MultRamp(0.4,1,"potList['ANGL'].setScale(VALUE)") )
potList.append( XplorPot("IMPR") )
potList['IMPR'].setThreshold( 5 )
rampedParams.append( MultRamp(0.1,1,"potList['IMPR'].setScale(VALUE)") )
      


# Give atoms uniform weights, configure bath/molecule friction coeff.
#
protocol.massSetup()


# IVM setup
#   the IVM is used for performing dynamics and minimization in torsion-angle
#   space, and in Cartesian space.
#
from ivm import IVM
dyn = IVM()

# configure ivm topology for torsion-angle dynamics
#
protocol.torsionTopology(dyn)

# minc used for final cartesian minimization
#
minc = IVM()
protocol.initMinimize(minc)

protocol.cartesianTopology(minc)



# object which performs simulated annealing
#
from simulationTools import AnnealIVM
init_t  = 3500.     # Need high temp and slow annealing to converge
cool = AnnealIVM(initTemp =init_t,
                 finalTemp=25,
                 tempStep =12.5,
                 ivm=dyn,
                 rampedParams = rampedParams)


def calcOneStructure(loopInfo):
    """ this function calculates a single structure, performs analysis on the
    structure, and then writes out a pdb file, with remarks.
    """

    # generate a new structure with randomized torsion angles
    #
    from monteCarlo import randomizeTorsions
    randomizeTorsions(dyn)
    protocol.fixupCovalentGeom(maxIters=100,useVDW=1)
#    protocol.fixupCovalentGeom(maxIters=1000,useVDW=1)

    # set torsion angles from restraints
    #
    from torsionTools import setTorsionsFromTable
#    setTorsionsFromTable(dihedralRestraintFilename)
    protocol.writePDB(loopInfo.filename()+".init")

    # calc. initial tensor orientation
    #

    # initialize parameters for high temp dynamics.
    InitialParams( rampedParams )
    # high-temp dynamics setup - only need to specify parameters which
    #   differfrom initial values in rampedParams
    InitialParams( highTempParams )

    # high temp dynamics
    #
    protocol.initDynamics(dyn,
                          potList=potList, # potential terms to use
                          bathTemp=init_t,
                          initVelocities=1,
                          finalTime=100,   # stops at 100ps or 1000 steps
                          numSteps=1000,   # whichever comes first
#                          finalTime=1000,   # stops at 800ps or 8000 steps
#                          numSteps=50000,   # whichever comes first
                          printInterval=100)

    dyn.setETolerance( init_t/100 )  #used to det. stepsize. default: t/1000 
    dyn.run()

    # initialize parameters for cooling loop
    InitialParams( rampedParams )


    # initialize integrator for simulated annealing
    #
    protocol.initDynamics(dyn,
                          potList=potList,
                          numSteps=100,       #at each temp: 100 steps or
                          finalTime=.2 ,       # .2ps, whichever is less
#                          numSteps=1000,       #at each temp: 1000 steps or
#                          finalTime=.4 ,       # .4ps, whichever is less
                          printInterval=100)

    # perform simulated annealing
    #
    cool.run()
              
              
    # final torsion angle minimization
    #
    protocol.initMinimize(dyn,
                          printInterval=50) #adicionar numSteps=1000
    dyn.run()
    
            # optional cooling in Cartesian coordinates
    #
    protocol.initDynamics(minc,
                          potList=potList,
                          numSteps=100,       #at each temp: 100 steps or
                          finalTime=.4 ,       # .2ps, whichever is less
                          printInterval=100)

    # final all- atomic degrees of freedom minimization
    #
    protocol.initMinimize(minc,
                          potList=potList,
                          dEPred=10
                          )
    minc.run()

    #do analysis and write structure when this function retunrs
    pass



from simulationTools import StructureLoop, FinalParams
StructureLoop(numStructures=numberOfStructures,
              doWriteStructures=True,
              pdbTemplate=outFilename,
              structLoopAction=calcOneStructure,
              genViolationStats=True,
              averageTopFraction=0.1, #report stats on best 10% of structs
              averageSortPots=[potList['BOND'],potList['ANGL'],potList['IMPR'],
                               noe,potList['CDIH']], #,potList['VDW']
              averageContext=FinalParams(rampedParams),
              averageFitSel=("name CA or name C or name N or name O"), #criterio de selecci'on
#              averageCrossTerms=refRMSD,
              averageFilename="out_sa/SCRIPT_ave.pdb",
              averagePotList=potList).run()
xplor.requireVersion("2.38")


#
# slow cooling protocol in torsion angle space for protein G. Uses 
# NOE, J-coupling restraints.
#
# this version refines from a reasonable model structure.
#
# CDS 2013/07/10
#

# this checks for typos on the command-line. User-customized arguments can
# also be specified.
#
xplor.parseArguments()


# filename for output structures. This string must contain the STRUCTURE
# literal so that each calculated structure has a unique name. The SCRIPT
# literal is replaced by this filename (or stdin if redirected using <),
# but it is optional.
#
inFilename = "out_refine/refine300*.sa"    #structures to analyze
outFilename = "out_minimiz/SCRIPT_STRUCTURE.min"   #fit output structures
#numberOfStructures=100   #usually you want to create at least 20 desactivado si se lee

# protocol module has many high-level helper functions.
#
import protocol
protocol.initRandomSeed(3421)   #explicitly set random seed

#Inicializar par'ametros m'ios
#protocol.parameters['protein']="charmm22/parallh22x.pro"
protocol.initParams(("protein-3.2-mod.par"))

protocol.initStruct("CIGB300.psf")

command = xplor.command
# read an existing model
#
protocol.initCoords("out_refine/refine300_ave.pdb")

#protocol.fixupCovalentGeom(maxIters=100,useVDW=1.2)

#
# a PotList contains a list of potential terms. This is used to specify which
# terms are active during refinement.
#
from potList import PotList
potList = PotList()

# parameters to ramp up during the simulated annealing protocol
#
from simulationTools import  StaticRamp, InitialParams

minimParams=[]
highTempParams=[]
rampedParams=[]

# compare atomic Cartesian rmsd with a reference structure
#  backbone and heavy atom RMSDs will be printed in the output
#  structure files
#
from posDiffPotTools import create_PosDiffPot
refRMSD = create_PosDiffPot("refRMSD","name CA or name C or name N",
                            pdbFile='out_refine/refine300_ave.pdb',
                            psf=("CIGB300.psf"),
                            cmpSel="not name H*")


# hbdb - distance/angle bb hbond term
#
from xplorPot import XplorPot
protocol.initHBDB()
potList.append( XplorPot('HBDB') )

# Statistical torsion angle potential
#
from torsionDBPotTools import create_TorsionDBPot
torsionDBPot = create_TorsionDBPot('tDB') #, selection="not resid 21")
potList.append( torsionDBPot )

#
# setup parameters for atom-atom repulsive term. (van der Waals-like term)
#

from repelPotTools import create_RepelPot,initRepel
repel = create_RepelPot('repel')
potList.append(repel)

import torsionDBPotTools
repel14 = torsionDBPotTools.create_Terminal14Pot('repel14')
potList.append(repel14)

potList.append( XplorPot("BOND") )
potList.append( XplorPot("ANGL") )
potList['ANGL'].setThreshold( 5 )
potList.append( XplorPot("IMPR") )
potList['IMPR'].setThreshold( 5 )

      


# Give atoms uniform weights, except for the anisotropy axis
#
#protocol.massSetup()


# IVM setup
#   the IVM is used for performing dynamics and minimization in torsion-angle
#   space, and in Cartesian space.
#
from ivm import IVM

# minc used for final cartesian minimization
#
minc = IVM()
protocol.initMinimize(minc)

protocol.cartesianTopology(minc)



def calcOneStructure(loopInfo):
    """ this function calculates a single structure, performs analysis on the
    structure, and then writes out a pdb file, with remarks.
    """
                
    # final all- atom minimization
    #

    protocol.initMinimize(minc,
			  numSteps=15000,
                          potList=potList,
                          printInterval=500,
                          dEPred=10
                          )
    minc.run()

    #do analysis and write structure when this routine is finished.
    pass


# set up NOE potential
noe=PotList('noe')
potList.append(noe)
from noePotTools import create_NOEPot
for (name,scale,file) in [('all',1,"NOE300.tbl"),
                          #add entries for additional tables
                          ]:
    pot = create_NOEPot(name,file)
#    pot.setPotType("soft") # if you think there may be bad NOEs
    pot.setScale(scale)
    noe.append(pot)

## set up J coupling - with Karplus coefficients
#from jCoupPotTools import create_JCoupPot
#jCoup = create_JCoupPot("jcoup","jna_CI.tbl",
#                        A=6.98,B=-1.38,C=1.72,phase=-60.0)
#potList.append(jCoup)

# Set up dihedral angles
from xplorPot import XplorPot
from dihedralPotTools import create_DihedralPot
dihePot = create_DihedralPot('dihePot') #,"dihe.tbl")
potList.append( dihePot )
highTempParams.append( StaticRamp("dihePot.setScale(10)") )
rampedParams.append( StaticRamp("dihePot.setScale(200)") )


def accept(potList):
    """
    return True if current structure meets acceptance criteria
    """
    if potList['noe'].violations()>0:
        return False
    if potList['dihePot'].violations()>0:
        return False
    if potList['BOND'].violations()>0:
        return False
    if potList['ANGL'].violations()>0:
        return False
    if potList['IMPR'].violations()>0:
        return False
    if potList['repel'].violations()>0:
        return False
    
    return True

from simulationTools import StructureLoop, FinalParams
StructureLoop(structLoopAction=calcOneStructure,
              pdbFilesIn=inFilename,
              pdbTemplate=outFilename,
#	      numStructures=numberOfStructures,              
              calcMissingStructs=True, #calculate only missing structures
              doWriteStructures=True,  #analyze and write coords after calc
              genViolationStats=1,
              averagePotList=potList,
              averageSortPots=[potList['BOND'],potList['ANGL'],potList['IMPR'],
                               noe,dihePot],
              averageCrossTerms=refRMSD,
              averageTopFraction=0.1, #report only on best 10% of structs
              averageAccept=accept,   #only use structures which pass accept()
#              averageContext=FinalParams(rampedParams),
              averageFilename="out_minimiz/SCRIPT_ave.pdb",    #generate regularized ave structure
              averageFitSel="name CA",
              averageCompSel="not name H*"     ).run()

xplor.requireVersion("2.26")

inputStructuresGlob="wrefine/minimiz300_*.min"

import glob
inputStructures=glob.glob(inputStructuresGlob)
#this could also be a list of filenames


simWorld.setRandomSeed( 785 )


import protocol

backbone="name C or name CA or name N or name O or name HN"

#Nilges topology/parameters
xplor.command('evaluate ($par_nonbonded = "OPLSX")')
protocol.parameters['protein']="waterRef/parallhdg5.3.pro.new"
protocol.parameters['water']  ="waterRef/parallhdg5.3.sol"
protocol.topology['protein']  ="waterRef/topallhdg5.3.pro.new"
protocol.topology['water']    ="waterRef/topallhdg5.3.sol"
waterResname="TIP3"
protocol.initParams(("protein-3.2-mod.par","ion.par"))

protocol.initStruct("CIGB300.psf")
#protocol.loadPDB(inputStructures[0],deleteUnknownAtoms=True)

from potList import PotList
from simulationTools import MultRamp, StaticRamp, FinalParams
potList = PotList()
rampedParams=[]

# orientation Tensor - used with the dipolar coupling term
#  one for each medium
#   For each medium, specify a name, and initial values of Da, Rh.
#
#from varTensorTools import create_VarTensor
#media={}
#                        medium  Da   rhombicity
#for (medium,Da,Rh) in [ ('t',   -6.5, 0.62),
#                        ('b',   -9.9, 0.23) ]:
 #   oTensor = create_VarTensor(medium)
  #  oTensor.setDa(Da)
   # oTensor.setRh(Rh)
    #media[medium] = oTensor
    #pass
    

# dipolar coupling restraints for protein amide NH.  
#
# collect all RDCs in the rdcs PotList
#
# RDC scaling. Three possible contributions.
#   1) gamma_A * gamma_B / r_AB^3 prefactor. So that the same Da can be used
#      for different expts. in the same medium. Sometimes the data is
#      prescaled so that this is not needed. scale_toNH() is used for this.
#      Note that if the expt. data has been prescaled, the values for rdc rmsd
#      reported in the output will relative to the scaled values- not the expt.
#      values.
#   2) expt. error scaling. Used here. A scale factor equal to 1/err^2
#      (relative to that for NH) is used.
#   3) sometimes the reciprocal of the Da^2 is used if there is a large
#      spread in Da values. Not used here.
#
#from rdcPotTools import create_RDCPot, scale_toNH
#rdcs = PotList('rdc') 
#for (medium,expt,file,                 scale) in \
#    [('t','NH' ,'tmv107_nh.tbl'       ,1),
#     ('t','NCO','tmv107_nc.tbl'       ,.05),
#     ('t','HNC','tmv107_hnc.tbl'      ,.108),
#     ('b','NH' ,'bicelles_new_nh.tbl' ,1),
#     ('b','NCO','bicelles_new_nc.tbl' ,.05),
#     ('b','HNC','bicelles_new_hnc.tbl',.108)
#     ]:
#    rdc = create_RDCPot("%s_%s"%(medium,expt),file,media[medium])

    #1) scale prefactor relative to NH
    #   see python/rdcPotTools.py for exact calculation
    # scale_toNH(rdc) - not needed for these datasets -
    #                        but non-NH reported rmsd values will be wrong.

    #3) Da rescaling factor (separate multiplicative factor)
    # scale *= ( 1. / rdc.oTensor.Da(0) )**2
#    rdc.setScale(scale)
#    rdc.setShowAllRestraints(1) #all restraints are printed during analysis
#    rdc.setThreshold(1.5)       # in Hz
#    rdcs.append(rdc)
#    pass
#potList.append(rdcs)
#rampedParams.append( MultRamp(0.05,5.0, "rdcs.setScale( VALUE )") )

# calc. initial tensor orientation
# and setup tensor calculation during simulated annealing
#
#from varTensorTools import calcTensorOrientation, calcTensor
#for medium in media.keys():
#    calcTensorOrientation(media[medium])
#    rampedParams.append( StaticRamp("calcTensor(media['%s'])" % medium) )
#    pass

# set up NOE potential
noe=PotList('noe')
potList.append(noe)
from noePotTools import create_NOEPot
for (name,scale,file) in [('all',1,"NOE300.tbl"),
                          #add entries for additional tables
                          ]:
    pot = create_NOEPot(name,file)
    # pot.setPotType("soft") - if you think there may be bad NOEs
    pot.setScale(scale)
    noe.append(pot)
rampedParams.append( MultRamp(2,30, "noe.setScale( VALUE )") )

# set up J coupling - with Karplus coefficients
#from jCoupPotTools import create_JCoupPot
#jCoup = create_JCoupPot("jcoup","jna_coup.tbl",
#                        A=6.98,B=-1.38,C=1.72,phase=-60.0)
#potList.append(jCoup)

# Set up dihedral angles
#from dihedralPotTools import create_DihedralPot
#dihePot = create_DihedralPot('dihePot',"dihed_g_all.tbl")
#potList.append( dihePot )
#rampedParams.append( StaticRamp("dihePot.setScale(200)") )


from simulationTools import StructureLoop


def calcOneStructure( structData ):
    from waterRefineTools import refine
    refine(outFilename=structData.filename(),
           potList=potList,
           coolingParams=rampedParams,
           keepWaters=True,
           waterResname=waterResname)
    pass


StructureLoop(pdbFilesIn=inputStructures,
              pdbTemplate="wrefine/SCRIPT_STRUCTURE.pdb",
              structLoopAction=calcOneStructure,
              genViolationStats=True,
              averagePotList=potList,
              averageFitSel="resid 15:25 and name CA C N",
              averageContext=FinalParams(rampedParams),
              ).run()

Reply via email to