Ejemplo n.º 1
0
 def peek_from_file(self):
     peek = os.path.join(SYSTEM_DIR, "test_peek.mol2")
     peek_system = system.System(system_type="custom",
                                 density=0.8,
                                 forcefield="gaff",
                                 remove_hydrogens=True,
                                 file_path=peek)
     return peek_system
Ejemplo n.º 2
0
 def test_stack(self):
     stacked_system = system.System(molecule="PEEK",
                                    para_weight=0.50,
                                    density=0.7,
                                    n_compounds=[10],
                                    polymer_lengths=[5],
                                    system_type="stack",
                                    forcefield="gaff",
                                    remove_hydrogens=False,
                                    expand_factor=4)
Ejemplo n.º 3
0
    def test_weighted_sequence(self):
        para_system = system.System(molecule="PEEK",
                                    para_weight=1.0,
                                    n_compounds=[1],
                                    polymer_lengths=[10],
                                    density=0.1,
                                    system_type="pack")
        assert para_system.molecule_sequences[0] == "P" * 10

        random_system = system.System(molecule="PEEK",
                                      para_weight=0.40,
                                      n_compounds=[1],
                                      polymer_lengths=[20],
                                      density=0.1,
                                      system_type="pack")
        random.seed(24)
        sequence = system.random_sequence(para_weight=0.40, length=20)
        sequence = "".join(sequence)
        assert random_system.molecule_sequences[0] == sequence
Ejemplo n.º 4
0
 def bad_system_type(self):
     with pytest.raises(ValueError):
         stacked_system = system.System(molecule="PEEK",
                                        para_weight=0.50,
                                        density=0.7,
                                        n_compounds=[10],
                                        polymer_lengths=[5],
                                        system_type="wrong",
                                        forcefield="gaff",
                                        remove_hydrogens=False,
                                        expand_factor=4)
Ejemplo n.º 5
0
 def test_multiple_compounds(self):
     simple_system = system.System(molecule="PEEK",
                                   para_weight=0.60,
                                   density=.1,
                                   n_compounds=[5, 4, 3, 2, 1],
                                   polymer_lengths=[2, 4, 5, 11, 22],
                                   forcefield=None,
                                   system_type="pack",
                                   assert_dihedrals=False,
                                   remove_hydrogens=False,
                                   expand_factor=7)
Ejemplo n.º 6
0
 def pekk_system_noH(self):
     pekk_sys = system.System(molecule="PEKK",
                              para_weight=0.50,
                              density=1.2,
                              n_compounds=[3],
                              polymer_lengths=[3],
                              system_type="pack",
                              forcefield="gaff",
                              remove_hydrogens=True,
                              expand_factor=5)
     return pekk_sys
Ejemplo n.º 7
0
    def test_monomer_sequence(self):
        with pytest.warns(UserWarning):
            system_even = system.System(molecule="PEEK",
                                        monomer_sequence="PM",
                                        para_weight=0.5,
                                        n_compounds=[1],
                                        polymer_lengths=[4],
                                        density=.1,
                                        system_type="pack",
                                        remove_hydrogens=True)

        system_even = system.System(molecule="PEEK",
                                    monomer_sequence="PM",
                                    n_compounds=[1],
                                    polymer_lengths=[4],
                                    density=.1,
                                    system_type="pack",
                                    remove_hydrogens=True)
        assert system_even.para == system_even.meta == 2
        assert system_even.molecule_sequences[0] == "PMPM"

        system_odd = system.System(molecule="PEEK",
                                   monomer_sequence="PM",
                                   n_compounds=[1],
                                   polymer_lengths=[5],
                                   density=.1,
                                   system_type="pack",
                                   remove_hydrogens=True)
        assert system_odd.para == 3
        assert system_odd.meta == 2
        assert system_odd.molecule_sequences[0] == "PMPMP"

        system_large_seq = system.System(molecule="PEEK",
                                         monomer_sequence="PMPMPMPMPM",
                                         n_compounds=[1],
                                         polymer_lengths=[4],
                                         density=.1,
                                         system_type="pack",
                                         remove_hydrogens=True)
        assert system_large_seq.para == system_large_seq.meta == 2
        assert system_large_seq.molecule_sequences[0] == "PMPM"
Ejemplo n.º 8
0
 def test_dihedrals(self):
     simple_system = system.System(
         molecule="PEEK",
         para_weight=0.60,
         density=.1,
         n_compounds=[1],
         polymer_lengths=[2],
         forcefield="gaff",
         system_type="pack",
         assert_dihedrals=True,
         remove_hydrogens=False,
     )
