def test_create_torsiondrive_dataset(): """ Make sure we can correclt make a dataset using the scan enumerator. """ factory = TorsiondriveDatasetFactory() scan_filter = workflow_components.ScanEnumerator() scan_filter.add_torsion_scan(smarts="[*:1]~[*:2]-[#8:3]-[#1:4]", scan_rage=(-90, 90), scan_increment=10) factory.add_workflow_components(scan_filter) conformer_generator = workflow_components.StandardConformerGenerator( max_conformers=1) factory.add_workflow_components(conformer_generator) mols = Molecule.from_file(get_data("tautomers_small.smi"), "smi", allow_undefined_stereo=True) dataset = factory.create_dataset(dataset_name="test name", molecules=mols, description="Force field test", tagline="A test dataset", processors=1) assert dataset.n_molecules > 0 assert dataset.n_records > 0 for entry in dataset.dataset.values(): assert entry.keywords.dihedral_ranges == [(-90, 90)] assert entry.keywords.grid_spacing == [10]
def test_torsiondrive_scan_keywords(fractal_compute_server): """ Test running torsiondrives with unique keyword settings which overwrite the global grid spacing and scan range. """ client = FractalClient(fractal_compute_server) molecules = Molecule.from_smiles("CO") factory = TorsiondriveDatasetFactory() scan_enum = workflow_components.ScanEnumerator() scan_enum.add_torsion_scan(smarts="[*:1]~[#6:2]-[#8:3]~[*:4]") factory.add_workflow_components(scan_enum) factory.clear_qcspecs() factory.add_qc_spec(method="openff_unconstrained-1.1.0", basis="smirnoff", program="openmm", spec_description="scan range test", spec_name="openff-1.1.0") dataset = factory.create_dataset( dataset_name="Torsiondrive scan keywords", molecules=molecules, description="Testing scan keywords which overwrite the global settings", tagline="Testing scan keywords which overwrite the global settings") # now set the keywords keys = list(dataset.dataset.keys()) entry = dataset.dataset[keys[0]] entry.keywords = {"grid_spacing": [5], "dihedral_ranges": [(-10, 10)]} # now submit dataset.submit(client=client) fractal_compute_server.await_services(max_iter=50) # make sure of the results are complete ds = client.get_collection("TorsionDriveDataset", dataset.dataset_name) # get the entry record = ds.get_record(ds.df.index[0], "openff-1.1.0") assert record.keywords.grid_spacing == [5] assert record.keywords.grid_spacing != dataset.grid_spacing assert record.keywords.dihedral_ranges == [(-10, 10)] assert record.keywords.dihedral_ranges != dataset.dihedral_ranges