Exemple #1
0
    def do_optimization(self):
        while 1:
            # do the conformational search
            if self.par.par['conformer_search'] == 1:
                if self.scycconf == -1 and self.sconf == -1:
                    # conformational analysis has to be started
                    logging.info(
                        '\tStarting conformational search of {}'.format(
                            self.species.name))
                    self.species.confs = Conformers(self.species, self.par,
                                                    self.qc)

                # first do the cyclic part of the molecule
                if self.scycconf == -1:
                    # start the ring conf search
                    if len(self.species.cycle_chain) > 0:
                        # there are rings in the molecule, do a search
                        self.species.confs.generate_ring_conformers(
                            copy.deepcopy(self.species.geom))
                        # set the cyclic conf status to running
                        self.scycconf = 0
                    else:
                        # there are no rings in the molecule, continue from the current geometry
                        self.species.confs.cyc_conf_geoms = [
                            copy.deepcopy(self.species.geom)
                        ]
                        # no ring conf search has to be done, set status to finished
                        self.scycconf = 1
                if self.scycconf == 0:
                    # ring conf search is running, check if finished
                    status, self.species.confs.cyc_conf_geoms = self.species.confs.check_ring_conformers(
                    )
                    if status:
                        # ring conf search is finished
                        self.scycconf = 1
                # do the open chain par of the molecule
                if self.scycconf == 1:
                    # do open chain part if cyclic part is done
                    if self.sconf == -1:
                        # open chain part has not started yet
                        for geom in self.species.confs.cyc_conf_geoms:
                            # take all the geometries from the cyclic part
                            # generate the conformers for the current geometry
                            self.species.confs.generate_conformers(0, geom)
                        # set conf status to running
                        self.sconf = 0
                    if self.sconf == 0:
                        # conformational search is running
                        # check if the conformational search is done
                        status, geom, low_energy = self.species.confs.check_conformers(
                            wait=self.wait)

                        #print('{0} {1}'.format(status, low_energy))
                        if status == 1:
                            #    cfi=open("conf_energies.txt", 'a')
                            #    cfi.write(self.species.name)
                            #    cfi.write(": Initial E: {0}".format(self.species.energy))
                            # conf search is done
                            # save lowest energy conformer as species geometry
                            self.species.geom = geom
                            # save lowest energy conformer energy
                            self.species.energy = low_energy
                            #    cfi.write(", Final E: {0}\n".format(self.species.energy))
                            #    cfi.close()

                            # set conf status to finished
                            self.sconf = 1

            else:
                # no conf search necessary, set status to finished
                self.sconf = 1
            if self.sconf == 1:  # conf search is finished
                while self.restart < self.max_restart:
                    # do the high level calculations
                    if self.par.par['high_level'] == 1:
                        if self.shigh == -1:
                            # high level calculation did not start yet
                            logging.info(
                                '\tStarting high level optimization of {}'.
                                format(self.species.name))
                            if self.species.wellorts:
                                # do the high level optimization of a ts
                                self.qc.qc_opt_ts(self.species,
                                                  self.species.geom,
                                                  high_level=1)
                            else:
                                # do the high level optimization of a well
                                self.qc.qc_opt(self.species,
                                               self.species.geom,
                                               high_level=1)
                            self.shigh = 0  # set the high status to running
                        if self.shigh == 0:
                            # high level calculation is running
                            # check if it is finished
                            status = self.qc.check_qc(self.job_high)
                            if status == 'error':
                                # found an error
                                logging.info(
                                    '\tHigh level optimization failed for {}'.
                                    format(self.species.name))
                                self.shigh = -999
                            if status == 'normal':
                                # finished successfully
                                err, new_geom = self.qc.get_qc_geom(
                                    self.job_high,
                                    self.species.natom,
                                    wait=self.wait)
                                if geometry.equal_geom(self.species.bond,
                                                       self.species.geom,
                                                       new_geom, 0.1):
                                    # geometry is as expected
                                    err, self.species.geom = self.qc.get_qc_geom(
                                        self.job_high, self.species.natom)
                                    err, self.species.energy = self.qc.get_qc_energy(
                                        self.job_high)
                                    err, self.species.freq = self.qc.get_qc_freq(
                                        self.job_high, self.species.natom)
                                    err, self.species.zpe = self.qc.get_qc_zpe(
                                        self.job_high)
                                    self.shigh = 1
                                else:
                                    # geometry diverged to other structure
                                    logging.info(
                                        '\tHigh level ts optimization converged to different structure for {}'
                                        .format(self.species.name))
                                    self.shigh = -999
                    else:
                        # no high-level calculations necessary, set status to finished
                        self.shigh = 1
                    if self.shigh == 1:
                        # do the HIR calculation
                        if self.par.par['rotor_scan'] == 1:
                            if self.shir == -1:
                                # hir not stated yet
                                logging.info(
                                    '\tStarting hindered rotor calculations of {}'
                                    .format(self.species.name))
                                self.species.hir = HIR(self.species, self.qc,
                                                       self.par)
                                self.species.hir.generate_hir_geoms(
                                    copy.deepcopy(self.species.geom))
                                self.shir = 0
                            if self.shir == 0:
                                # hir is running
                                # check if it is done:
                                status = self.species.hir.check_hir(
                                    wait=self.wait)
                                if status:
                                    if len(self.species.hir.hir_energies) > 0:
                                        # check if along the hir potential a structure was found with a lower energy
                                        min = self.species.hir.hir_energies[0][
                                            0]
                                        min_rotor = -1
                                        min_ai = -1
                                        for rotor in range(
                                                len(self.species.dihed)):
                                            for ai in range(self.species.hir.
                                                            nrotation):
                                                # use a 0.1kcal/mol cutoff for numerical noise
                                                if self.species.hir.hir_energies[
                                                        rotor][
                                                            ai] < min - 1.6E-4:
                                                    min = self.species.hir.hir_energies[
                                                        rotor][ai]
                                                    min_rotor = rotor
                                                    min_ai = ai
                                        if min_rotor > -1:
                                            self.restart += 1
                                            if self.restart < self.max_restart:
                                                # lower energy structure found
                                                logging.info(
                                                    '\t\tLower energy found during hindered rotor scan for {}'
                                                    .format(self.species.name))
                                                logging.info(
                                                    '\t\tRestart number: ' +
                                                    str(self.restart))
                                                logging.info('\t\tRotor: ' +
                                                             str(min_rotor))
                                                logging.info(
                                                    '\t\tScan point: ' +
                                                    str(min_ai))
                                                job = self.job_hir + str(
                                                    min_rotor) + '_' + str(
                                                        min_ai).zfill(2)

                                                err, self.species.geom = self.qc.get_qc_geom(
                                                    job, self.species.natom)
                                                # delete the high_level log file and the hir log files
                                                if os.path.exists(
                                                        self.job_high +
                                                        '.log'):
                                                    # logging.info("\t\t\tRemoving file " + self.job_high + '.log')
                                                    os.remove(self.job_high +
                                                              '.log')
                                                for rotor in range(
                                                        len(self.species.dihed)
                                                ):
                                                    for ai in range(
                                                            self.species.hir.
                                                            nrotation):
                                                        if os.path.exists(
                                                                self.job_hir +
                                                                str(rotor) +
                                                                '_' +
                                                                str(ai).zfill(
                                                                    2) +
                                                                '.log'):
                                                            # logging.info("\t\t\tRemoving file " + self.job_hir + str(rotor) + '_' + str(ai).zfill(2) + '.log')
                                                            os.remove(
                                                                self.job_hir +
                                                                str(rotor) +
                                                                '_' +
                                                                str(ai).zfill(
                                                                    2) +
                                                                '.log')
                                                # set the status of high and hir back to not started
                                                self.shigh = -1
                                                self.shir = -1
                                            else:
                                                logging.info(
                                                    '\t\tLower energy found, but readched max restart for {}'
                                                    .format(self.species.name))
                                                self.shir = 1
                                        else:
                                            self.shir = 1
                                    else:
                                        self.shir = 1
                        else:
                            # no hir calculations necessary, set status to finished
                            self.shir = 1
                    if not self.wait or self.shir == 1 or self.shigh == -999:
                        # break the loop if no waiting is required or
                        # if the hir calcs are done or
                        # if the high level calc failed
                        break
                    else:
                        time.sleep(1)
            if self.shir == 1:
                # finilize if no waiting is required or if the hir calcs are done
                # calculate the symmetry numbers
                symmetry.calculate_symmetry(self.species)

                # calculate the new frequencies with the internal rotations projected out
                fr_file = self.species.name
                if not self.species.wellorts:
                    fr_file += '_well'
                if self.par.par['high_level']:
                    fr_file += '_high'
                hess = self.qc.read_qc_hess(fr_file, self.species.natom)
                self.species.kinbot_freqs, self.species.reduced_freqs = frequencies.get_frequencies(
                    self.species, hess, self.species.geom)

                # write the molpro input and read the molpro energy, if available
                if self.par.par['single_point_qc'] == 'molpro':
                    molp = Molpro(self.species, self.par)
                    molp.create_molpro_input()
                    molp.create_molpro_submit()
                    status, molpro_energy = molp.get_molpro_energy()
                    if status:
                        self.species.energy = molpro_energy

                # delete unnecessary files
                if self.par.par['delete_intermediate_files'] == 1:
                    self.delete_files()
            if self.wait:
                if self.shir == 1 or self.shigh == -999:
                    return 0
                time.sleep(1)
            else:
                return 0
Exemple #2
0
    def do_optimization(self):
        while 1:
            # do the conformational search
            if self.par.par['conformer_search'] == 1:
                if self.scycconf == -1 and self.sconf == -1:
                    # conformational analysis has to be started
                    logging.info('\tStarting conformational search of {}'.format(self.species.name))
                    self.species.confs = Conformers(self.species, self.par, self.qc)

                # first do the cyclic part of the molecule
                if self.scycconf == -1:
                    # start the ring conf search
                    if len(self.species.cycle_chain) > 0:
                        # there are rings in the molecule, do a search
                        self.species.confs.generate_ring_conformers(copy.deepcopy(self.species.geom))
                        # set the cyclic conf status to running
                        self.scycconf = 0
                    else:
                        # there are no rings in the molecule, continue from the current geometry
                        self.species.confs.cyc_conf_geoms = [copy.deepcopy(self.species.geom)]
                        # no ring conf search has to be done, set status to finished
                        self.scycconf = 1
                if self.scycconf == 0:
                    # ring conf search is running, check if finished
                    status, self.species.confs.cyc_conf_geoms = self.species.confs.check_ring_conformers()
                    if status:
                        # ring conf search is finished
                        self.scycconf = 1
                # do the open chain par of the molecule
                if self.scycconf == 1:
                    # do open chain part if cyclic part is done
                    if self.sconf == -1:
                        # open chain part has not started yet
                        for geom in self.species.confs.cyc_conf_geoms:
                            # take all the geometries from the cyclic part
                            # generate the conformers for the current geometry
                            self.species.confs.generate_conformers(0, geom)
                        # set conf status to running
                        self.sconf = 0
                    if self.sconf == 0:
                        # conformational search is running
                        # check if the conformational search is done
                        status, geom = self.species.confs.check_conformers(wait=self.wait)
                        if status == 1:
                            # conf search is done
                            # save lowest energy conformer as species geometry
                            self.species.geom = geom
                            # set conf status to finished
                            self.sconf = 1
            else:
                # no conf search necessary, set status to finished
                self.sconf = 1
            if self.sconf == 1:  # conf search is finished
                while self.restart < self.max_restart:
                    # do the high level calculations
                    if self.par.par['high_level'] == 1:
                        if self.shigh == -1:
                            # high level calculation did not start yet
                            logging.info('\tStarting high level optimization of {}'.format(self.species.name))
                            if self.species.wellorts:
                                # do the high level optimization of a ts
                                self.qc.qc_opt_ts(self.species, self.species.geom, high_level=1)
                            else:
                                # do the high level optimization of a well
                                self.qc.qc_opt(self.species, self.species.geom, high_level=1)
                            self.shigh = 0  # set the high status to running
                        if self.shigh == 0:
                            # high level calculation is running
                            # check if it is finished
                            status = self.qc.check_qc(self.job_high)
                            if status == 'error':
                                # found an error
                                logging.info('\tHigh level optimization failed for {}'.format(self.species.name))
                                self.shigh = -999
                            if status == 'normal':
                                # finished successfully
                                err, new_geom = self.qc.get_qc_geom(self.job_high, self.species.natom, wait=self.wait)
                                if geometry.equal_geom(self.species.bond, self.species.geom, new_geom, 0.1):
                                    # geometry is as expected
                                    err, self.species.geom = self.qc.get_qc_geom(self.job_high, self.species.natom)
                                    err, self.species.energy = self.qc.get_qc_energy(self.job_high)
                                    err, self.species.freq = self.qc.get_qc_freq(self.job_high, self.species.natom)
                                    err, self.species.zpe = self.qc.get_qc_zpe(self.job_high)
                                    self.shigh = 1
                                else:
                                    # geometry diverged to other structure
                                    logging.info('\tHigh level ts optimization converged to different structure for {}'.format(self.species.name))
                                    self.shigh = -999
                    else:
                        # no high-level calculations necessary, set status to finished
                        self.shigh = 1
                    if self.shigh == 1:
                        # do the HIR calculation
                        if self.par.par['rotor_scan'] == 1:
                            if self.shir == -1:
                                # hir not stated yet
                                logging.info('\tStarting hindered rotor calculations of {}'.format(self.species.name))
                                self.species.hir = HIR(self.species, self.qc, self.par)
                                self.species.hir.generate_hir_geoms(copy.deepcopy(self.species.geom))
                                self.shir = 0
                            if self.shir == 0:
                                # hir is running
                                # check if it is done:
                                status = self.species.hir.check_hir(wait=self.wait)
                                if status:
                                    if len(self.species.hir.hir_energies) > 0:
                                        # check if along the hir potential a structure was found with a lower energy
                                        min = self.species.hir.hir_energies[0][0]
                                        min_rotor = -1
                                        min_ai = -1
                                        for rotor in range(len(self.species.dihed)):
                                            for ai in range(self.species.hir.nrotation):
                                                # use a 0.1kcal/mol cutoff for numerical noise
                                                if self.species.hir.hir_energies[rotor][ai] < min - 1.6E-4:
                                                    min = self.species.hir.hir_energies[rotor][ai]
                                                    min_rotor = rotor
                                                    min_ai = ai
                                        if min_rotor > -1:
                                            self.restart += 1
                                            if self.restart < self.max_restart:
                                                # lower energy structure found
                                                logging.info('\t\tLower energy found during hindered rotor scan for {}'.format(self.species.name))
                                                logging.info('\t\tRestart number: ' + str(self.restart))
                                                logging.info('\t\tRotor: ' + str(min_rotor))
                                                logging.info('\t\tScan point: ' + str(min_ai))
                                                job = self.job_hir + str(min_rotor) + '_' + str(min_ai).zfill(2)

                                                err, self.species.geom = self.qc.get_qc_geom(job, self.species.natom)
                                                # delete the high_level log file and the hir log files
                                                if os.path.exists(self.job_high + '.log'):
                                                    # logging.info("\t\t\tRemoving file " + self.job_high + '.log')
                                                    os.remove(self.job_high + '.log')
                                                for rotor in range(len(self.species.dihed)):
                                                    for ai in range(self.species.hir.nrotation):
                                                        if os.path.exists(self.job_hir + str(rotor) + '_' + str(ai).zfill(2) + '.log'):
                                                            # logging.info("\t\t\tRemoving file " + self.job_hir + str(rotor) + '_' + str(ai).zfill(2) + '.log')
                                                            os.remove(self.job_hir + str(rotor) + '_' + str(ai).zfill(2) + '.log')
                                                # set the status of high and hir back to not started
                                                self.shigh = -1
                                                self.shir = -1
                                            else:
                                                logging.info('\t\tLower energy found, but readched max restart for {}'.format(self.species.name))
                                                self.shir = 1
                                        else:
                                            self.shir = 1
                                    else:
                                        self.shir = 1
                        else:
                            # no hir calculations necessary, set status to finished
                            self.shir = 1
                    if not self.wait or self.shir == 1 or self.shigh == -999:
                        # break the loop if no waiting is required or
                        # if the hir calcs are done or
                        # if the high level calc failed
                        break
                    else:
                        time.sleep(1)
            if self.shir == 1:
                # finilize if no waiting is required or if the hir calcs are done
                # calculate the symmetry numbers
                symmetry.calculate_symmetry(self.species)

                # calculate the new frequencies with the internal rotations projected out
                fr_file = self.species.name
                if not self.species.wellorts:
                    fr_file += '_well'
                if self.par.par['high_level']:
                        fr_file += '_high'
                hess = self.qc.read_qc_hess(fr_file, self.species.natom)
                self.species.kinbot_freqs, self.species.reduced_freqs = frequencies.get_frequencies(self.species, hess, self.species.geom)

                # write the molpro input and read the molpro energy, if available
                if self.par.par['single_point_qc'] == 'molpro':
                    molp = Molpro(self.species, self.par)
                    molp.create_molpro_input()
                    molp.create_molpro_submit()
                    status, molpro_energy = molp.get_molpro_energy()
                    if status:
                        self.species.energy = molpro_energy
                
                # delete unnecessary files
                delete = 1
                if delete:
                    self.delete_files()
            if self.wait:
                if self.shir == 1 or self.shigh == -999:
                    return 0
                time.sleep(1)
            else:
                return 0