Ejemplo n.º 9
0
 def test_mw_mn(self):
     simple_system = system.System(molecule="PEEK",
                                   para_weight=0.60,
                                   density=0.1,
                                   n_compounds=3,
                                   sample_pdi=True,
                                   Mn=5.0,
                                   Mw=6.0,
                                   system_type="pack",
                                   forcefield=None,
                                   assert_dihedrals=False,
                                   remove_hydrogens=False,
                                   expand_factor=7)
Ejemplo n.º 10
0
 def test_too_few_pdi_vals(self):
     with pytest.raises(AssertionError):
         simple_system = system.System(
             molecule="PEEK",
             para_weight=0.60,
             density=0.1,
             n_compounds=3,
             sample_pdi=True,
             pdi=1.2,
             forcefield=None,
             system_type="pack",
             assert_dihedrals=False,
             remove_hydrogens=False,
         )
Ejemplo n.º 11
0
 def test_remove_hydrogens(self):
     simple_system = system.System(
         molecule="PEEK",
         para_weight=0.60,
         density=.1,
         n_compounds=[1],
         polymer_lengths=[2],
         system_type="pack",
         forcefield="gaff",
         assert_dihedrals=False,
         remove_hydrogens=True,
     )
     post_remove_h = simple_system.system
     assert sum([int(item.type == "H")
                 for item in post_remove_h.atoms]) == 0
Ejemplo n.º 12
0
 def test_custom_bad_params(self):
     file_path = os.path.join(SYSTEM_DIR, "test_peek.mol2")
     with pytest.warns(UserWarning):
         custom_sys = system.System(system_type="custom",
                                    density=0.7,
                                    molecule="PEEK",
                                    para_weight=0.50,
                                    n_compounds=10,
                                    polymer_lengths=5,
                                    file_path=file_path)
         ignore_args = [
             custom_sys.molecule, custom_sys.para_weight,
             custom_sys.polymer_lengths, custom_sys.n_compounds
         ]
         assert not any(ignore_args)
Ejemplo n.º 13
0
 def test_gauss_dist(self):
     random.seed(42)
     simple_system = system.System(
         molecule="PEEK",
         para_weight=0.60,
         density=0.1,
         n_compounds=3,
         sample_pdi=True,
         pdi=1.001,
         Mn=5.0,
         system_type="pack",
         forcefield=None,
         assert_dihedrals=False,
         remove_hydrogens=False,
         mass_dist_type="gaussian",
     )
