Пример #1
0
structurePdbPath = "system.pdb"
engineSavePath = "system.rmc"
FRESH_START = False

#  ####################################################################################  #
#  ################################### CREATE ENGINE ##################################  #
ENGINE = Engine(path=None)
if not ENGINE.is_engine(engineSavePath) or FRESH_START:
    ENGINE = Engine(path=engineSavePath, freshStart=True)
    ENGINE.set_pdb(structurePdbPath)
    ## create and add pair distribution constraint
    PDF_CONSTRAINT = PairDistributionConstraint(
        experimentalData=experimentalDataPath, weighting="atomicNumber")
    ENGINE.add_constraints([PDF_CONSTRAINT])
    ## create and add intermolecular distances constraint
    EMD_CONSTRAINT = InterMolecularDistanceConstraint()
    ENGINE.add_constraints([EMD_CONSTRAINT])
    EMD_CONSTRAINT.set_type_definition("element")
    EMD_CONSTRAINT.set_pairs_distance([
        ('Co', 'Co', 2.00),
        ('Co', 'Mn', 2.00),
        ('Co', 'Ni', 2.00),
        ('Co', 'Li', 2.00),
        ('Co', 'O', 1.7),
        ('Mn', 'Mn', 2.00),
        ('Mn', 'Li', 2.00),
        ('Mn', 'Ni', 2.00),
        ('Mn', 'O', 1.7),
        ('Ni', 'Ni', 2.00),
        ('Ni', 'Li', 2.00),
        ('Ni', 'O', 1.7),
Пример #2
0
##################################  SHUT DOWN LOGGING  ###################################
LOGGER.set_minimum_level(sys.maxint, stdoutFlag=True, fileFlag=True)

##########################################################################################
#####################################  CREATE ENGINE  ####################################
# parameters
NSTEPS = 10000
pdbPath = 'system.pdb'
expData = 'experimental.gr'
# initialize engine
ENGINE = Engine(path=None)
ENGINE.set_pdb(pdbPath)
# create constraints
PDF_CONSTRAINT = PairDistributionConstraint(experimentalData=expData,
                                            weighting="atomicNumber")
EMD_CONSTRAINT = InterMolecularDistanceConstraint()
B_CONSTRAINT = BondConstraint()
BA_CONSTRAINT = BondsAngleConstraint()
IA_CONSTRAINT = ImproperAngleConstraint()
# add constraints to engine
ENGINE.add_constraints([
    PDF_CONSTRAINT, EMD_CONSTRAINT, B_CONSTRAINT, BA_CONSTRAINT, IA_CONSTRAINT
])
# initialize constraints definitions
B_CONSTRAINT.create_bonds_by_definition(
    bondsDefinition={
        "THF": [('O', 'C1', 1.22,
                 1.70), ('O', 'C4', 1.22, 1.70), (
                     'C1', 'C2', 1.25,
                     1.90), ('C2', 'C3', 1.25, 1.90), (
                         'C3', 'C4', 1.25,
Пример #3
0
    # add G(r) constraint
    PDF_CONSTRAINT = PairDistributionConstraint(experimentalData=grExpPath,
                                                weighting="atomicNumber")
    ENGINE.add_constraints([PDF_CONSTRAINT])
    # Rebin S(Q) experimental data and build constraint
    Sq = np.transpose(rebin(np.loadtxt(sqExpPath),
                            bin=0.05)).astype(FLOAT_TYPE)
    RSF_CONSTRAINT = ReducedStructureFactorConstraint(experimentalData=Sq,
                                                      weighting="atomicNumber")
    ENGINE.add_constraints([RSF_CONSTRAINT])
    # add coordination number constraint and set to un-used
    ACN_CONSTRAINT = AtomicCoordinationNumberConstraint()
    ENGINE.add_constraints([ACN_CONSTRAINT])
    ACN_CONSTRAINT.set_used(False)
    # add inter-molecular distance constraint
    EMD_CONSTRAINT = InterMolecularDistanceConstraint(defaultDistance=2.2,
                                                      flexible=True)
    ENGINE.add_constraints([EMD_CONSTRAINT])
    # save engine
    ENGINE.save()
else:
    ENGINE = ENGINE.load(engineFilePath)
    # unpack constraints before fitting in case tweaking is needed
    PDF_CONSTRAINT, RSF_CONSTRAINT, ACN_CONSTRAINT, EMD_CONSTRAINT = ENGINE.constraints


##########################################################################################
#####################################  DIFFERENT RUNS  ###################################
def run_normal(nsteps, saveFrequency, engineFilePath):
    ENGINE.set_groups_as_atoms()
    ENGINE.run(numberOfSteps=nsteps,
               saveFrequency=saveFrequency,
Пример #4
0
##########################################################################################
#####################################  CREATE ENGINE  ####################################
# file names
expDataPath = "Xrays.gr"
pdbPath = "CO2.pdb"
enginePath = "CO2.rmc"
FRESH_START = False

ENGINE = Engine(path=None)
if not ENGINE.is_engine(enginePath) or FRESH_START:
    # initialize engine
    ENGINE = Engine(path=enginePath, freshStart=True)
    ENGINE.set_pdb(pdbPath)
    PDF_CONSTRAINT = PairDistributionConstraint(experimentalData=expDataPath,
                                                weighting="atomicNumber")
    IMD_CONSTRAINT = InterMolecularDistanceConstraint(defaultDistance=1.4)
    B_CONSTRAINT = BondConstraint()
    BA_CONSTRAINT = BondsAngleConstraint()
    # add constraints
    ENGINE.add_constraints(
        [PDF_CONSTRAINT, IMD_CONSTRAINT, B_CONSTRAINT, BA_CONSTRAINT])
    B_CONSTRAINT.create_bonds_by_definition(bondsDefinition={
        "CO2": [('C', 'O1', 0.52, 1.4), ('C', 'O2', 0.52, 1.4)]
    })
    BA_CONSTRAINT.create_angles_by_definition(
        anglesDefinition={"CO2": [('C', 'O1', 'O2', 170, 180)]})
    # initialize constraints data
    ENGINE.initialize_used_constraints()
    # save engine
    ENGINE.save()
else:
Пример #5
0
ENGINE = Engine(path=None)
if not ENGINE.is_engine(engineFilePath) or FRESH_START:
   # create engine
    ENGINE = Engine(path=engineFilePath, freshStart=True)
    ENGINE.set_pdb(pdbPath)
    # create and add pair distribution constraint to the engine
    PDF_CONSTRAINT = PairDistributionConstraint(experimentalData=grExpPath, weighting="atomicNumber")
    # shape function parameters
    params = {'rmin':0., 'rmax':None, 'dr':0.5,
              'qmin':0.0001, 'qmax':0.6, 'dq':0.005,
              'updateFreq':1000}
    PDF_CONSTRAINT.set_shape_function_parameters(params)
    ENGINE.add_constraints([PDF_CONSTRAINT])
    # Intermolecular constraint
    EMD_CONSTRAINT = InterMolecularDistanceConstraint()
    ENGINE.add_constraints([EMD_CONSTRAINT])
    EMD_CONSTRAINT.set_type_definition("element")
    EMD_CONSTRAINT.set_pairs_distance([('Si','Si',1.75), ('O','O',1.10), ('Si','O',1.30)])
    # coordination number constraint
    ACNC_CONSTRAINT = AtomicCoordinationNumberConstraint()
    ENGINE.add_constraints([ACNC_CONSTRAINT])
    ACNC_CONSTRAINT.set_coordination_number_definition( coordNumDef=[('Si','Si',1.8,2.8,3,6), ])
    # initialize constraints
    _ = ENGINE.initialize_used_constraints()
    # set number density
    ENGINE.set_number_density(.0125)
    # save engine
    ENGINE.save()
else:
    ENGINE = ENGINE.load(engineFilePath)
Пример #6
0
from fullrmc.Core.MoveGenerator import MoveGeneratorCollector
from fullrmc.Constraints.DistanceConstraints import InterMolecularDistanceConstraint
from fullrmc.Generators.Rotations import RotationGenerator
from fullrmc.Generators.Translations import TranslationTowardsCenterGenerator

##########################################################################################
##################################  SHUT DOWN LOGGING  ###################################
LOGGER.set_minimum_level(sys.maxint, stdoutFlag=True, fileFlag=True)

##########################################################################################
#####################################  CREATE ENGINE  ####################################
pdbPath = "system.pdb"
ENGINE = Engine(path=None)
ENGINE.set_pdb(pdbPath)
# add inter-molecular distance constraint
EMD_CONSTRAINT = InterMolecularDistanceConstraint(defaultDistance=1.75)
ENGINE.add_constraints([EMD_CONSTRAINT])


##########################################################################################
####################################  DIFFERENT RUNS  ####################################
def move_towards():
    # set only one molecule group
    ENGINE.set_groups_as_molecules()
    secMolIdxs = ENGINE.groups[1].indexes
    ENGINE.set_groups(ENGINE.groups[0])
    # set move generator
    for g in ENGINE.groups:
        t = TranslationTowardsCenterGenerator(center={'indexes': secMolIdxs},
                                              amplitude=0.15,
                                              angle=90)
Пример #7
0
def run_engine(PDF=True,
               IMD=True,
               B=True,
               BA=True,
               IA=True,
               molecular=True,
               nsteps=10000,
               ncores=1):
    ENGINE = Engine(path=None)
    ENGINE.set_pdb(pdbPath)
    # create experimental constraints
    if PDF:
        C = PairDistributionConstraint(experimentalData=expPath,
                                       weighting="atomicNumber")
        ENGINE.add_constraints(C)
    # create and define molecular constraints
    if IMD:
        C = InterMolecularDistanceConstraint(defaultDistance=1.5)
        ENGINE.add_constraints(C)
    if B:
        C = BondConstraint()
        ENGINE.add_constraints(C)
        C.create_bonds_by_definition(
            bondsDefinition={
                "THF": [('O', 'C1', 1.29,
                         1.70), ('O', 'C4', 1.29,
                                 1.70), ('C1', 'C2', 1.29,
                                         1.70), ('C2', 'C3', 1.29,
                                                 1.70), ('C3', 'C4', 1.29,
                                                         1.70),
                        ('C1', 'H11', 0.58,
                         1.15), ('C1', 'H12', 0.58,
                                 1.15), ('C2', 'H21', 0.58,
                                         1.15), ('C2', 'H22', 0.58, 1.15),
                        ('C3', 'H31', 0.58,
                         1.15), ('C3', 'H32', 0.58,
                                 1.15), ('C4', 'H41', 0.58,
                                         1.15), ('C4', 'H42', 0.58, 1.15)]
            })
    if BA:
        C = BondsAngleConstraint()
        ENGINE.add_constraints(C)
        C.create_angles_by_definition(
            anglesDefinition={
                "THF": [
                    ('O', 'C1', 'C4', 95, 135),
                    ('C1', 'O', 'C2', 95, 135),
                    ('C4', 'O', 'C3', 95, 135),
                    ('C2', 'C1', 'C3', 90, 120),
                    ('C3', 'C2', 'C4', 90, 120),
                    # H-C-H angle
                    ('C1', 'H11', 'H12', 95, 125),
                    ('C2', 'H21', 'H22', 95, 125),
                    ('C3', 'H31', 'H32', 95, 125),
                    ('C4', 'H41', 'H42', 95, 125),
                    # H-C-O angle
                    ('C1', 'H11', 'O', 100, 120),
                    ('C1', 'H12', 'O', 100, 120),
                    ('C4', 'H41', 'O', 100, 120),
                    ('C4', 'H42', 'O', 100, 120),
                    # H-C-C
                    ('C1', 'H11', 'C2', 80, 123),
                    ('C1', 'H12', 'C2', 80, 123),
                    ('C2', 'H21', 'C1', 80, 123),
                    ('C2', 'H21', 'C3', 80, 123),
                    ('C2', 'H22', 'C1', 80, 123),
                    ('C2', 'H22', 'C3', 80, 123),
                    ('C3', 'H31', 'C2', 80, 123),
                    ('C3', 'H31', 'C4', 80, 123),
                    ('C3', 'H32', 'C2', 80, 123),
                    ('C3', 'H32', 'C4', 80, 123),
                    ('C4', 'H41', 'C3', 80, 123),
                    ('C4', 'H42', 'C3', 80, 123)
                ]
            })
    if IA:
        C = ImproperAngleConstraint()
        ENGINE.add_constraints(C)
        C.create_angles_by_definition(
            anglesDefinition={
                "THF": [('C2', 'O', 'C1', 'C4', -15,
                         15), ('C3', 'O', 'C1', 'C4', -15, 15)]
            })
    # initialize constraints data
    ENGINE.initialize_used_constraints()
    # run engine
    if molecular:
        ENGINE.set_groups_as_molecules()
        print 'molecular, %s atoms, %s steps, %2s cores' % (
            ENGINE.numberOfAtoms, nsteps, ncores),
        tic = time.time()
        ENGINE.run(numberOfSteps=nsteps,
                   saveFrequency=2 * nsteps,
                   restartPdb=None,
                   ncores=ncores)
        elapsed = float(time.time() - tic) / float(nsteps)
        print ' -- > %s seconds per step' % (elapsed, )
    else:
        ENGINE.set_groups_as_atoms()
        print 'atomic   , %s atoms, %s steps, %2s cores' % (
            ENGINE.numberOfAtoms, nsteps, ncores),
        tic = time.time()
        ENGINE.run(numberOfSteps=nsteps,
                   saveFrequency=2 * nsteps,
                   restartPdb=None,
                   ncores=ncores)
        elapsed = float(time.time() - tic) / float(nsteps)
        print ' -- > %s seconds per step' % (elapsed, )
        # return elapsed time
    return elapsed
Пример #8
0
ENGINE = Engine(path=None)
if freshStart or not ENGINE.is_engine(engineFilePath):
    # create engine
    ENGINE = Engine(path=engineFilePath, freshStart=True)
    ENGINE.set_pdb(pdbFileName)
    ## create experimental constraints
    #PDF_CONSTRAINT = PairDistributionConstraint(experimentalData=expPath, weighting="atomicNumber")
    _, _, _, gr = convert_Gr_to_gr(np.loadtxt(expPath), minIndex=[4, 5, 6])
    dataWeights = np.ones(gr.shape[0])
    dataWeights[:np.nonzero(gr[:, 1] > 0)[0][0]] = 0
    PDF_CONSTRAINT = PairCorrelationConstraint(
        experimentalData=gr.astype(FLOAT_TYPE),
        weighting="atomicNumber",
        dataWeights=dataWeights)
    # create and define molecular constraints
    EMD_CONSTRAINT = InterMolecularDistanceConstraint(defaultDistance=1.5)
    B_CONSTRAINT = BondConstraint()
    BA_CONSTRAINT = BondsAngleConstraint()
    IA_CONSTRAINT = ImproperAngleConstraint()
    # add constraints to engine
    ENGINE.add_constraints([
        PDF_CONSTRAINT, EMD_CONSTRAINT, B_CONSTRAINT, BA_CONSTRAINT,
        IA_CONSTRAINT
    ])
    # initialize constraints definitions
    B_CONSTRAINT.create_bonds_by_definition(
        bondsDefinition={
            "THF": [('O', 'C1', 1.29, 1.70), (
                'O', 'C4', 1.29,
                1.70), ('C1', 'C2', 1.29, 1.70), (
                    'C2', 'C3', 1.29,
Пример #9
0
    # add G(r) constraint
    PDF_CONSTRAINT = PairDistributionConstraint(experimentalData=grExpPath,
                                                weighting="atomicNumber")
    ENGINE.add_constraints([PDF_CONSTRAINT])
    # Rebin S(Q) experimental data and build constraint
    Sq = np.transpose(rebin(np.loadtxt(sqExpPath),
                            bin=0.05)).astype(FLOAT_TYPE)
    RSF_CONSTRAINT = ReducedStructureFactorConstraint(experimentalData=Sq,
                                                      weighting="atomicNumber")
    ENGINE.add_constraints([RSF_CONSTRAINT])
    # add coordination number constraint and set to un-used
    ACN_CONSTRAINT = AtomicCoordinationNumberConstraint()
    ENGINE.add_constraints([ACN_CONSTRAINT])
    #ACN_CONSTRAINT.set_used(False)
    # add inter-molecular distance constraint
    EMD_CONSTRAINT = InterMolecularDistanceConstraint(defaultDistance=2.2,
                                                      flexible=True)
    ENGINE.add_constraints([EMD_CONSTRAINT])
    # save engine
    ENGINE.save()
else:
    ENGINE = ENGINE.load(engineFilePath)
    # unpack constraints before fitting in case tweaking is needed
    PDF_CONSTRAINT, RSF_CONSTRAINT, ACN_CONSTRAINT, EMD_CONSTRAINT = ENGINE.constraints


##########################################################################################
#####################################  DIFFERENT RUNS  ###################################
def run_normal(nsteps, saveFrequency, engineFilePath):
    ENGINE.set_groups_as_atoms()
    ENGINE.run(numberOfSteps=nsteps, saveFrequency=saveFrequency)