Exemple #3
0
    def do_optimization(self):
        while 1:
            # do the conformational search
            if self.par['conformer_search'] == 1:
                if self.scycconf == -1 and self.sconf == -1:
                    logging.info('\tStarting conformational search of {}'.format(self.name))
                    self.species.confs = Conformers(self.species, self.par, self.qc)

                # first do the cyclic part of the molecule
                if self.scycconf == -1:
                    # start the ring conf search
                    if len(self.species.cycle_chain) > 0:
                        # there are rings in the molecule, do a search
                        self.species.confs.generate_ring_conformers(copy.deepcopy(self.species.geom))
                        # set the cyclic conf status to running
                        self.scycconf = 0
                    else:
                        # there are no rings in the molecule, continue from the current geometry
                        self.species.confs.cyc_conf_geoms = [copy.deepcopy(self.species.geom)]
                        # no ring conf search has to be done, set status to finished
                        self.scycconf = 1
                if self.scycconf == 0:
                    # ring conf search is running, check if finished
                    status, self.species.confs.cyc_conf_geoms = self.species.confs.check_ring_conformers()
                    if status:
                        # ring conf search is finished
                        self.scycconf = 1
                # first do an semi empirical optimization if requested by the user
                if self.par['semi_emp_conformer_search'] == 1:
                    logging.info('semi empirical conformer search is starting for {}'.format(self.name))
                    if self.ssemi_empconf == -1:
                        # semi empirical part has not started yet
                        self.species.semi_emp_confs = Conformers(self.species, self.par, self.qc, semi_emp=1)
                        for geom in self.species.confs.cyc_conf_geoms:
                            # take all the geometries from the cyclic part
                            # generate the conformers for the current geometry
                            self.species.semi_emp_confs.generate_conformers(0, geom)
                        # set conf status to running
                        self.ssemi_empconf = 0
                        if self.ssemi_empconf == 0:
                            # semi empirical conformational search is running
                            # check if the conformational search is done
                            status, lowest_conf, geom, self.semi_emp_low_energy, self.semi_emp_conformers, self.semi_emp_energies = self.species.semi_emp_confs.check_conformers(wait=self.wait)
                            if status == 1:
                                logging.info("semi empirical lowest energy conformer for species {} is number {}".format(self.name, lowest_conf))
                                # set conf status to finished
                                self.ssemi_empconf = 1
                else:
                    self.ssemi_empconf = 1
                if self.ssemi_empconf == 1 and self.scycconf == 1:
                    # do open chain part if cyclic (if there were any) and semi empirical (if requested) parts are done
                    if self.sconf == -1:
                        # open chain part has not started yet
                        # if semi empirical conformer were searched for, start from those, 
                        # else start from cyclic conformers
                        if self.par['semi_emp_conformer_search'] == 1:
                            self.species.confs.nconfs = 1
                            for i, geom in enumerate(self.semi_emp_conformers):
                                if (self.semi_emp_energies[i] - self.semi_emp_low_energy) * constants.AUtoKCAL < self.par['semi_emp_confomer_threshold']:
                                    self.species.confs.generate_conformers(-999, geom)
                            logging.info("There are {} structures below the {} kcal/mol threshold for species {} in the semiempirical search.". \
                                         format(i, self.par['semi_emp_confomer_threshold'], self.name))
                        else:
                            print_warning = True
                            for geom in self.species.confs.cyc_conf_geoms:
                                # take all the geometries from the cyclic part
                                # generate the conformers for the current geometry
                                self.skip_conf_check = self.species.confs.generate_conformers(0, geom, print_warning=print_warning)
                                print_warning = False
                        # set conf status to running
                        self.sconf = 0
                    if self.sconf == 0:
                        # conformational search is running
                        # check if the conformational search is done
                        if self.skip_conf_check == 0:
                            status, lowest_conf, geom, low_energy, conformers, energies = self.species.confs.check_conformers(wait=self.wait)
                            if status == 1:
                                logging.info("lowest energy conformer for species: {} is number {}".format(self.name, lowest_conf))
                                # save lowest energy conformer as species geometry
                                self.species.geom = geom
                                # save lowest energy conformer energy
                                self.species.energy = low_energy
                                # set conf status to finished
                                self.sconf = 1
                        elif self.skip_conf_check == 1:
                            self.species.geom, self.species.energy = self.species.confs.lowest_conf_info()
                            logging.info('Conformers are not checked for {} to speed up calculations.'.format(self.name))
                            logging.info('They seem to have been done in a previous run.')
                            logging.info('Energy and geometry updated based on conf/{}_low file.'.format(self.name))
                            self.sconf = 1

            else:
                # no conf search necessary, set status to finished
                self.sconf = 1
            if self.sconf == 1:  # conf search is finished
                # if the conformers were already done in a previous run
                # not clear what the purpose of these lines were
                if self.par['conformer_search'] == 1:
                    status, lowest_conf, geom, low_energy, conformers, energies = self.species.confs.check_conformers(wait=self.wait)
                        
                while self.restart <= self.max_restart:
                    # do the high level calculations
                    if self.par['high_level'] == 1:
                        if self.shigh == -1:
                            if self.species.wellorts:
                                name = self.species.name
                            else:
                                name = self.species.chemid
                            # high level calculation did not start yet
                            logging.info('\tStarting high level optimization of {}'.format(name))
                            if self.species.wellorts:
                                # do the high level optimization of a ts
                                self.qc.qc_opt_ts(self.species, self.species.geom, high_level=1)
                            else:
                                # do the high level optimization of a well
                                self.qc.qc_opt(self.species, self.species.geom, high_level=1)
                            self.shigh = 0  # set the high status to running
                        if self.shigh == 0:
                            # high level calculation is running
                            # check if it is finished
                            status = self.qc.check_qc(self.job_high)
                            if status == 'error':
                                # found an error
                                logging.info('\tHigh level optimization failed for {}'.format(self.name))
                                self.shigh = -999
                            elif status == 'normal':
                                # finished successfully
                                err, new_geom = self.qc.get_qc_geom(self.job_high, self.species.natom, wait=self.wait)
                                temp = StationaryPoint('temp',
                                                       self.species.charge,
                                                       self.species.mult,
                                                       atom=self.species.atom,
                                                       geom=new_geom)
                                temp.bond_mx()
                                if self.species.wellorts:  # for TS we need reasonable geometry agreement and normal mode correlation
                                    if self.par['conformer_search'] == 0:
                                        fr_file = self.fr_file_name(0)  # name of the original TS file
                                    else:
                                        if self.skip_conf_check == 0: 
                                            fr_file = 'conf/{}_{}'.format(self.fr_file_name(0), lowest_conf)
                                        else:
                                            fr_file = 'conf/{}_low'.format(self.fr_file_name(0))
                                    if self.qc.qc == 'gauss':
                                        imagmode = reader_gauss.read_imag_mode(fr_file, self.species.natom)
                                    fr_file = self.fr_file_name(1)
                                    if self.qc.qc == 'gauss':
                                        imagmode_high = reader_gauss.read_imag_mode(fr_file, self.species.natom)
                                    # either geom is roughly same with closely matching imaginary modes, or geometry is very close
                                    # maybe we need to do IRC at the high level as well...
                                    same_geom = ((geometry.matrix_corr(imagmode, imagmode_high) > 0.9) and \
                                            (geometry.equal_geom(self.species, temp, 0.3))) \
                                            or (geometry.equal_geom(self.species, temp, 0.15))
                                else:
                                    same_geom = geometry.equal_geom(self.species, temp, 0.1)

                                err, fr = self.qc.get_qc_freq(self.job_high, self.species.natom)
                                if self.species.natom == 1:
                                    freq_ok = 1
                                elif len(fr) == 1 and fr[0] == 0:
                                    freq_ok = 0
                                elif self.species.wellorts == 0 and fr[0] > 0.:
                                    freq_ok = 1
                                elif self.species.wellorts == 1 and fr[0] < 0. and fr[1] > 0.:
                                    freq_ok = 1
                                else:
                                    freq_ok = 0
                                if same_geom and freq_ok:
                                    # geometry is as expected and normal modes are the same for TS
                                    err, self.species.geom = self.qc.get_qc_geom(self.job_high, self.species.natom)
                                    err, self.species.energy = self.qc.get_qc_energy(self.job_high)
                                    err, self.species.freq = self.qc.get_qc_freq(self.job_high, self.species.natom)
                                    err, self.species.zpe = self.qc.get_qc_zpe(self.job_high)
                                    self.shigh = 1
                                else:
                                    # geometry diverged to other structure
                                    if not same_geom:
                                        logging.info('\tHigh level optimization converged to different structure for {}, related channels are deleted.'.format(self.name))
                                    if not freq_ok:
                                        logging.info('\tWrong number of imaginary frequencies for {}, related channels are deleted.'.format(self.name))
                                    self.shigh = -999
                              
                    else:
                        # no high-level calculations necessary, set status to finished
                        self.shigh = 1
                    if self.shigh == 1:
                        # do the HIR calculation
                        if self.par['rotor_scan'] == 1:
                            if self.shir == -1:
                                # hir not stated yet
                                logging.info('\tStarting hindered rotor calculations of {}'.format(self.name))
                                self.species.hir = HIR(self.species, self.qc, self.par)
                                self.species.hir.generate_hir_geoms(copy.deepcopy(self.species.geom), self.par['rigid_hir'])
                                self.shir = 0
                            if self.shir == 0:
                                # hir is running
                                # check if it is done:
                                status = self.species.hir.check_hir(wait=self.wait)
                                if status:
                                    if len(self.species.hir.hir_energies) > 0:
                                        # check if along the hir potential a structure was found with a lower energy
                                        min = self.species.hir.hir_energies[0][0]
                                        min_rotor = -1
                                        min_ai = -1
                                        for rotor in range(len(self.species.dihed)):
                                            for ai in range(self.species.hir.nrotation):
                                                # use a 0.1kcal/mol cutoff for numerical noise
                                                if self.species.hir.hir_energies[rotor][ai] < min - 1.6E-4:
                                                    min = self.species.hir.hir_energies[rotor][ai]
                                                    min_rotor = rotor
                                                    min_ai = ai
                                        if min_rotor > -1:
                                            self.restart += 1
                                            if self.restart < self.max_restart:
                                                # lower energy structure found
                                                logging.info('\t\tLower energy found during hindered rotor scan for {}'.format(self.name))
                                                logging.info('\t\tRestart number: ' + str(self.restart))
                                                logging.info('\t\tRotor: ' + str(min_rotor))
                                                logging.info('\t\tScan point: ' + str(min_ai))
                                                job = self.job_hir + str(min_rotor) + '_' + str(min_ai).zfill(2)

                                                err, self.species.geom = self.qc.get_qc_geom(job, self.species.natom)
                                                # delete the high_level log file and the hir log files
                                                if os.path.exists(self.job_high + '.log'):
                                                    # logging.info("\t\t\tRemoving file " + self.job_high + '.log')
                                                    os.remove(self.job_high + '.log')
                                                for rotor in range(len(self.species.dihed)):
                                                    for ai in range(self.species.hir.nrotation):
                                                        if os.path.exists(self.job_hir + str(rotor) + '_' + str(ai).zfill(2) + '.log'):
                                                            # logging.info("\t\t\tRemoving file " + self.job_hir + str(rotor) + '_' + str(ai).zfill(2) + '.log')
                                                            os.remove(self.job_hir + str(rotor) + '_' + str(ai).zfill(2) + '.log')
                                                # set the status of high and hir back to not started
                                                self.shigh = -1
                                                self.shir = -1
                                            else:
                                                logging.info('\t\tLower energy found, but readched max restart for {}'.format(self.name))
                                                self.shir = 1
                                        else:
                                            self.shir = 1
                                    else:
                                        self.shir = 1
                        else:
                            # no hir calculations necessary, set status to finished
                            self.shir = 1
                    if not self.wait or self.shir == 1 or self.shigh == -999:
                        # break the loop if no waiting is required or
                        # if the hir calcs are done or
                        # if the high level calc failed
                        break
                    else:
                        time.sleep(1)
            if self.shir == 1:
                # finalize if no waiting is required or if the hir calcs are done
                # calculate the symmetry numbers
                symmetry.calculate_symmetry(self.species)

                # calculate the new frequencies with the internal rotations projected out
                fr_file = self.name
                if not self.species.wellorts:
                    fr_file += '_well'
                if self.par['high_level']:
                    fr_file += '_high'
                fr_file = self.fr_file_name(self.par['high_level'])
                hess = self.qc.read_qc_hess(fr_file, self.species.natom)
                self.species.kinbot_freqs, self.species.reduced_freqs = frequencies.get_frequencies(self.species, hess, self.species.geom)

                # write the molpro input and read the molpro energy, if available
                if self.par['L3_calc'] == 1:
                    if self.par['single_point_qc'] == 'molpro':
                        molp = Molpro(self.species, self.par)
                        if 'barrierless_saddle' in self.name:
                            key = self.par['barrierless_saddle_single_point_key']
                            molp.create_molpro_input(bls=1)
                        else:
                            key = self.par['single_point_key']
                            molp.create_molpro_input()
                        molp.create_molpro_submit()
                        status, molpro_energy = molp.get_molpro_energy(key)

                        # FIXME this might be wrong here:
                        if status:
                            self.species.energy = molpro_energy

                    self.delete_files()

            if self.wait:
                if self.shir == 1 or self.shigh == -999:
                    return 0
                time.sleep(1)
            else:
                return 0
