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),
################################## 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,
# 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,
########################################################################################## ##################################### 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:
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)
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)
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
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,
# 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)