Esempio n. 1
0
 def get_standard_orientation(self):
     stdsect = section_by_pattern(self.contents, pattern="Standard Nuclear Orientation")[1]
     coord_lines = section_by_pattern(stdsect, pattern="--------------------------------------")[1][1:]
     keys = ["I", "element", "x", "y", "z"]
     parsed = lines_to_dct(coord_lines, keys)
     self.elements = parsed['element']
     arr_cols = [parsed['x'], parsed['y'], parsed['z']]
     self.std_coords = np.array(arr_cols, dtype=np.float64).transpose()
     self.n_atoms = len(self.elements)
Esempio n. 2
0
 def get_method(self):
     rem = section_by_pattern(self.contents, pattern="\$rem")[1]
     rembody = section_by_pattern(rem, pattern="\$end")[0]
     for line in rembody:
         if "method" in line.lower() and "solvent" not in line.lower():
             self.method = line.split()[1].strip().upper()
         if "basis" in line.lower():
             self.basis = line.split()[1].strip().upper()
     return self.method
Esempio n. 3
0
 def get_solvation(self):
     try:
         smx = section_by_pattern(self.contents, pattern="\$smx")[1]
         smxbody = section_by_pattern(smx, pattern="\$end")[0]
         for line in smxbody:
             if "solvent" in line.lower():
                 self.solvent = line.split()[1].strip().lower()
                 self.solvate = True
     except IndexError:
         self.solvate = False
         self.solvent = None
Esempio n. 4
0
    def get_coordinates(self):
        molecule = section_by_pattern(self.contents, pattern="\$molecule")[1]
        molbody = section_by_pattern(molecule, pattern="\$end")[0]
        mollines = [x.strip() for x in molbody]
        mollines = [x for x in mollines if x]

        self.charge, self.multiplicity = map(int, mollines[1].split())
        keys = ["element", "x", "y", "z"]
        self.parsed_coords = lines_to_dct(mollines[2:], keys)
        xyzs = [self.parsed_coords[col] for col in ["x", "y", "z"]]
        coordinates = np.array(xyzs, dtype=np.float64)
        self.coordinates = np.transpose(coordinates)
Esempio n. 5
0
    def get_standard_orientation(self):
        sto = section_by_pattern(self.contents, pattern="Standard orientation")

        stdsect = section_by_pattern(self.contents, pattern="Standard orientation")[-1]
        coord_lines = section_by_pattern(stdsect, pattern="--------------------------------------")[2][1:]
        keys = ["center", "at_z", "at_type", "x", "y", "z"]
        parsed = lines_to_dct(coord_lines, keys)
        arr_cols = [parsed['x'], parsed['y'], parsed['z']]
        try:
            self.std_coords = np.array(arr_cols, dtype=np.float64).transpose()
        except ValueError:
            print(self.filename)
            raise ValueError
        self.n_atoms = len(parsed['x'])
        self.at_z = np.array(parsed['at_z'], dtype=int)
Esempio n. 6
0
    def get_dft_details(self, verbose=0, scale=False, **kwargs):
        try:
            thermochem = section_by_pattern(self.contents, pattern="Thermochemistry")[1:][-1]
            self.thermochemistry = thermochem
            if verbose > 2:
                print("Thermochemistry found.")

            factors = scaling_factors["DEFAULT"]
            if scale:
                try:
                    factors = scaling_factors[self.method][self.basis]
                except KeyError:
                    printred(f"{self.method} {self.basis} scaling factors not specified yet.")
            self.__dict__.update(factors)
            if verbose > 2:
                print("\n".join([f"{k:>20}: {v}" for k, v in factors.items()]))

            self.temperature = float(self.search("Temperature", lines=thermochem).split()[1])
            self.mass_total = float(self.search("Molecular mass", lines=thermochem).split(":")[1].strip().split()[0])
            self.mass_total_kg = self.mass_total*AMU_TO_KG
            atom_lines = [x for x in thermochem if "Atom " in x]
            self.mass_atoms = [float(x.strip().split()[-1]) for x in atom_lines]
            if verbose > 2:
                print(f"""\
               Temperature: {self.temperature} K
            Molecular mass: {self.mass_total_kg} kg \
                    """)

            self.check_frequencies(verbose=verbose)
            self.get_entropy(verbose=verbose)
            self.get_zero_point(verbose=verbose)
            self.get_hlc(verbose=verbose)
            self.get_thermal_correction(verbose=verbose)
        except:
            pass
Esempio n. 7
0
    def get_solvation(self):
        try:
            scrf_lines = section_by_pattern(self.contents, pattern="SCRF")[1][:2]
            scrf = "".join(scrf_lines)
            smodel, solvent_ = scrf.split("SCRF=(")[-1].strip().split(",")
            self.solvate = True
            self.solvent_model = smodel

            solvent = solvent_.split("=")[1].strip().split(")")[0].strip()
            if solvent == "h2o":
                self.solvent = "water"
            else:
                self.solvent = solvent
        except (ValueError, IndexError):
            self.solvate = False
            self.solvent = None
            self.solvent_model = None
        return dict(solvate=self.solvate, solvent=self.solvent, solvent_model=self.solvent_model)