Exemple #4
0
    def testFrequencies(self):
        """
        Test the frequency calculator based on the hessian
        by projecting out the translations, external rotations
        and internal rotations
        """
        # smiles of the speciesdata
        smi = 'CCCC'
        # geometry of the species
        geom = [[0.91879892, -0.04331223, 0.12849174],
                [0.40326992, 1.40563299, 0.15982756],
                [0.89480303, 2.27635373, -1.01612317],
                [0.37978671, 1.82281002, -2.39283836],
                [0.56484506, -0.58104398, -0.75857814],
                [0.58013979, -0.60154787, 1.00923604],
                [2.01620768, -0.06868878, 0.11831706],
                [-0.69710354, 1.40285362, 0.16867873],
                [0.71679336, 1.87619548, 1.10252902],
                [0.58079101, 3.31524962, -0.84143554],
                [1.99516746, 2.28446562, -1.02104071],
                [-0.71762425, 1.80824531, -2.41526122],
                [0.72083567, 2.50053168, -3.18429864],
                [0.73195359, 0.81628395, -2.64600957]]
        geom = np.array(geom)

        # hessian matrix
        hess = [
            [
                0.557479281000, 0.036110582900, -0.001644922990,
                -0.094996623900, 0.033793056500, 0.001227901360,
                0.004435637720, -0.010301447300, -0.000714141524,
                -0.000402278745, 0.000207775781, 0.000217081305,
                -0.079155177000, -0.041443873100, -0.069861527200,
                -0.075582477100, -0.041043274800, 0.066112977000,
                -0.304832510000, 0.000618737475, 0.001591972160,
                -0.011587172100, 0.035782319500, 0.001443997110,
                0.003566576500, -0.009402669700, -0.000876604471,
                -0.000457712074, -0.002463678640, 0.002595980330,
                0.000811779351, -0.001430576500, 0.000032881273,
                0.000129362928, -0.000033252298, 0.000111660638,
                0.000157802640, -0.000276891050, 0.000074700177,
                0.000433511158, -0.000116808738, -0.000311955226
            ],
            [
                0.036110582900, 0.481460445000, -0.001497124110,
                0.032529383300, -0.168787802000, -0.006867396700,
                0.006092748400, -0.023937567300, 0.003730351660,
                -0.000262084184, 0.001441647380, 0.000316178114,
                -0.041989591900, -0.107986603000, -0.100880979000,
                -0.041503733500, -0.111783765000, 0.104729927000,
                0.001080107490, -0.048474562500, -0.000241263827,
                -0.000265123753, -0.003449223290, -0.000371820596,
                0.007618533730, -0.018717902300, 0.000837312337,
                -0.000555734072, -0.000078154904, 0.001999374050,
                0.000646690960, 0.001260483370, -0.001360417570,
                0.000088413780, -0.000085577196, 0.000164034911,
                -0.000076331932, -0.000238612455, -0.000622223468,
                0.000486138870, -0.000622805294, 0.000064046666
            ],
            [
                -0.001644922990, -0.001497124110, 0.575851102000,
                0.001964210840, -0.005551021620, -0.083609101600,
                -0.009286228620, 0.027728004900, 0.001373639180,
                -0.000137246872, 0.000910607647, 0.001051929890,
                -0.069899107500, -0.100194460000, -0.221142958000,
                0.066308541300, 0.103907569000, -0.219256026000,
                0.001583703380, -0.000080359730, -0.050839140900,
                -0.000325149456, 0.000352021138, 0.000321544325,
                0.010807393200, -0.028918001700, -0.000253208170,
                0.001475456680, 0.004079204780, -0.004016767400,
                -0.000771004699, -0.000846365220, 0.001019809380,
                -0.000285363620, 0.000091087635, -0.000075059137,
                -0.000051358279, -0.000192607794, 0.000123367411,
                0.000261076583, 0.000211445408, -0.000549130393
            ],
            [
                -0.094996623900, 0.032529383300, 0.001964210840,
                0.570648686000, 0.013726467600, 0.029803019800,
                -0.093894628800, -0.017540296600, 0.025240052300,
                0.004430547620, 0.007089239030, -0.008470974800,
                0.003985664600, -0.011160808500, -0.000344880024,
                0.003352509560, -0.011319168200, -0.000141509338,
                -0.012312369900, 0.035615059900, 0.001341132350,
                -0.296633947000, -0.002814851200, -0.001857303680,
                -0.074252517800, -0.032055118900, -0.063305094900,
                0.003016262880, 0.007165737430, -0.008147262180,
                -0.013171250400, -0.021050691300, 0.028389638100,
                0.000515556167, 0.000833930927, -0.001531483210,
                -0.000733957654, -0.000834470892, -0.003543541800,
                0.000046069520, -0.000184412716, 0.000603996490
            ],
            [
                0.033793056500, -0.168787802000, -0.005551021620,
                0.013726467600, 0.471256701000, 0.045550224600,
                -0.019055559200, -0.110456357000, 0.036788918500,
                0.003690246720, 0.008042833690, -0.005946132620,
                0.007450531200, -0.016991805700, 0.000566738577,
                0.007662075620, -0.017473385800, -0.003434017560,
                -0.000361925575, -0.003081819410, 0.000169600942,
                -0.002141608270, -0.048419727000, -0.001543381080,
                -0.032001313400, -0.092648760200, -0.091748171900,
                -0.012965805500, -0.019490702300, 0.027544257800,
                0.000385145313, -0.001607085100, 0.002202751810,
                0.000097042391, 0.000342026851, -0.000085156640,
                -0.000935724242, -0.000536578498, -0.003946142400,
                0.000657370855, -0.000147538049, -0.000568468443
            ],
            [
                0.001227901360, -0.006867396700, -0.083609101600,
                0.029803019800, 0.045550224600, 0.530185827000, 0.024067639100,
                0.038254723800, -0.133557501000, 0.009656895150,
                0.018083768400, -0.030339996500, 0.011176997800,
                -0.027940521700, 0.000197610447, -0.010718813500,
                0.027683119400, 0.001610715360, -0.000005380242,
                0.000353950668, -0.000058645732, -0.001385963250,
                -0.001490240310, -0.050945021400, -0.064025490200,
                -0.091980721200, -0.231554605000, -0.000068702298,
                -0.003001675120, 0.001414867140, 0.000375944632,
                0.002432713030, -0.002619663450, 0.000967738003,
                0.000578480710, 0.002131790000, -0.001665661510,
                -0.002059701750, -0.003910908180, 0.000593875240,
                0.000403276118, 0.001054632250
            ],
            [
                0.004435637720, 0.006092748400, -0.009286228620,
                -0.093894628800, -0.019055559200, 0.024067639100,
                0.570900497000, -0.032595232800, -0.004232877500,
                -0.095277421800, -0.011406581600, -0.030607826800,
                0.000043159915, -0.000514838503, 0.000373962854,
                -0.000738247952, 0.003637838290, -0.000237140037,
                0.000536641625, 0.001192182950, -0.001206594120,
                -0.013027642100, -0.020980119300, 0.028551488200,
                0.003004879320, 0.005695987090, -0.009218334250,
                -0.074383197800, 0.070019040800, 0.012170299900,
                -0.296727831000, 0.002527681320, 0.001997681770,
                -0.012251640800, -0.011694206300, -0.033682439000,
                0.003373175160, 0.003467893310, 0.010833941000, 0.004006619800,
                0.003613165550, 0.010476427500
            ],
            [
                -0.010301447300, -0.023937567300, 0.027728004900,
                -0.017540296600, -0.110456357000, 0.038254723800,
                -0.032595232800, 0.550390617000, 0.021569897200,
                -0.011111359900, -0.094250354100, -0.029239287500,
                -0.000711297419, 0.000972151769, 0.000156692325,
                0.001860692500, -0.005293631350, -0.000606360776,
                -0.000954457648, 0.002153894160, 0.000019371190,
                -0.000397838529, -0.001228430010, 0.002336752460,
                0.003859667870, 0.006484974130, -0.010940182100,
                0.070740800200, -0.270987312000, -0.037645349500,
                0.001896728730, -0.051464188100, -0.000592835086,
                0.000107061175, -0.000144181197, -0.000504021609,
                0.007980792090, 0.006761052700, 0.020233362800,
                -0.012833812400, -0.009000668610, -0.030770768100
            ],
            [
                -0.000714141524, 0.003730351660, 0.001373639180,
                0.025240052300, 0.036788918500, -0.133557501000,
                -0.004232877500, 0.021569897200, 0.451154731000,
                -0.032090962200, -0.028197579400, -0.158290659000,
                -0.000492084585, -0.000980152816, 0.000034862639,
                0.000407801351, -0.002484344690, 0.000853888771,
                0.000202037882, -0.000630194064, 0.000364010457,
                -0.000276661410, 0.002092844910, -0.002923760270,
                0.012375619200, 0.019611685600, -0.024571878400,
                0.011914527900, -0.037319661200, -0.053342229400,
                0.001505776140, -0.000642112942, -0.047826423400,
                0.000374606934, -0.000789448823, -0.002922212160,
                -0.010438695000, -0.010818867900, -0.022572722700,
                -0.003774999570, -0.001931336020, -0.007773745060
            ],
            [
                -0.000402278745, -0.000262084184, -0.000137246872,
                0.004430547620, 0.003690246720, 0.009656895150,
                -0.095277421800, -0.011111359900, -0.032090962200,
                0.558209213000, -0.009125619780, -0.034709539800,
                0.000415340383, 0.000358171193, 0.000000905828, 0.000159128422,
                0.000009821173, 0.000284856041, 0.000131990037,
                -0.000097828362, 0.000069311231, 0.000786266725,
                0.000375904422, 0.001427105050, -0.000456009865,
                -0.001763774920, 0.003115461590, 0.003579063430,
                0.003594264790, 0.008763686330, -0.011547639900,
                -0.011824677300, -0.033753097500, -0.305000167000,
                -0.001072859680, -0.000565352953, -0.076013943900,
                -0.051443542800, 0.058887756100, -0.079014088600,
                0.078673338600, 0.019050222000
            ],
            [
                0.000207775781, 0.001441647380, 0.000910607647, 0.007089239030,
                0.008042833690, 0.018083768400, -0.011406581600,
                -0.094250354100, -0.028197579400, -0.009125619780,
                0.566853551000, -0.028314924300, -0.000405813331,
                -0.000316988707, 0.000087265018, 0.000073046030,
                -0.000135428465, -0.000227947707, 0.000240096907,
                -0.000003210597, 0.000052913364, 0.000562715807,
                0.000386702658, -0.000586865840, -0.001249462100,
                -0.001984311450, 0.004661147410, -0.012569365100,
                -0.009659129560, -0.031620324000, 0.000388942723,
                -0.000027569785, -0.000685633791, -0.001195716590,
                -0.050831902500, 0.000607484566, -0.051498752000,
                -0.151306241000, 0.115957274000, 0.078889494300,
                -0.268209599000, -0.050727185300
            ],
            [
                0.000217081305, 0.000316178114, 0.001051929890,
                -0.008470974800, -0.005946132620, -0.030339996500,
                -0.030607826800, -0.029239287500, -0.158290659000,
                -0.034709539800, -0.028314924300, 0.489796505000,
                -0.000391829054, 0.000142067560, -0.000688267160,
                0.000058546643, -0.000657571583, 0.000021899914,
                -0.000169145634, 0.000141233266, -0.000156069524,
                -0.000870684066, -0.001083763300, 0.001824089140,
                0.000966571121, 0.002585026930, -0.002110201450,
                -0.004138394740, -0.001918643950, -0.009243037780,
                0.000150249840, -0.001426379210, -0.003164852780,
                -0.000834451580, 0.000361231775, -0.048518990600,
                0.059364188600, 0.116743826000, -0.179560342000,
                0.019436209100, -0.051702861200, -0.060622006300
            ],
            [
                -0.079155177000, -0.041989591900, -0.069899107500,
                0.003985664600, 0.007450531200, 0.011176997800, 0.000043159915,
                -0.000711297419, -0.000492084585, 0.000415340383,
                -0.000405813331, -0.000391829054, 0.082170568700,
                0.043883239500, 0.078044112600, 0.003495229520, 0.005401929110,
                0.009954809490, -0.011350612800, -0.016458449400,
                -0.029453532500, 0.000665737135, -0.000625010895,
                0.000511858440, 0.000059291070, 0.003007766240, 0.000159750828,
                -0.000060170797, -0.000108422372, 0.000205866966,
                0.000026998545, -0.000052468999, -0.000060908234,
                -0.000223489041, 0.000140719611, -0.000038210872,
                -0.000144869281, 0.000150427844, 0.000065183444,
                0.000072328995, 0.000316440754, 0.000217093184
            ],
            [
                -0.041443873100, -0.107986603000, -0.100194460000,
                -0.011160808500, -0.016991805700, -0.027940521700,
                -0.000514838503, 0.000972151769, -0.000980152816,
                0.000358171193, -0.000316988707, 0.000142067560,
                0.043883239500, 0.119840850000, 0.111814261000, 0.005906654280,
                0.008066891770, 0.014503839500, 0.000290968064,
                -0.000150240230, 0.000002063185, 0.000111922593,
                0.001514337600, 0.000276003926, 0.002702457800,
                -0.005775080730, 0.000445401249, 0.000111932829,
                0.000347388012, 0.000177052371, -0.000006786294,
                -0.000145911482, 0.000108411307, 0.000058268378,
                -0.000061770157, 0.000096427007, -0.000010851744,
                0.000535119260, 0.000099909733, -0.000286456542,
                0.000151661591, 0.001449697830
            ],
            [
                -0.069861527200, -0.100880979000, -0.221142958000,
                -0.000344880024, 0.000566738577, 0.000197610447,
                0.000373962854, 0.000156692325, 0.000034862639, 0.000000905828,
                0.000087265018, -0.000688267160, 0.078044112600,
                0.111814261000, 0.242817300000, -0.010493946400,
                -0.013936543100, -0.022850703000, 0.001401288830,
                0.000811652521, 0.000387534637, 0.000611035395,
                -0.000326880526, 0.000202559149, 0.000448151560,
                0.000430071969, 0.001316161050, -0.000015506148,
                -0.000226147940, 0.000124908040, 0.000053325603,
                0.000066745555, -0.000005338059, 0.000029804814,
                -0.000043582456, -0.000002800832, 0.000036585620,
                0.000161681863, 0.000229922299, -0.000283313413,
                0.001319024070, -0.000620791338
            ],
            [
                -0.075582477100, -0.041503733500, 0.066308541300,
                0.003352509560, 0.007662075620, -0.010718813500,
                -0.000738247952, 0.001860692500, 0.000407801351,
                0.000159128422, 0.000073046030, 0.000058546643, 0.003495229520,
                0.005906654280, -0.010493946400, 0.078647598400,
                0.043929663400, -0.073931943100, -0.010722735000,
                -0.017236570000, 0.029041201600, 0.000394715293,
                -0.000537710690, -0.000362268343, 0.000241854679,
                -0.000788101770, 0.000060932686, 0.000467445735,
                0.000365561370, -0.000302900477, 0.000423918964,
                0.000300000013, -0.000134663171, 0.000006452519,
                -0.000023320384, 0.000023532240, -0.000000863259,
                0.000025535986, 0.000019870589, -0.000144529814,
                -0.000033792868, 0.000024108483
            ],
            [
                -0.041043274800, -0.111783765000, 0.103907569000,
                -0.011319168200, -0.017473385800, 0.027683119400,
                0.003637838290, -0.005293631350, -0.002484344690,
                0.000009821173, -0.000135428465, -0.000657571583,
                0.005401929110, 0.008066891770, -0.013936543100,
                0.043929663400, 0.124958213000, -0.115530393000,
                0.000325281332, -0.000125007354, -0.000129258723,
                0.000384143980, 0.001259101570, 0.000001306272,
                -0.000870123215, 0.001042362100, -0.000426380057,
                -0.000426090514, -0.001300320690, 0.001591298870,
                0.000048406439, 0.000287275840, -0.000388354266,
                0.000055737630, 0.000018935809, 0.000059096657,
                -0.000026671850, 0.000148561268, 0.000149502306,
                -0.000107492816, 0.000330197117, 0.000160952609
            ],
            [
                0.066112977000, 0.104729927000, -0.219256026000,
                -0.000141509338, -0.003434017560, 0.001610715360,
                -0.000237140037, -0.000606360776, 0.000853888771,
                0.000284856041, -0.000227947707, 0.000021899914,
                0.009954809490, 0.014503839500, -0.022850703000,
                -0.073931943100, -0.115530393000, 0.238426713000,
                -0.001172378760, -0.000473740575, -0.000085975425,
                -0.000598006922, 0.000347859264, -0.000022101354,
                -0.000104883229, 0.000359811438, 0.000893666466,
                0.000047613768, -0.000039210588, -0.000025405264,
                0.000008736166, -0.000126420940, -0.000048007771,
                -0.000081103354, 0.000034200394, 0.000014479678,
                -0.000018292858, 0.000237094498, 0.000030248075,
                -0.000123734870, 0.000225358158, 0.000436607680
            ],
            [
                -0.304832510000, 0.001080107490, 0.001583703380,
                -0.012312369900, -0.000361925575, -0.000005380242,
                0.000536641625, -0.000954457648, 0.000202037882,
                0.000131990037, 0.000240096907, -0.000169145634,
                -0.011350612800, 0.000290968064, 0.001401288830,
                -0.010722735000, 0.000325281332, -0.001172378760,
                0.335968234000, -0.003796974450, -0.002196966940,
                0.001014683130, 0.002301249850, 0.000503015956, 0.000603465592,
                0.000253289215, 0.000532380180, 0.000412280046,
                -0.000005518885, -0.000002154967, 0.000632261852,
                0.000727256027, -0.000699875116, 0.000142228293,
                -0.000106601886, 0.000148869356, 0.000006913742,
                0.000060554518, -0.000076997589, -0.000230470931,
                -0.000053324956, -0.000048396325
            ],
            [
                0.000618737475, -0.048474562500, -0.000080359730,
                0.035615059900, -0.003081819410, 0.000353950668,
                0.001192182950, 0.002153894160, -0.000630194064,
                -0.000097828362, -0.000003210597, 0.000141233266,
                -0.016458449400, -0.000150240230, 0.000811652521,
                -0.017236570000, -0.000125007354, -0.000473740575,
                -0.003796974450, 0.054324381900, 0.000328044615,
                0.002236943710, -0.006269973860, -0.000090077542,
                -0.000556919926, 0.001404142770, -0.000144097996,
                -0.000333527294, 0.000376518698, -0.000398408893,
                -0.001046966920, -0.000163879470, 0.000271078925,
                -0.000111873714, -0.000047084158, -0.000192239409,
                -0.000015838536, 0.000041274254, 0.000051844795,
                -0.000007975487, 0.000015565803, 0.000051313421
            ],
            [
                0.001591972160, -0.000241263827, -0.050839140900,
                0.001341132350, 0.000169600942, -0.000058645732,
                -0.001206594120, 0.000019371190, 0.000364010457,
                0.000069311231, 0.000052913364, -0.000156069524,
                -0.029453532500, 0.000002063185, 0.000387534637,
                0.029041201600, -0.000129258723, -0.000085975425,
                -0.002196966940, 0.000328044615, 0.049536269700,
                0.000009025212, -0.000188391390, 0.000859989334,
                0.000485598736, 0.000167091798, -0.000050893837,
                0.000128473971, -0.000065137481, -0.000104352963,
                0.000159767814, 0.000051678617, 0.000154467411, 0.000145393609,
                -0.000107573025, 0.000044588785, 0.000030151342,
                0.000025660583, -0.000005990485, -0.000144934523,
                -0.000084799847, -0.000045791452
            ],
            [
                -0.011587172100, -0.000265123753, -0.000325149456,
                -0.296633947000, -0.002141608270, -0.001385963250,
                -0.013027642100, -0.000397838529, -0.000276661410,
                0.000786266725, 0.000562715807, -0.000870684066,
                0.000665737135, 0.000111922593, 0.000611035395, 0.000394715293,
                0.000384143980, -0.000598006922, 0.001014683130,
                0.002236943710, 0.000009025212, 0.327078658000, 0.001908306410,
                -0.000098643877, -0.011211103000, -0.000096625978,
                0.000161794067, 0.000445774654, -0.000675251910,
                -0.000001994717, 0.000919513287, -0.001690768780,
                0.001598510130, 0.000698874397, 0.000144489938, 0.001199897110,
                0.000425109666, -0.000023343949, -0.000045138440,
                0.000030532015, -0.000057961271, 0.000021980223
            ],
            [
                0.035782319500, -0.003449223290, 0.000352021138,
                -0.002814851200, -0.048419727000, -0.001490240310,
                -0.020980119300, -0.001228430010, 0.002092844910,
                0.000375904422, 0.000386702658, -0.001083763300,
                -0.000625010895, 0.001514337600, -0.000326880526,
                -0.000537710690, 0.001259101570, 0.000347859264,
                0.002301249850, -0.006269973860, -0.000188391390,
                0.001908306410, 0.057676638400, -0.002012297070,
                -0.015037876400, -0.000231322031, -0.000293743748,
                0.000076710051, 0.000337089674, -0.000732923797,
                -0.001033320970, -0.001677935690, 0.003357378420,
                0.000462630311, 0.000228833858, 0.000196170553, 0.000041609570,
                -0.000164615301, -0.000252036680, 0.000080159392,
                0.000038523433, 0.000034002544
            ],
            [
                0.001443997110, -0.000371820596, 0.000321544325,
                -0.001857303680, -0.001543381080, -0.050945021400,
                0.028551488200, 0.002336752460, -0.002923760270,
                0.001427105050, -0.000586865840, 0.001824089140,
                0.000511858440, 0.000276003926, 0.000202559149,
                -0.000362268343, 0.000001306272, -0.000022101354,
                0.000503015956, -0.000090077542, 0.000859989334,
                -0.000098643877, -0.002012297070, 0.053996240600,
                -0.030319186800, -0.000675798642, -0.000572841147,
                -0.000653076701, -0.000463440047, 0.000816895682,
                0.002084942010, 0.003132456320, -0.003659014380,
                -0.000911429020, -0.000039664076, -0.000139936846,
                -0.000326542275, 0.000011716933, 0.000402783060,
                0.000006043879, 0.000025108980, -0.000161425910
            ],
            [
                0.003566576500, 0.007618533730, 0.010807393200,
                -0.074252517800, -0.032001313400, -0.064025490200,
                0.003004879320, 0.003859667870, 0.012375619200,
                -0.000456009865, -0.001249462100, 0.000966571121,
                0.000059291070, 0.002702457800, 0.000448151560, 0.000241854679,
                -0.000870123215, -0.000104883229, 0.000603465592,
                -0.000556919926, 0.000485598736, -0.011211103000,
                -0.015037876400, -0.030319186800, 0.076908890300,
                0.034393823600, 0.069678815000, 0.000280541835, 0.000499146782,
                -0.000714739428, 0.000437960626, 0.000608390526,
                -0.000262541603, 0.000410586032, -0.000025447089,
                0.000355884856, 0.000467119865, 0.000078313296, 0.000422103376,
                -0.000061535147, -0.000019191454, -0.000113295827
            ],
            [
                -0.009402669700, -0.018717902300, -0.028918001700,
                -0.032055118900, -0.092648760200, -0.091980721200,
                0.005695987090, 0.006484974130, 0.019611685600,
                -0.001763774920, -0.001984311450, 0.002585026930,
                0.003007766240, -0.005775080730, 0.000430071969,
                -0.000788101770, 0.001042362100, 0.000359811438,
                0.000253289215, 0.001404142770, 0.000167091798,
                -0.000096625978, -0.000231322031, -0.000675798642,
                0.034393823600, 0.108705444000, 0.098282383300, 0.000536535704,
                0.001045616250, -0.000233377753, 0.000197842819,
                0.000436602581, -0.000746827584, 0.000002929675,
                -0.000191975080, -0.000225290437, 0.000183020208,
                0.000300248641, 0.001103529870, -0.000164903323,
                0.000129961184, 0.000240416270
            ],
            [
                -0.000876604471, 0.000837312337, -0.000253208170,
                -0.063305094900, -0.091748171900, -0.231554605000,
                -0.009218334250, -0.010940182100, -0.024571878400,
                0.003115461590, 0.004661147410, -0.002110201450,
                0.000159750828, 0.000445401249, 0.001316161050, 0.000060932686,
                -0.000426380057, 0.000893666466, 0.000532380180,
                -0.000144097996, -0.000050893837, 0.000161794067,
                -0.000293743748, -0.000572841147, 0.069678815000,
                0.098282383300, 0.256012547000, -0.000695797842,
                0.000405605652, 0.000999258380, 0.000659004856,
                -0.000503505707, 0.000708239491, 0.000002552083,
                0.000110082904, 0.000462709809, -0.000439580294,
                -0.000527497416, -0.001625311350, 0.000164720405,
                -0.000158353984, 0.000346357198
            ],
            [
                -0.000457712074, -0.000555734072, 0.001475456680,
                0.003016262880, -0.012965805500, -0.000068702298,
                -0.074383197800, 0.070740800200, 0.011914527900,
                0.003579063430, -0.012569365100, -0.004138394740,
                -0.000060170797, 0.000111932829, -0.000015506148,
                0.000467445735, -0.000426090514, 0.000047613768,
                0.000412280046, -0.000333527294, 0.000128473971,
                0.000445774654, 0.000076710051, -0.000653076701,
                0.000280541835, 0.000536535704, -0.000695797842,
                0.077003315500, -0.076817039100, -0.012542197900,
                -0.011205602800, 0.033354294600, 0.005531828340,
                0.000601743047, -0.000294036321, 0.000670043314,
                0.000236669508, 0.000359711857, 0.000799593785, 0.000063586822,
                -0.001218387310, -0.002453862220
            ],
            [
                -0.002463678640, -0.000078154904, 0.004079204780,
                0.007165737430, -0.019490702300, -0.003001675120,
                0.070019040800, -0.270987312000, -0.037319661200,
                0.003594264790, -0.009659129560, -0.001918643950,
                -0.000108422372, 0.000347388012, -0.000226147940,
                0.000365561370, -0.001300320690, -0.000039210588,
                -0.000005518885, 0.000376518698, -0.000065137481,
                -0.000675251910, 0.000337089674, -0.000463440047,
                0.000499146782, 0.001045616250, 0.000405605652,
                -0.076817039100, 0.298274531000, 0.040406725300,
                -0.000136212824, -0.000795615621, -0.000114897060,
                -0.000586260703, 0.000093614097, 0.000252036708,
                0.000174692057, 0.000878659823, -0.000383102689,
                -0.001026058750, 0.000957816966, -0.001611656380
            ],
            [
                0.002595980330, 0.001999374050, -0.004016767400,
                -0.008147262180, 0.027544257800, 0.001414867140,
                0.012170299900, -0.037645349500, -0.053342229400,
                0.008763686330, -0.031620324000, -0.009243037780,
                0.000205866966, 0.000177052371, 0.000124908040,
                -0.000302900477, 0.001591298870, -0.000025405264,
                -0.000002154967, -0.000398408893, -0.000104352963,
                -0.000001994717, -0.000732923797, 0.000816895682,
                -0.000714739428, -0.000233377753, 0.000999258380,
                -0.012542197900, 0.040406725300, 0.066461670300,
                0.000111476779, -0.000463310086, -0.000005613339,
                -0.000083374773, 0.000585667105, 0.001289783720,
                0.000768879885, 0.000408824903, 0.001044358070,
                -0.002821565820, -0.001619506420, -0.005414335160
            ],
            [
                0.000811779351, 0.000646690960, -0.000771004699,
                -0.013171250400, 0.000385145313, 0.000375944632,
                -0.296727831000, 0.001896728730, 0.001505776140,
                -0.011547639900, 0.000388942723, 0.000150249840,
                0.000026998545, -0.000006786294, 0.000053325603,
                0.000423918964, 0.000048406439, 0.000008736166, 0.000632261852,
                -0.001046966920, 0.000159767814, 0.000919513287,
                -0.001033320970, 0.002084942010, 0.000437960626,
                0.000197842819, 0.000659004856, -0.011205602800,
                -0.000136212824, 0.000111476779, 0.327319130000,
                -0.000522519027, -0.001747096940, 0.001019228930,
                -0.000665600374, -0.002131478270, 0.000410888095,
                0.000459443519, -0.000527224047, 0.000650645014,
                -0.000611794096, 0.000067580103
            ],
            [
                -0.001430576500, 0.001260483370, -0.000846365220,
                -0.021050691300, -0.001607085100, 0.002432713030,
                0.002527681320, -0.051464188100, -0.000642112942,
                -0.011824677300, -0.000027569785, -0.001426379210,
                -0.000052468999, -0.000145911482, 0.000066745555,
                0.000300000013, 0.000287275840, -0.000126420940,
                0.000727256027, -0.000163879470, 0.000051678617,
                -0.001690768780, -0.001677935690, 0.003132456320,
                0.000608390526, 0.000436602581, -0.000503505707,
                0.033354294600, -0.000795615621, -0.000463310086,
                -0.000522519027, 0.053211548800, -0.000605423301,
                -0.001149055730, 0.000174592071, -0.002056008930,
                0.000508508927, 0.000184012806, 0.000337657158,
                -0.000305373851, 0.000327669725, 0.000648275660
            ],
            [
                0.000032881273, -0.001360417570, 0.001019809380,
                0.028389638100, 0.002202751810, -0.002619663450,
                0.001997681770, -0.000592835086, -0.047826423400,
                -0.033753097500, -0.000685633791, -0.003164852780,
                -0.000060908234, 0.000108411307, -0.000005338059,
                -0.000134663171, -0.000388354266, -0.000048007771,
                -0.000699875116, 0.000271078925, 0.000154467411,
                0.001598510130, 0.003357378420, -0.003659014380,
                -0.000262541603, -0.000746827584, 0.000708239491,
                0.005531828340, -0.000114897060, -0.000005613339,
                -0.001747096940, -0.000605423301, 0.058534733700,
                -0.002049213140, -0.002165722420, -0.005580464400,
                0.000418020512, 0.000671917929, 0.001075125330, 0.000738835582,
                0.000048572694, 0.001417002250
            ],
            [
                0.000129362928, 0.000088413780, -0.000285363620,
                0.000515556167, 0.000097042391, 0.000967738003,
                -0.012251640800, 0.000107061175, 0.000374606934,
                -0.305000167000, -0.001195716590, -0.000834451580,
                -0.000223489041, 0.000058268378, 0.000029804814,
                0.000006452519, 0.000055737630, -0.000081103354,
                0.000142228293, -0.000111873714, 0.000145393609,
                0.000698874397, 0.000462630311, -0.000911429020,
                0.000410586032, 0.000002929675, 0.000002552083, 0.000601743047,
                -0.000586260703, -0.000083374773, 0.001019228930,
                -0.001149055730, -0.002049213140, 0.335981374000,
                0.002561958750, 0.003297591000, -0.010801126300,
                0.001048090670, -0.000668728837, -0.011228983200,
                -0.001439226010, 0.000095977887
            ],
            [
                -0.000033252298, -0.000085577196, 0.000091087635,
                0.000833930927, 0.000342026851, 0.000578480710,
                -0.011694206300, -0.000144181197, -0.000789448823,
                -0.001072859680, -0.050831902500, 0.000361231775,
                0.000140719611, -0.000061770157, -0.000043582456,
                -0.000023320384, 0.000018935809, 0.000034200394,
                -0.000106601886, -0.000047084158, -0.000107573025,
                0.000144489938, 0.000228833858, -0.000039664076,
                -0.000025447089, -0.000191975080, 0.000110082904,
                -0.000294036321, 0.000093614097, 0.000585667105,
                -0.000665600374, 0.000174592071, -0.002165722420,
                0.002561958750, 0.050149008600, 0.001623164620,
                -0.022680777200, -0.000201125886, -0.000105607558,
                0.032915002300, 0.000556604861, -0.000132316779
            ],
            [
                0.000111660638, 0.000164034911, -0.000075059137,
                -0.001531483210, -0.000085156640, 0.002131790000,
                -0.033682439000, -0.000504021609, -0.002922212160,
                -0.000565352953, 0.000607484566, -0.048518990600,
                -0.000038210872, 0.000096427007, -0.000002800832,
                0.000023532240, 0.000059096657, 0.000014479678, 0.000148869356,
                -0.000192239409, 0.000044588785, 0.001199897110,
                0.000196170553, -0.000139936846, 0.000355884856,
                -0.000225290437, 0.000462709809, 0.000670043314,
                0.000252036708, 0.001289783720, -0.002131478270,
                -0.002056008930, -0.005580464400, 0.003297591000,
                0.001623164620, 0.053631786900, 0.024986835900,
                -0.000480266327, 0.000069007009, 0.007154649910,
                0.000544568335, -0.000404681882
            ],
            [
                0.000157802640, -0.000076331932, -0.000051358279,
                -0.000733957654, -0.000935724242, -0.001665661510,
                0.003373175160, 0.007980792090, -0.010438695000,
                -0.076013943900, -0.051498752000, 0.059364188600,
                -0.000144869281, -0.000010851744, 0.000036585620,
                -0.000000863259, -0.000026671850, -0.000018292858,
                0.000006913742, -0.000015838536, 0.000030151342,
                0.000425109666, 0.000041609570, -0.000326542275,
                0.000467119865, 0.000183020208, -0.000439580294,
                0.000236669508, 0.000174692057, 0.000768879885, 0.000410888095,
                0.000508508927, 0.000418020512, -0.010801126300,
                -0.022680777200, 0.024986835900, 0.079112534200,
                0.058103695900, -0.063986801200, 0.003504547540,
                0.008252628830, -0.008677730390
            ],
            [
                -0.000276891050, -0.000238612455, -0.000192607794,
                -0.000834470892, -0.000536578498, -0.002059701750,
                0.003467893310, 0.006761052700, -0.010818867900,
                -0.051443542800, -0.151306241000, 0.116743826000,
                0.000150427844, 0.000535119260, 0.000161681863, 0.000025535986,
                0.000148561268, 0.000237094498, 0.000060554518, 0.000041274254,
                0.000025660583, -0.000023343949, -0.000164615301,
                0.000011716933, 0.000078313296, 0.000300248641,
                -0.000527497416, 0.000359711857, 0.000878659823,
                0.000408824903, 0.000459443519, 0.000184012806, 0.000671917929,
                0.001048090670, -0.000201125886, -0.000480266327,
                0.058103695900, 0.163615200000, -0.127320828000,
                -0.011175418200, -0.020016956200, 0.023139046100
            ],
            [
                0.000074700177, -0.000622223468, 0.000123367411,
                -0.003543541800, -0.003946142400, -0.003910908180,
                0.010833941000, 0.020233362800, -0.022572722700,
                0.058887756100, 0.115957274000, -0.179560342000,
                0.000065183444, 0.000099909733, 0.000229922299, 0.000019870589,
                0.000149502306, 0.000030248075, -0.000076997589,
                0.000051844795, -0.000005990485, -0.000045138440,
                -0.000252036680, 0.000402783060, 0.000422103376,
                0.001103529870, -0.001625311350, 0.000799593785,
                -0.000383102689, 0.001044358070, -0.000527224047,
                0.000337657158, 0.001075125330, -0.000668728837,
                -0.000105607558, 0.000069007009, -0.063986801200,
                -0.127320828000, 0.199467764000, -0.002254716580,
                -0.005303140270, 0.005232700240
            ],
            [
                0.000433511158, 0.000486138870, 0.000261076583, 0.000046069520,
                0.000657370855, 0.000593875240, 0.004006619800,
                -0.012833812400, -0.003774999570, -0.079014088600,
                0.078889494300, 0.019436209100, 0.000072328995,
                -0.000286456542, -0.000283313413, -0.000144529814,
                -0.000107492816, -0.000123734870, -0.000230470931,
                -0.000007975487, -0.000144934523, 0.000030532015,
                0.000080159392, 0.000006043879, -0.000061535147,
                -0.000164903323, 0.000164720405, 0.000063586822,
                -0.001026058750, -0.002821565820, 0.000650645014,
                -0.000305373851, 0.000738835582, -0.011228983200,
                0.032915002300, 0.007154649910, 0.003504547540,
                -0.011175418200, -0.002254716580, 0.081871766900,
                -0.087120674300, -0.018952145900
            ],
            [
                -0.000116808738, -0.000622805294, 0.000211445408,
                -0.000184412716, -0.000147538049, 0.000403276118,
                0.003613165550, -0.009000668610, -0.001931336020,
                0.078673338600, -0.268209599000, -0.051702861200,
                0.000316440754, 0.000151661591, 0.001319024070,
                -0.000033792868, 0.000330197117, 0.000225358158,
                -0.000053324956, 0.000015565803, -0.000084799847,
                -0.000057961271, 0.000038523433, 0.000025108980,
                -0.000019191454, 0.000129961184, -0.000158353984,
                -0.001218387310, 0.000957816966, -0.001619506420,
                -0.000611794096, 0.000327669725, 0.000048572694,
                -0.001439226010, 0.000556604861, 0.000544568335,
                0.008252628830, -0.020016956200, -0.005303140270,
                -0.087120674300, 0.295489566000, 0.058022644000
            ],
            [
                -0.000311955226, 0.000064046666, -0.000549130393,
                0.000603996490, -0.000568468443, 0.001054632250,
                0.010476427500, -0.030770768100, -0.007773745060,
                0.019050222000, -0.050727185300, -0.060622006300,
                0.000217093184, 0.001449697830, -0.000620791338,
                0.000024108483, 0.000160952609, 0.000436607680,
                -0.000048396325, 0.000051313421, -0.000045791452,
                0.000021980223, 0.000034002544, -0.000161425910,
                -0.000113295827, 0.000240416270, 0.000346357198,
                -0.002453862220, -0.001611656380, -0.005414335160,
                0.000067580103, 0.000648275660, 0.001417002250, 0.000095977887,
                -0.000132316779, -0.000404681882, -0.008677730390,
                0.023139046100, 0.005232700240, -0.018952145900,
                0.058022644000, 0.067104607900
            ]
        ]
        hess = np.array(hess)

        st_pt = StationaryPoint(smi, 0, 1, smiles=smi)
        st_pt.characterize()
        natom = st_pt.natom
        freq, reduced_freqs = frequencies.get_frequencies(st_pt, hess, geom)

        # check the number of frequencies when neglecting internal rotors
        warn = 'Wrong number of frequencies for '
        warn += '{}, expected {}, calculated {}'.format(
            smi, 3 * natom - 6, len(freq))
        self.assertEqual(len(freq), 3 * natom - 6, warn)

        # check the number of freauencies when including internal rotors
        warn = 'Wrong number of frequencies for '
        warn += '{}, expected {}, calculated {}'.format(
            smi, 3 * natom - 6 - 3, len(reduced_freqs))
        self.assertEqual(len(reduced_freqs), 3 * natom - 6 - 3, warn)

        # check if the frequencies are as expected
        exps = [
            114.00308362581993, 217.27775429467988, 258.3569949257438,
            324.95225959788496, 444.19934314923285, 775.6200599866132,
            809.834778642176, 851.31690919327, 978.7594097713534,
            1001.6985870040352, 1016.7427610310635, 1110.2892683008433,
            1182.5149554411457, 1226.4874456219302, 1318.400582167711,
            1338.054870101307, 1396.7770994771845, 1417.5721206176297,
            1452.5015242293932, 1460.9939823348343, 1533.7500760993864,
            1534.471579819868, 1544.1270899676583, 1549.977599644375,
            1552.1602547884133, 1556.1540474667054, 3018.3546194275327,
            3020.597688051164, 3036.615370205335, 3039.4844797216215,
            3056.030309062557, 3060.954764774267, 3108.0034857725796,
            3110.0837061265997, 3114.029978361547, 3121.6966999165047
        ]
        for i, exp in enumerate(exps):
            warn = 'Frequency values have wrong number: '
            warn += 'expected {}, calculated {}'.format(exp, freq[i])
            self.assertAlmostEqual(exp, freq[i], places=2, msg=warn)

        # check if the reduced frequencies are as expected
        exps = [
            323.2231139328416, 443.06424130022316, 670.1999625377555,
            765.4302138965138, 805.4817609384712, 923.6453995768678,
            998.4208652995756, 1010.1550075636384, 1026.2590199716992,
            1035.9563299669474, 1110.728140649036, 1237.3899533374413,
            1297.0701335112522, 1319.639259548847, 1338.4248295874343,
            1402.476769356911, 1417.8484347981505, 1476.7358681560938,
            1487.8976160436305, 1525.2008164401302, 1544.0032443689747,
            1547.12404969892, 1549.9807205743023, 2426.2794467384574,
            2507.323795982035, 2864.813636413937, 3024.7798090881265,
            3034.7484086579275, 3037.1066584298032, 3052.278595042064,
            3107.809971415559, 3113.170533468414, 3113.8054919074493
        ]
        for i, exp in enumerate(exps):
            warn = 'Frequency values have wrong number: '
            warn += 'expected {}, calculated {}'.format(exp, reduced_freqs[i])
            self.assertAlmostEqual(exp, reduced_freqs[i], places=2, msg=warn)