Ejemplo n.º 14
0
def sample(job):
    from uli_init import simulate, system
    from uli_init.utils import base_units, unit_conversions
    import numpy as np
    import logging

    with job:
        print(job.id)
        logging.info("Creating system...")
        if job.sp["system_type"] != "interface":
            system_parms = system.System(
                density=job.sp['density'],
                molecule=job.sp['molecule'],
                n_compounds=job.sp['n_compounds'],
                polymer_lengths=job.sp["polymer_lengths"],
                para_weight=job.sp['para_weight'],
                monomer_sequence=job.sp['monomer_sequence'],
                sample_pdi=job.doc.sample_pdi,
                pdi=job.sp['pdi'],
                Mn=job.sp['Mn'],
                Mw=job.sp['Mw'],
                seed=job.sp['system_seed'])
            system = system.Initializer(
                system=system_parms,
                system_type=job.sp["system_type"],
                forcefield=job.sp["forcefield"],
                remove_hydrogens=job.sp["remove_hydrogens"],
                **job.sp["kwargs"])
            if any(list(job.sp["box_constraints"].values())):
                system.target_box = system.set_target_box(
                    job.sp["box_constraints"]["x"],
                    job.sp["box_constraints"]["y"],
                    job.sp["box_constraints"]["z"])
            job.doc["target_volume"] = system.target_box

            shrink_kT = job.sp['shrink_kT']
            shrink_steps = job.sp['shrink_steps']
            shrink_period = job.sp['shrink_period']
            job.doc['num_para'] = system_parms.para
            job.doc['num_meta'] = system_parms.meta
            job.doc['num_compounds'] = system_parms.n_compounds
            job.doc['polymer_lengths'] = system_parms.polymer_lengths
            job.doc["chain_sequences"] = system_parms.molecule_sequences

        elif job.sp["system_type"] == "interface":
            slab_files = []
            ref_distances = []
            if job.doc['use_signac'] is True:
                signac_args = []
                if isinstance(job.sp['signac_args'], list):
                    slab_1_arg = job.sp['signac_args'][0]
                    signac_args.append(slab_1_arg)
                    if len(job.sp['signac_args']) == 2:
                        slab_2_arg = job.sp['signac_args'][1]
                        signac_args.append(slab_2_args)
                elif not isinstance(job.sp['signac_args'], list):
                    signac_args.append(job.sp['signac_args'])

                project = signac.get_project(root=job.sp['signac_project'],
                                             search=True)
                for arg in signac_args:
                    if isinstance(arg, dict):
                        _job = list(project.find_jobs(filter=arg))[0]
                        slab_files.append(_job.fn('restart.gsd'))
                        ref_distances.append(_job.doc['ref_distance'] / 10)
                    elif isinstance(arg, str):  # Find job using job ID
                        _job = project.open_job(id=arg)
                        slab_files.append(_job.fn('restart.gsd'))
                        ref_distances.append(_job.doc['ref_distance'] / 10)
            elif job.doc['use_signac'] is False:
                slab_files.append(job.sp.slab_file)
                ref_distances.append(job.sp['reference_distance'])

            system = system.Interface(
                slabs=slab_files,
                ref_distance=ref_distances[0],
                gap=job.sp['interface_gap'],
                weld_axis=job.sp["weld_axis"],
            )

            job.doc['slab_ref_distances'] = system.ref_distance
            shrink_kT = None
            shrink_steps = None
            shrink_period = None

        system.system.save('init.mol2', overwrite=True)
        logging.info("System generated...")
        logging.info("Starting simulation...")

        simulation = simulate.Simulation(
            system,
            r_cut=job.sp["r_cut"],
            tau_kt=job.sp['tau_kt'],
            tau_p=job.sp['tau_p'],
            nlist=job.sp['neighbor_list'],
            dt=job.sp['dt'],
            seed=job.sp['sim_seed'],
            auto_scale=True,
            ref_values=None,
            mode="gpu",
            gsd_write=max([int(job.doc['steps'] / 100), 1]),
            log_write=max([int(job.doc['steps'] / 10000), 1]))

        logging.info("Simulation object generated...")
        job.doc['ref_energy'] = simulation.ref_energy
        job.doc['ref_distance'] = simulation.ref_distance
        job.doc['ref_mass'] = simulation.ref_mass
        job.doc['real_timestep'] = unit_conversions.convert_to_real_time(
            simulation.dt, simulation.ref_energy, simulation.ref_distance,
            simulation.ref_mass)
        job.doc['time_unit'] = 'fs'
        job.doc['steps_per_frame'] = simulation.gsd_write
        job.doc['steps_per_log'] = simulation.log_write

        if job.sp['procedure'] == "quench":
            job.doc['T_SI'] = unit_conversions.kelvin_from_reduced(
                job.sp['kT_quench'], simulation.ref_energy)
            job.doc['T_unit'] = 'K'
            logging.info("Beginning quench simulation...")
            simulation.quench(kT=job.sp['kT_quench'],
                              pressure=job.sp['pressure'],
                              n_steps=job.sp['n_steps'],
                              shrink_kT=shrink_kT,
                              shrink_steps=shrink_steps,
                              wall_axis=job.sp['walls'],
                              shrink_period=shrink_period)

        elif job.sp['procedure'] == "anneal":
            logging.info("Beginning anneal simulation...")
            if not job.sp['schedule']:
                kT_list = np.linspace(
                    job.sp['kT_anneal'][0],
                    job.sp['kT_anneal'][1],
                    len(job.sp['anneal_sequence']),
                )
                kT_SI = [
                    unit_conversions.kelvin_from_reduced(
                        kT, simulation.ref_energy) for kT in kT_list
                ]
                job.doc['T_SI'] = kT_SI
                job.doc['T_unit'] = 'K'

            simulation.anneal(kT_init=job.sp['kT_anneal'][0],
                              kT_final=job.sp['kT_anneal'][1],
                              pressure=job.sp['pressure'],
                              step_sequence=job.sp['anneal_sequence'],
                              schedule=job.sp['schedule'],
                              shrink_kT=shrink_kT,
                              shrink_steps=shrink_steps,
                              wall_axis=job.sp['walls'],
                              shrink_period=shrink_period)