Exemple #5
0
    def testFrequencies(self):
        """
        Test the frequency calculator based on the hessian
        by projecting out the translations, external rotations
        and internal rotations
        """
        # smiles of the speciesdata
        smi = 'CCCC'
        # geometry of the species
        geom = [[ 0.91879892, -0.04331223,  0.12849174],
                [ 0.40326992,  1.40563299,  0.15982756],
                [ 0.89480303,  2.27635373, -1.01612317],
                [ 0.37978671,  1.82281002, -2.39283836],
                [ 0.56484506, -0.58104398, -0.75857814],
                [ 0.58013979, -0.60154787,  1.00923604],
                [ 2.01620768, -0.06868878,  0.11831706],
                [-0.69710354,  1.40285362,  0.16867873],
                [ 0.71679336,  1.87619548,  1.10252902],
                [ 0.58079101,  3.31524962, -0.84143554],
                [ 1.99516746,  2.28446562, -1.02104071],
                [-0.71762425,  1.80824531, -2.41526122],
                [ 0.72083567,  2.50053168, -3.18429864],
                [ 0.73195359,  0.81628395, -2.64600957]]
        geom = np.array(geom)

        # hessian matrix
        hess = [[ 0.557479281000,  0.036110582900, -0.001644922990, -0.094996623900,  0.033793056500,  0.001227901360,  0.004435637720, -0.010301447300, -0.000714141524, -0.000402278745,  0.000207775781,  0.000217081305, -0.079155177000, -0.041443873100, -0.069861527200, -0.075582477100, -0.041043274800,  0.066112977000, -0.304832510000,  0.000618737475,  0.001591972160, -0.011587172100,  0.035782319500,  0.001443997110,  0.003566576500, -0.009402669700, -0.000876604471, -0.000457712074, -0.002463678640,  0.002595980330,  0.000811779351, -0.001430576500,  0.000032881273,  0.000129362928, -0.000033252298,  0.000111660638,  0.000157802640, -0.000276891050,  0.000074700177,  0.000433511158, -0.000116808738, -0.000311955226],
                [ 0.036110582900,  0.481460445000, -0.001497124110,  0.032529383300, -0.168787802000, -0.006867396700,  0.006092748400, -0.023937567300,  0.003730351660, -0.000262084184,  0.001441647380,  0.000316178114, -0.041989591900, -0.107986603000, -0.100880979000, -0.041503733500, -0.111783765000,  0.104729927000,  0.001080107490, -0.048474562500, -0.000241263827, -0.000265123753, -0.003449223290, -0.000371820596,  0.007618533730, -0.018717902300,  0.000837312337, -0.000555734072, -0.000078154904,  0.001999374050,  0.000646690960,  0.001260483370, -0.001360417570,  0.000088413780, -0.000085577196,  0.000164034911, -0.000076331932, -0.000238612455, -0.000622223468,  0.000486138870, -0.000622805294,  0.000064046666],
                [-0.001644922990, -0.001497124110,  0.575851102000,  0.001964210840, -0.005551021620, -0.083609101600, -0.009286228620,  0.027728004900,  0.001373639180, -0.000137246872,  0.000910607647,  0.001051929890, -0.069899107500, -0.100194460000, -0.221142958000,  0.066308541300,  0.103907569000, -0.219256026000,  0.001583703380, -0.000080359730, -0.050839140900, -0.000325149456,  0.000352021138,  0.000321544325,  0.010807393200, -0.028918001700, -0.000253208170,  0.001475456680,  0.004079204780, -0.004016767400, -0.000771004699, -0.000846365220,  0.001019809380, -0.000285363620,  0.000091087635, -0.000075059137, -0.000051358279, -0.000192607794,  0.000123367411,  0.000261076583,  0.000211445408, -0.000549130393],
                [-0.094996623900,  0.032529383300,  0.001964210840,  0.570648686000,  0.013726467600,  0.029803019800, -0.093894628800, -0.017540296600,  0.025240052300,  0.004430547620,  0.007089239030, -0.008470974800,  0.003985664600, -0.011160808500, -0.000344880024,  0.003352509560, -0.011319168200, -0.000141509338, -0.012312369900,  0.035615059900,  0.001341132350, -0.296633947000, -0.002814851200, -0.001857303680, -0.074252517800, -0.032055118900, -0.063305094900,  0.003016262880,  0.007165737430, -0.008147262180, -0.013171250400, -0.021050691300,  0.028389638100,  0.000515556167,  0.000833930927, -0.001531483210, -0.000733957654, -0.000834470892, -0.003543541800,  0.000046069520, -0.000184412716,  0.000603996490],
                [ 0.033793056500, -0.168787802000, -0.005551021620,  0.013726467600,  0.471256701000,  0.045550224600, -0.019055559200, -0.110456357000,  0.036788918500,  0.003690246720,  0.008042833690, -0.005946132620,  0.007450531200, -0.016991805700,  0.000566738577,  0.007662075620, -0.017473385800, -0.003434017560, -0.000361925575, -0.003081819410,  0.000169600942, -0.002141608270, -0.048419727000, -0.001543381080, -0.032001313400, -0.092648760200, -0.091748171900, -0.012965805500, -0.019490702300,  0.027544257800,  0.000385145313, -0.001607085100,  0.002202751810,  0.000097042391,  0.000342026851, -0.000085156640, -0.000935724242, -0.000536578498, -0.003946142400,  0.000657370855, -0.000147538049, -0.000568468443],
                [ 0.001227901360, -0.006867396700, -0.083609101600,  0.029803019800,  0.045550224600,  0.530185827000,  0.024067639100,  0.038254723800, -0.133557501000,  0.009656895150,  0.018083768400, -0.030339996500,  0.011176997800, -0.027940521700,  0.000197610447, -0.010718813500,  0.027683119400,  0.001610715360, -0.000005380242,  0.000353950668, -0.000058645732, -0.001385963250, -0.001490240310, -0.050945021400, -0.064025490200, -0.091980721200, -0.231554605000, -0.000068702298, -0.003001675120,  0.001414867140,  0.000375944632,  0.002432713030, -0.002619663450,  0.000967738003,  0.000578480710,  0.002131790000, -0.001665661510, -0.002059701750, -0.003910908180,  0.000593875240,  0.000403276118,  0.001054632250],
                [ 0.004435637720,  0.006092748400, -0.009286228620, -0.093894628800, -0.019055559200,  0.024067639100,  0.570900497000, -0.032595232800, -0.004232877500, -0.095277421800, -0.011406581600, -0.030607826800,  0.000043159915, -0.000514838503,  0.000373962854, -0.000738247952,  0.003637838290, -0.000237140037,  0.000536641625,  0.001192182950, -0.001206594120, -0.013027642100, -0.020980119300,  0.028551488200,  0.003004879320,  0.005695987090, -0.009218334250, -0.074383197800,  0.070019040800,  0.012170299900, -0.296727831000,  0.002527681320,  0.001997681770, -0.012251640800, -0.011694206300, -0.033682439000,  0.003373175160,  0.003467893310,  0.010833941000,  0.004006619800,  0.003613165550,  0.010476427500],
                [-0.010301447300, -0.023937567300,  0.027728004900, -0.017540296600, -0.110456357000,  0.038254723800, -0.032595232800,  0.550390617000,  0.021569897200, -0.011111359900, -0.094250354100, -0.029239287500, -0.000711297419,  0.000972151769,  0.000156692325,  0.001860692500, -0.005293631350, -0.000606360776, -0.000954457648,  0.002153894160,  0.000019371190, -0.000397838529, -0.001228430010,  0.002336752460,  0.003859667870,  0.006484974130, -0.010940182100,  0.070740800200, -0.270987312000, -0.037645349500,  0.001896728730, -0.051464188100, -0.000592835086,  0.000107061175, -0.000144181197, -0.000504021609,  0.007980792090,  0.006761052700,  0.020233362800, -0.012833812400, -0.009000668610, -0.030770768100],
                [-0.000714141524,  0.003730351660,  0.001373639180,  0.025240052300,  0.036788918500, -0.133557501000, -0.004232877500,  0.021569897200,  0.451154731000, -0.032090962200, -0.028197579400, -0.158290659000, -0.000492084585, -0.000980152816,  0.000034862639,  0.000407801351, -0.002484344690,  0.000853888771,  0.000202037882, -0.000630194064,  0.000364010457, -0.000276661410,  0.002092844910, -0.002923760270,  0.012375619200,  0.019611685600, -0.024571878400,  0.011914527900, -0.037319661200, -0.053342229400,  0.001505776140, -0.000642112942, -0.047826423400,  0.000374606934, -0.000789448823, -0.002922212160, -0.010438695000, -0.010818867900, -0.022572722700, -0.003774999570, -0.001931336020, -0.007773745060],
                [-0.000402278745, -0.000262084184, -0.000137246872,  0.004430547620,  0.003690246720,  0.009656895150, -0.095277421800, -0.011111359900, -0.032090962200,  0.558209213000, -0.009125619780, -0.034709539800,  0.000415340383,  0.000358171193,  0.000000905828,  0.000159128422,  0.000009821173,  0.000284856041,  0.000131990037, -0.000097828362,  0.000069311231,  0.000786266725,  0.000375904422,  0.001427105050, -0.000456009865, -0.001763774920,  0.003115461590,  0.003579063430,  0.003594264790,  0.008763686330, -0.011547639900, -0.011824677300, -0.033753097500, -0.305000167000, -0.001072859680, -0.000565352953, -0.076013943900, -0.051443542800,  0.058887756100, -0.079014088600,  0.078673338600,  0.019050222000],
                [ 0.000207775781,  0.001441647380,  0.000910607647,  0.007089239030,  0.008042833690,  0.018083768400, -0.011406581600, -0.094250354100, -0.028197579400, -0.009125619780,  0.566853551000, -0.028314924300, -0.000405813331, -0.000316988707,  0.000087265018,  0.000073046030, -0.000135428465, -0.000227947707,  0.000240096907, -0.000003210597,  0.000052913364,  0.000562715807,  0.000386702658, -0.000586865840, -0.001249462100, -0.001984311450,  0.004661147410, -0.012569365100, -0.009659129560, -0.031620324000,  0.000388942723, -0.000027569785, -0.000685633791, -0.001195716590, -0.050831902500,  0.000607484566, -0.051498752000, -0.151306241000,  0.115957274000,  0.078889494300, -0.268209599000, -0.050727185300],
                [ 0.000217081305,  0.000316178114,  0.001051929890, -0.008470974800, -0.005946132620, -0.030339996500, -0.030607826800, -0.029239287500, -0.158290659000, -0.034709539800, -0.028314924300,  0.489796505000, -0.000391829054,  0.000142067560, -0.000688267160,  0.000058546643, -0.000657571583,  0.000021899914, -0.000169145634,  0.000141233266, -0.000156069524, -0.000870684066, -0.001083763300,  0.001824089140,  0.000966571121,  0.002585026930, -0.002110201450, -0.004138394740, -0.001918643950, -0.009243037780,  0.000150249840, -0.001426379210, -0.003164852780, -0.000834451580,  0.000361231775, -0.048518990600,  0.059364188600,  0.116743826000, -0.179560342000,  0.019436209100, -0.051702861200, -0.060622006300],
                [-0.079155177000, -0.041989591900, -0.069899107500,  0.003985664600,  0.007450531200,  0.011176997800,  0.000043159915, -0.000711297419, -0.000492084585,  0.000415340383, -0.000405813331, -0.000391829054,  0.082170568700,  0.043883239500,  0.078044112600,  0.003495229520,  0.005401929110,  0.009954809490, -0.011350612800, -0.016458449400, -0.029453532500,  0.000665737135, -0.000625010895,  0.000511858440,  0.000059291070,  0.003007766240,  0.000159750828, -0.000060170797, -0.000108422372,  0.000205866966,  0.000026998545, -0.000052468999, -0.000060908234, -0.000223489041,  0.000140719611, -0.000038210872, -0.000144869281,  0.000150427844,  0.000065183444,  0.000072328995,  0.000316440754,  0.000217093184],
                [-0.041443873100, -0.107986603000, -0.100194460000, -0.011160808500, -0.016991805700, -0.027940521700, -0.000514838503,  0.000972151769, -0.000980152816,  0.000358171193, -0.000316988707,  0.000142067560,  0.043883239500,  0.119840850000,  0.111814261000,  0.005906654280,  0.008066891770,  0.014503839500,  0.000290968064, -0.000150240230,  0.000002063185,  0.000111922593,  0.001514337600,  0.000276003926,  0.002702457800, -0.005775080730,  0.000445401249,  0.000111932829,  0.000347388012,  0.000177052371, -0.000006786294, -0.000145911482,  0.000108411307,  0.000058268378, -0.000061770157,  0.000096427007, -0.000010851744,  0.000535119260,  0.000099909733, -0.000286456542,  0.000151661591,  0.001449697830],
                [-0.069861527200, -0.100880979000, -0.221142958000, -0.000344880024,  0.000566738577,  0.000197610447,  0.000373962854,  0.000156692325,  0.000034862639,  0.000000905828,  0.000087265018, -0.000688267160,  0.078044112600,  0.111814261000,  0.242817300000, -0.010493946400, -0.013936543100, -0.022850703000,  0.001401288830,  0.000811652521,  0.000387534637,  0.000611035395, -0.000326880526,  0.000202559149,  0.000448151560,  0.000430071969,  0.001316161050, -0.000015506148, -0.000226147940,  0.000124908040,  0.000053325603,  0.000066745555, -0.000005338059,  0.000029804814, -0.000043582456, -0.000002800832,  0.000036585620,  0.000161681863,  0.000229922299, -0.000283313413,  0.001319024070, -0.000620791338],
                [-0.075582477100, -0.041503733500,  0.066308541300,  0.003352509560,  0.007662075620, -0.010718813500, -0.000738247952,  0.001860692500,  0.000407801351,  0.000159128422,  0.000073046030,  0.000058546643,  0.003495229520,  0.005906654280, -0.010493946400,  0.078647598400,  0.043929663400, -0.073931943100, -0.010722735000, -0.017236570000,  0.029041201600,  0.000394715293, -0.000537710690, -0.000362268343,  0.000241854679, -0.000788101770,  0.000060932686,  0.000467445735,  0.000365561370, -0.000302900477,  0.000423918964,  0.000300000013, -0.000134663171,  0.000006452519, -0.000023320384,  0.000023532240, -0.000000863259,  0.000025535986,  0.000019870589, -0.000144529814, -0.000033792868,  0.000024108483],
                [-0.041043274800, -0.111783765000,  0.103907569000, -0.011319168200, -0.017473385800,  0.027683119400,  0.003637838290, -0.005293631350, -0.002484344690,  0.000009821173, -0.000135428465, -0.000657571583,  0.005401929110,  0.008066891770, -0.013936543100,  0.043929663400,  0.124958213000, -0.115530393000,  0.000325281332, -0.000125007354, -0.000129258723,  0.000384143980,  0.001259101570,  0.000001306272, -0.000870123215,  0.001042362100, -0.000426380057, -0.000426090514, -0.001300320690,  0.001591298870,  0.000048406439,  0.000287275840, -0.000388354266,  0.000055737630,  0.000018935809,  0.000059096657, -0.000026671850,  0.000148561268,  0.000149502306, -0.000107492816,  0.000330197117,  0.000160952609],
                [ 0.066112977000,  0.104729927000, -0.219256026000, -0.000141509338, -0.003434017560,  0.001610715360, -0.000237140037, -0.000606360776,  0.000853888771,  0.000284856041, -0.000227947707,  0.000021899914,  0.009954809490,  0.014503839500, -0.022850703000, -0.073931943100, -0.115530393000,  0.238426713000, -0.001172378760, -0.000473740575, -0.000085975425, -0.000598006922,  0.000347859264, -0.000022101354, -0.000104883229,  0.000359811438,  0.000893666466,  0.000047613768, -0.000039210588, -0.000025405264,  0.000008736166, -0.000126420940, -0.000048007771, -0.000081103354,  0.000034200394,  0.000014479678, -0.000018292858,  0.000237094498,  0.000030248075, -0.000123734870,  0.000225358158,  0.000436607680],
                [-0.304832510000,  0.001080107490,  0.001583703380, -0.012312369900, -0.000361925575, -0.000005380242,  0.000536641625, -0.000954457648,  0.000202037882,  0.000131990037,  0.000240096907, -0.000169145634, -0.011350612800,  0.000290968064,  0.001401288830, -0.010722735000,  0.000325281332, -0.001172378760,  0.335968234000, -0.003796974450, -0.002196966940,  0.001014683130,  0.002301249850,  0.000503015956,  0.000603465592,  0.000253289215,  0.000532380180,  0.000412280046, -0.000005518885, -0.000002154967,  0.000632261852,  0.000727256027, -0.000699875116,  0.000142228293, -0.000106601886,  0.000148869356,  0.000006913742,  0.000060554518, -0.000076997589, -0.000230470931, -0.000053324956, -0.000048396325],
                [ 0.000618737475, -0.048474562500, -0.000080359730,  0.035615059900, -0.003081819410,  0.000353950668,  0.001192182950,  0.002153894160, -0.000630194064, -0.000097828362, -0.000003210597,  0.000141233266, -0.016458449400, -0.000150240230,  0.000811652521, -0.017236570000, -0.000125007354, -0.000473740575, -0.003796974450,  0.054324381900,  0.000328044615,  0.002236943710, -0.006269973860, -0.000090077542, -0.000556919926,  0.001404142770, -0.000144097996, -0.000333527294,  0.000376518698, -0.000398408893, -0.001046966920, -0.000163879470,  0.000271078925, -0.000111873714, -0.000047084158, -0.000192239409, -0.000015838536,  0.000041274254,  0.000051844795, -0.000007975487,  0.000015565803,  0.000051313421],
                [ 0.001591972160, -0.000241263827, -0.050839140900,  0.001341132350,  0.000169600942, -0.000058645732, -0.001206594120,  0.000019371190,  0.000364010457,  0.000069311231,  0.000052913364, -0.000156069524, -0.029453532500,  0.000002063185,  0.000387534637,  0.029041201600, -0.000129258723, -0.000085975425, -0.002196966940,  0.000328044615,  0.049536269700,  0.000009025212, -0.000188391390,  0.000859989334,  0.000485598736,  0.000167091798, -0.000050893837,  0.000128473971, -0.000065137481, -0.000104352963,  0.000159767814,  0.000051678617,  0.000154467411,  0.000145393609, -0.000107573025,  0.000044588785,  0.000030151342,  0.000025660583, -0.000005990485, -0.000144934523, -0.000084799847, -0.000045791452],
                [-0.011587172100, -0.000265123753, -0.000325149456, -0.296633947000, -0.002141608270, -0.001385963250, -0.013027642100, -0.000397838529, -0.000276661410,  0.000786266725,  0.000562715807, -0.000870684066,  0.000665737135,  0.000111922593,  0.000611035395,  0.000394715293,  0.000384143980, -0.000598006922,  0.001014683130,  0.002236943710,  0.000009025212,  0.327078658000,  0.001908306410, -0.000098643877, -0.011211103000, -0.000096625978,  0.000161794067,  0.000445774654, -0.000675251910, -0.000001994717,  0.000919513287, -0.001690768780,  0.001598510130,  0.000698874397,  0.000144489938,  0.001199897110,  0.000425109666, -0.000023343949, -0.000045138440,  0.000030532015, -0.000057961271,  0.000021980223],
                [ 0.035782319500, -0.003449223290,  0.000352021138, -0.002814851200, -0.048419727000, -0.001490240310, -0.020980119300, -0.001228430010,  0.002092844910,  0.000375904422,  0.000386702658, -0.001083763300, -0.000625010895,  0.001514337600, -0.000326880526, -0.000537710690,  0.001259101570,  0.000347859264,  0.002301249850, -0.006269973860, -0.000188391390,  0.001908306410,  0.057676638400, -0.002012297070, -0.015037876400, -0.000231322031, -0.000293743748,  0.000076710051,  0.000337089674, -0.000732923797, -0.001033320970, -0.001677935690,  0.003357378420,  0.000462630311,  0.000228833858,  0.000196170553,  0.000041609570, -0.000164615301, -0.000252036680,  0.000080159392,  0.000038523433,  0.000034002544],
                [ 0.001443997110, -0.000371820596,  0.000321544325, -0.001857303680, -0.001543381080, -0.050945021400,  0.028551488200,  0.002336752460, -0.002923760270,  0.001427105050, -0.000586865840,  0.001824089140,  0.000511858440,  0.000276003926,  0.000202559149, -0.000362268343,  0.000001306272, -0.000022101354,  0.000503015956, -0.000090077542,  0.000859989334, -0.000098643877, -0.002012297070,  0.053996240600, -0.030319186800, -0.000675798642, -0.000572841147, -0.000653076701, -0.000463440047,  0.000816895682,  0.002084942010,  0.003132456320, -0.003659014380, -0.000911429020, -0.000039664076, -0.000139936846, -0.000326542275,  0.000011716933,  0.000402783060,  0.000006043879,  0.000025108980, -0.000161425910],
                [ 0.003566576500,  0.007618533730,  0.010807393200, -0.074252517800, -0.032001313400, -0.064025490200,  0.003004879320,  0.003859667870,  0.012375619200, -0.000456009865, -0.001249462100,  0.000966571121,  0.000059291070,  0.002702457800,  0.000448151560,  0.000241854679, -0.000870123215, -0.000104883229,  0.000603465592, -0.000556919926,  0.000485598736, -0.011211103000, -0.015037876400, -0.030319186800,  0.076908890300,  0.034393823600,  0.069678815000,  0.000280541835,  0.000499146782, -0.000714739428,  0.000437960626,  0.000608390526, -0.000262541603,  0.000410586032, -0.000025447089,  0.000355884856,  0.000467119865,  0.000078313296,  0.000422103376, -0.000061535147, -0.000019191454, -0.000113295827],
                [-0.009402669700, -0.018717902300, -0.028918001700, -0.032055118900, -0.092648760200, -0.091980721200,  0.005695987090,  0.006484974130,  0.019611685600, -0.001763774920, -0.001984311450,  0.002585026930,  0.003007766240, -0.005775080730,  0.000430071969, -0.000788101770,  0.001042362100,  0.000359811438,  0.000253289215,  0.001404142770,  0.000167091798, -0.000096625978, -0.000231322031, -0.000675798642,  0.034393823600,  0.108705444000,  0.098282383300,  0.000536535704,  0.001045616250, -0.000233377753,  0.000197842819,  0.000436602581, -0.000746827584,  0.000002929675, -0.000191975080, -0.000225290437,  0.000183020208,  0.000300248641,  0.001103529870, -0.000164903323,  0.000129961184,  0.000240416270],
                [-0.000876604471,  0.000837312337, -0.000253208170, -0.063305094900, -0.091748171900, -0.231554605000, -0.009218334250, -0.010940182100, -0.024571878400,  0.003115461590,  0.004661147410, -0.002110201450,  0.000159750828,  0.000445401249,  0.001316161050,  0.000060932686, -0.000426380057,  0.000893666466,  0.000532380180, -0.000144097996, -0.000050893837,  0.000161794067, -0.000293743748, -0.000572841147,  0.069678815000,  0.098282383300,  0.256012547000, -0.000695797842,  0.000405605652,  0.000999258380,  0.000659004856, -0.000503505707,  0.000708239491,  0.000002552083,  0.000110082904,  0.000462709809, -0.000439580294, -0.000527497416, -0.001625311350,  0.000164720405, -0.000158353984,  0.000346357198],
                [-0.000457712074, -0.000555734072,  0.001475456680,  0.003016262880, -0.012965805500, -0.000068702298, -0.074383197800,  0.070740800200,  0.011914527900,  0.003579063430, -0.012569365100, -0.004138394740, -0.000060170797,  0.000111932829, -0.000015506148,  0.000467445735, -0.000426090514,  0.000047613768,  0.000412280046, -0.000333527294,  0.000128473971,  0.000445774654,  0.000076710051, -0.000653076701,  0.000280541835,  0.000536535704, -0.000695797842,  0.077003315500, -0.076817039100, -0.012542197900, -0.011205602800,  0.033354294600,  0.005531828340,  0.000601743047, -0.000294036321,  0.000670043314,  0.000236669508,  0.000359711857,  0.000799593785,  0.000063586822, -0.001218387310, -0.002453862220],
                [-0.002463678640, -0.000078154904,  0.004079204780,  0.007165737430, -0.019490702300, -0.003001675120,  0.070019040800, -0.270987312000, -0.037319661200,  0.003594264790, -0.009659129560, -0.001918643950, -0.000108422372,  0.000347388012, -0.000226147940,  0.000365561370, -0.001300320690, -0.000039210588, -0.000005518885,  0.000376518698, -0.000065137481, -0.000675251910,  0.000337089674, -0.000463440047,  0.000499146782,  0.001045616250,  0.000405605652, -0.076817039100,  0.298274531000,  0.040406725300, -0.000136212824, -0.000795615621, -0.000114897060, -0.000586260703,  0.000093614097,  0.000252036708,  0.000174692057,  0.000878659823, -0.000383102689, -0.001026058750,  0.000957816966, -0.001611656380],
                [ 0.002595980330,  0.001999374050, -0.004016767400, -0.008147262180,  0.027544257800,  0.001414867140,  0.012170299900, -0.037645349500, -0.053342229400,  0.008763686330, -0.031620324000, -0.009243037780,  0.000205866966,  0.000177052371,  0.000124908040, -0.000302900477,  0.001591298870, -0.000025405264, -0.000002154967, -0.000398408893, -0.000104352963, -0.000001994717, -0.000732923797,  0.000816895682, -0.000714739428, -0.000233377753,  0.000999258380, -0.012542197900,  0.040406725300,  0.066461670300,  0.000111476779, -0.000463310086, -0.000005613339, -0.000083374773,  0.000585667105,  0.001289783720,  0.000768879885,  0.000408824903,  0.001044358070, -0.002821565820, -0.001619506420, -0.005414335160],
                [ 0.000811779351,  0.000646690960, -0.000771004699, -0.013171250400,  0.000385145313,  0.000375944632, -0.296727831000,  0.001896728730,  0.001505776140, -0.011547639900,  0.000388942723,  0.000150249840,  0.000026998545, -0.000006786294,  0.000053325603,  0.000423918964,  0.000048406439,  0.000008736166,  0.000632261852, -0.001046966920,  0.000159767814,  0.000919513287, -0.001033320970,  0.002084942010,  0.000437960626,  0.000197842819,  0.000659004856, -0.011205602800, -0.000136212824,  0.000111476779,  0.327319130000, -0.000522519027, -0.001747096940,  0.001019228930, -0.000665600374, -0.002131478270,  0.000410888095,  0.000459443519, -0.000527224047,  0.000650645014, -0.000611794096,  0.000067580103],
                [-0.001430576500,  0.001260483370, -0.000846365220, -0.021050691300, -0.001607085100,  0.002432713030,  0.002527681320, -0.051464188100, -0.000642112942, -0.011824677300, -0.000027569785, -0.001426379210, -0.000052468999, -0.000145911482,  0.000066745555,  0.000300000013,  0.000287275840, -0.000126420940,  0.000727256027, -0.000163879470,  0.000051678617, -0.001690768780, -0.001677935690,  0.003132456320,  0.000608390526,  0.000436602581, -0.000503505707,  0.033354294600, -0.000795615621, -0.000463310086, -0.000522519027,  0.053211548800, -0.000605423301, -0.001149055730,  0.000174592071, -0.002056008930,  0.000508508927,  0.000184012806,  0.000337657158, -0.000305373851,  0.000327669725,  0.000648275660],
                [ 0.000032881273, -0.001360417570,  0.001019809380,  0.028389638100,  0.002202751810, -0.002619663450,  0.001997681770, -0.000592835086, -0.047826423400, -0.033753097500, -0.000685633791, -0.003164852780, -0.000060908234,  0.000108411307, -0.000005338059, -0.000134663171, -0.000388354266, -0.000048007771, -0.000699875116,  0.000271078925,  0.000154467411,  0.001598510130,  0.003357378420, -0.003659014380, -0.000262541603, -0.000746827584,  0.000708239491,  0.005531828340, -0.000114897060, -0.000005613339, -0.001747096940, -0.000605423301,  0.058534733700, -0.002049213140, -0.002165722420, -0.005580464400,  0.000418020512,  0.000671917929,  0.001075125330,  0.000738835582,  0.000048572694,  0.001417002250],
                [ 0.000129362928,  0.000088413780, -0.000285363620,  0.000515556167,  0.000097042391,  0.000967738003, -0.012251640800,  0.000107061175,  0.000374606934, -0.305000167000, -0.001195716590, -0.000834451580, -0.000223489041,  0.000058268378,  0.000029804814,  0.000006452519,  0.000055737630, -0.000081103354,  0.000142228293, -0.000111873714,  0.000145393609,  0.000698874397,  0.000462630311, -0.000911429020,  0.000410586032,  0.000002929675,  0.000002552083,  0.000601743047, -0.000586260703, -0.000083374773,  0.001019228930, -0.001149055730, -0.002049213140,  0.335981374000,  0.002561958750,  0.003297591000, -0.010801126300,  0.001048090670, -0.000668728837, -0.011228983200, -0.001439226010,  0.000095977887],
                [-0.000033252298, -0.000085577196,  0.000091087635,  0.000833930927,  0.000342026851,  0.000578480710, -0.011694206300, -0.000144181197, -0.000789448823, -0.001072859680, -0.050831902500,  0.000361231775,  0.000140719611, -0.000061770157, -0.000043582456, -0.000023320384,  0.000018935809,  0.000034200394, -0.000106601886, -0.000047084158, -0.000107573025,  0.000144489938,  0.000228833858, -0.000039664076, -0.000025447089, -0.000191975080,  0.000110082904, -0.000294036321,  0.000093614097,  0.000585667105, -0.000665600374,  0.000174592071, -0.002165722420,  0.002561958750,  0.050149008600,  0.001623164620, -0.022680777200, -0.000201125886, -0.000105607558,  0.032915002300,  0.000556604861, -0.000132316779],
                [ 0.000111660638,  0.000164034911, -0.000075059137, -0.001531483210, -0.000085156640,  0.002131790000, -0.033682439000, -0.000504021609, -0.002922212160, -0.000565352953,  0.000607484566, -0.048518990600, -0.000038210872,  0.000096427007, -0.000002800832,  0.000023532240,  0.000059096657,  0.000014479678,  0.000148869356, -0.000192239409,  0.000044588785,  0.001199897110,  0.000196170553, -0.000139936846,  0.000355884856, -0.000225290437,  0.000462709809,  0.000670043314,  0.000252036708,  0.001289783720, -0.002131478270, -0.002056008930, -0.005580464400,  0.003297591000,  0.001623164620,  0.053631786900,  0.024986835900, -0.000480266327,  0.000069007009,  0.007154649910,  0.000544568335, -0.000404681882],
                [ 0.000157802640, -0.000076331932, -0.000051358279, -0.000733957654, -0.000935724242, -0.001665661510,  0.003373175160,  0.007980792090, -0.010438695000, -0.076013943900, -0.051498752000,  0.059364188600, -0.000144869281, -0.000010851744,  0.000036585620, -0.000000863259, -0.000026671850, -0.000018292858,  0.000006913742, -0.000015838536,  0.000030151342,  0.000425109666,  0.000041609570, -0.000326542275,  0.000467119865,  0.000183020208, -0.000439580294,  0.000236669508,  0.000174692057,  0.000768879885,  0.000410888095,  0.000508508927,  0.000418020512, -0.010801126300, -0.022680777200,  0.024986835900,  0.079112534200,  0.058103695900, -0.063986801200,  0.003504547540,  0.008252628830, -0.008677730390],
                [-0.000276891050, -0.000238612455, -0.000192607794, -0.000834470892, -0.000536578498, -0.002059701750,  0.003467893310,  0.006761052700, -0.010818867900, -0.051443542800, -0.151306241000,  0.116743826000,  0.000150427844,  0.000535119260,  0.000161681863,  0.000025535986,  0.000148561268,  0.000237094498,  0.000060554518,  0.000041274254,  0.000025660583, -0.000023343949, -0.000164615301,  0.000011716933,  0.000078313296,  0.000300248641, -0.000527497416,  0.000359711857,  0.000878659823,  0.000408824903,  0.000459443519,  0.000184012806,  0.000671917929,  0.001048090670, -0.000201125886, -0.000480266327,  0.058103695900,  0.163615200000, -0.127320828000, -0.011175418200, -0.020016956200,  0.023139046100],
                [ 0.000074700177, -0.000622223468,  0.000123367411, -0.003543541800, -0.003946142400, -0.003910908180,  0.010833941000,  0.020233362800, -0.022572722700,  0.058887756100,  0.115957274000, -0.179560342000,  0.000065183444,  0.000099909733,  0.000229922299,  0.000019870589,  0.000149502306,  0.000030248075, -0.000076997589,  0.000051844795, -0.000005990485, -0.000045138440, -0.000252036680,  0.000402783060,  0.000422103376,  0.001103529870, -0.001625311350,  0.000799593785, -0.000383102689,  0.001044358070, -0.000527224047,  0.000337657158,  0.001075125330, -0.000668728837, -0.000105607558,  0.000069007009, -0.063986801200, -0.127320828000,  0.199467764000, -0.002254716580, -0.005303140270,  0.005232700240],
                [ 0.000433511158,  0.000486138870,  0.000261076583,  0.000046069520,  0.000657370855,  0.000593875240,  0.004006619800, -0.012833812400, -0.003774999570, -0.079014088600,  0.078889494300,  0.019436209100,  0.000072328995, -0.000286456542, -0.000283313413, -0.000144529814, -0.000107492816, -0.000123734870, -0.000230470931, -0.000007975487, -0.000144934523,  0.000030532015,  0.000080159392,  0.000006043879, -0.000061535147, -0.000164903323,  0.000164720405,  0.000063586822, -0.001026058750, -0.002821565820,  0.000650645014, -0.000305373851,  0.000738835582, -0.011228983200,  0.032915002300,  0.007154649910,  0.003504547540, -0.011175418200, -0.002254716580,  0.081871766900, -0.087120674300, -0.018952145900],
                [-0.000116808738, -0.000622805294,  0.000211445408, -0.000184412716, -0.000147538049,  0.000403276118,  0.003613165550, -0.009000668610, -0.001931336020,  0.078673338600, -0.268209599000, -0.051702861200,  0.000316440754,  0.000151661591,  0.001319024070, -0.000033792868,  0.000330197117,  0.000225358158, -0.000053324956,  0.000015565803, -0.000084799847, -0.000057961271,  0.000038523433,  0.000025108980, -0.000019191454,  0.000129961184, -0.000158353984, -0.001218387310,  0.000957816966, -0.001619506420, -0.000611794096,  0.000327669725,  0.000048572694, -0.001439226010,  0.000556604861,  0.000544568335,  0.008252628830, -0.020016956200, -0.005303140270, -0.087120674300,  0.295489566000,  0.058022644000],
                [-0.000311955226,  0.000064046666, -0.000549130393,  0.000603996490, -0.000568468443,  0.001054632250,  0.010476427500, -0.030770768100, -0.007773745060,  0.019050222000, -0.050727185300, -0.060622006300,  0.000217093184,  0.001449697830, -0.000620791338,  0.000024108483,  0.000160952609,  0.000436607680, -0.000048396325,  0.000051313421, -0.000045791452,  0.000021980223,  0.000034002544, -0.000161425910, -0.000113295827,  0.000240416270,  0.000346357198, -0.002453862220, -0.001611656380, -0.005414335160,  0.000067580103,  0.000648275660,  0.001417002250,  0.000095977887, -0.000132316779, -0.000404681882, -0.008677730390,  0.023139046100,  0.005232700240, -0.018952145900,  0.058022644000,  0.067104607900]]
        hess = np.array(hess)

        st_pt = StationaryPoint(smi, 0, 1, smiles=smi)
        st_pt.characterize()
        natom = st_pt.natom
        freq, reduced_freqs = frequencies.get_frequencies(st_pt, hess, geom)

        # check the number of frequencies when neglecting internal rotors
        warn = 'Wrong number of frequencies for '
        warn += '{}, expected {}, calculated {}'.format(smi, 3 * natom - 6, len(freq))
        self.assertEqual(len(freq), 3 * natom - 6, warn)

        # check the number of freauencies when including internal rotors
        warn = 'Wrong number of frequencies for '
        warn += '{}, expected {}, calculated {}'.format(smi, 3 * natom - 6 - 3, len(reduced_freqs))
        self.assertEqual(len(reduced_freqs), 3 * natom - 6 - 3, warn)

        # check if the frequencies are as expected
        exps = [114.00308362581993, 217.27775429467988, 258.3569949257438, 324.95225959788496, 444.19934314923285, 775.6200599866132, 809.834778642176, 851.31690919327, 978.7594097713534, 1001.6985870040352, 1016.7427610310635, 1110.2892683008433, 1182.5149554411457, 1226.4874456219302, 1318.400582167711, 1338.054870101307, 1396.7770994771845, 1417.5721206176297, 1452.5015242293932, 1460.9939823348343, 1533.7500760993864, 1534.471579819868, 1544.1270899676583, 1549.977599644375, 1552.1602547884133, 1556.1540474667054, 3018.3546194275327, 3020.597688051164, 3036.615370205335, 3039.4844797216215, 3056.030309062557, 3060.954764774267, 3108.0034857725796, 3110.0837061265997, 3114.029978361547, 3121.6966999165047]
        for i, exp in enumerate(exps):
            warn = 'Frequency values have wrong number: '
            warn += 'expected {}, calculated {}'.format(exp, freq[i])
            self.assertAlmostEqual(exp, freq[i], places=2, msg=warn)

        # check if the reduced frequencies are as expected
        exps = [323.2231139328416, 443.06424130022316, 670.1999625377555, 765.4302138965138, 805.4817609384712, 923.6453995768678, 998.4208652995756, 1010.1550075636384, 1026.2590199716992, 1035.9563299669474, 1110.728140649036, 1237.3899533374413, 1297.0701335112522, 1319.639259548847, 1338.4248295874343, 1402.476769356911, 1417.8484347981505, 1476.7358681560938, 1487.8976160436305, 1525.2008164401302, 1544.0032443689747, 1547.12404969892, 1549.9807205743023, 2426.2794467384574, 2507.323795982035, 2864.813636413937, 3024.7798090881265, 3034.7484086579275, 3037.1066584298032, 3052.278595042064, 3107.809971415559, 3113.170533468414, 3113.8054919074493]
        for i, exp in enumerate(exps):
            warn = 'Frequency values have wrong number: '
            warn += 'expected {}, calculated {}'.format(exp, reduced_freqs[i])
            self.assertAlmostEqual(exp, reduced_freqs[i], places=2, msg=warn)