Чтение файлов химии MOLCAS для создания цветовых карт

Я ценю любую помощь или предложения

Меня зовут Рубен, и я ищу советы о том, как улучшить / оптимизировать эти функции. В прошлом году я освоил python и нахожусь в той точке, где я могу кодировать скрипты, чтобы делать то, что необходимо, но, как вы увидите, я точно новичок, особенно когда дело доходит до синтаксического анализа файлов.

Этот раздел сценария python предназначен для входа в длинный файл журнала, который предоставляется программой вычислительной химии ab initio MOLCAS (включая обрезанный файл журнала) и копирует значения диполя в разделе модуля RASSI в 3 отдельных файла:

XDIPOLE (КОМПОНЕНТ 1 MLTPL 1 в файле журнала), YDIPOLE (КОМПОНЕНТ 2 MLTPL 1 в файле журнала), ZDIPOLE (КОМПОНЕНТ 3 MLTPL 1 в файле журнала).

После этого следующий раздел кода, также включенный сюда, создает цветовую карту, которая показывает значения диполей в более удобной для глаз форме. Код в его нынешнем виде работает, однако мне удалось оптимизировать все сценарии, за исключением этих двух задач, которые, как я знаю, не являются лучшими подходами.

Меня интересуют только значения в разделе «PROPERTY: MLTPL 1». Я включу копию того, как выглядят выходные файлы, которые довольно просты, особенно если смотреть на очень небольшое количество состояний.

# >Gets Dipoles found inside of <Project>.log "RASSI" Section. 
#
def CopyXYZDipoles(filein, fileout, linestart, linestop, numberofstates):
    linestop2="PROPERTY: MLTPL  2"
    with open(filein, 'r') as fin:
        with open(fileout, 'w') as fout:
            copy = False
            for line in fin:
                if linestart in line:
                    copy = True
                    next(fin)
                    next(fin)
                    next(fin)
                elif "STATE" in line:
                    next(fin)
                elif linestop in line:
                    copy = False
                elif linestop2 in line:
                    copy = False
                elif copy:
                    fout.write(line)
    range_states = range(0, numberofstates, 1)
    with open(fileout + "temp", 'w') as fout:
        fout.write("n")
        for states in range_states:
            states += 1
            string = " " + str(states) + " "
            value = rfunc.GetDipoleValuesAsArray(fileout, string, "      ")
            fout.write(' '.join([str(f) for f in value]) + "n")
    rfunc.ExecuteNoWrite("cp " + fileout + "temp " + fileout )
    rfunc.ExecuteNoWrite("rm " + fileout + "temp")


# >Calls "CopyXYZDipoles" 
#
def GetDipolesFromLogFile(Project_Name,numberofstates, workingdirectory):
    componentlist = list("123")
    outdir=Project_Name + "_output/"

    logdirectory = rfunc.Find(Project_Name + ".log", ".", workingdirectory)

    for component in componentlist:
        component1 = str(int(float(component) + 1))
        if component == "1":
            dipolename = "X_DIPOLE"
        elif component == "2":
            dipolename = "Y_DIPOLE"
        elif component == "3":
            dipolename = "Z_DIPOLE"
        CopyXYZDipoles(logdirectory + "/" + Project_Name + ".log", outdir + dipolename, 
                       "PROPERTY: MLTPL  1   COMPONENT:   " + component,
                       "PROPERTY: MLTPL  1   COMPONENT:   " + component1, numberofstates)
        print("Extracted " + dipolename)
# >Makes a color matrix of the Dipoles between each states
#
def Make_MU_HeatMap(directory):
    rows = rfunc.file_len(directory + "/X_DIPOLE")
    cols = rows
    direction_list = list("XYZ")
    for direction in direction_list:
        with open(directory + "/" + direction + '_DIPOLE', 'r') as fin:
            data = []
            next(fin)
            for i in range(1, rows):
                data.append(list(map(float, fin.readline().split()[:cols])))
        df=pd.DataFrame(data)
        # mask = np.zeros_like(data)
        # mask[np.triu_indices_from(mask)] = True # cuts out upper triangular side of the matrix
        f, ax = plt.subplots(figsize=(11, 9))
        cmap = sns.color_palette("coolwarm", as_cmap=True)
        sns.heatmap(
            df,  # The data to plot
            # mask=mask,  # Mask some cells
            cmap=cmap,  # What colors to plot the heatmap as
            annot=True,  # Should the values be plotted in the cells?
            vmax=1,  # The maximum value of the legend. All higher vals will be same color
            vmin=-1,  # The minimum value of the legend. All lower vals will be same color
            center=0,  # The center value of the legend. With divergent cmap, where white is
            square=True,  # Force cells to be square
            linewidths=.5,  # Width of lines that divide cells
            cbar_kws={"shrink": .5}  # Extra kwargs for the legend; in this case, shrink by 50%
        )
        f.savefig(directory + "/" + direction + '_DIPOLE_heatmap')

Это выходные файлы, в которых сохраняются значения:

XDIPOLE
-----------------------

7.712938629E-14 -9.102311508E-13 -3.732978631E-01 -2.438713418E-15 -4.761724182E-14
-9.102311508E-13  9.679238374E-12  1.728909151E+00  9.858812476E-15 5.265071924E-15
-3.732978631E-01  1.728909151E+00 -9.364600903E-12 -1.572229977E-14 -1.101781051E-14
-2.438713418E-15  9.858812476E-15 -1.572229977E-14  5.212719145E-12 1.710295527E+00
-4.761724182E-14  5.265071924E-15 -1.101781051E-14  1.710295527E+00 -5.040856621E-12
-----------------------

YDIPOLE
-----------------------

4.074216029E-14  6.729178137E-15  4.369864581E-15 -7.306955227E-01 1.089101587E-12
6.729178137E-15 -1.952287317E-15  1.801795560E-15 -3.231487341E-01 -4.975377619E-13
4.369864581E-15  1.801795560E-15  3.519326344E-17  3.572170536E-13 -3.559337038E-01
-7.306955227E-01 -3.231487341E-01  3.572170536E-13 -3.847568714E-14 -1.913983826E-15
1.089101587E-12 -4.975377619E-13 -3.559337038E-01 -1.913983826E-15 4.386068916E-17
-----------------------

ZDIPOLE
-----------------------

-1.137579010E-16 -5.756682914E-18 -3.879122328E-19 -2.660126688E-06 -6.017214054E-17
-5.756682914E-18 -1.113544139E-16  1.103580246E-17 -1.173776231E-06 1.101877183E-18
-3.879122328E-19  1.103580246E-17 -6.831956398E-17  1.297128434E-18 -1.293133976E-06
-2.660126688E-06 -1.173776231E-06  1.297128434E-18 -1.120046885E-16 1.098611840E-17
-6.017214054E-17  1.101877183E-18 -1.293133976E-06  1.098611840E-17 -6.842153071E-17
-----------------------

Это цветные матрицы
ЦВЕТОВАЯ МАТРИЦА XDIPOLE
ИДИПОЛЬНАЯ ЦВЕТОВАЯ МАТРИЦА
ЦВЕТОВАЯ МАТРИЦА ZDIPOLE

Это сокращенный файл журнала:

()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()

                                               &RASSI

                                   only a single process is used
                       available to each process: 10 GB of memory, 1 thread?
                                             pid: 24875
()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()


      ********************************************************************************
      *                                                                              *
      *                             General data section                             *
      *                                                                              *
      ********************************************************************************
      
      
      
############################      
#...............        ##########

# ... Other parts of the long log file here. Skipping to Dipole section ...

#...............        ##########
############################


      ****************************************************************************************************
      *                                                                                                  *
      *                                   Spin-free properties section                                   *
      *                                                                                                  *
      ****************************************************************************************************


++ Matrix elements

  =========================================
   MATRIX ELEMENTS OF 1-ELECTRON OPERATORS
   FOR THE SPIN-FREE EIGENSTATES:
  =========================================
  (including nuclear contrib.)

  SELECTED PROPERTIES:
 MLTPL  0  1    MLTPL  1  1    MLTPL  1  2    MLTPL  1  3    MLTPL  2  1
 MLTPL  2  2    MLTPL  2  3    MLTPL  2  4    MLTPL  2  5    MLTPL  2  6
 VELOCITY  1    VELOCITY  2    VELOCITY  3    ANGMOM    1    ANGMOM    2
 ANGMOM    3    MLTPV  2  1    MLTPV  2  2    MLTPV  2  3    MLTPV  2  4
 MLTPV  2  5    MLTPV  2  6

 PROPERTY: MLTPL  0   COMPONENT:   1                        #This is not wanted
 ORIGIN:   0.000000000E+00  0.000000000E+00  0.000000000E+00

  STATE          1                2                3                4

    1        1.200000000E+01 -2.194426650E-16  4.318101516E-18  1.330225916E-15
    2       -2.194426650E-16  1.200000000E+01 -8.386861199E-14  5.042296192E-17
    3        4.318101516E-18 -8.386861199E-14  1.200000000E+01 -8.220056120E-17
    4        1.330225916E-15  5.042296192E-17 -8.220056120E-17  1.200000000E+01
    5        2.926475414E-26  1.490676187E-27  6.588695814E-27 -1.246229307E-15

  STATE          5

    1        2.926475414E-26
    2        1.490676187E-27
    3        6.588695814E-27
    4       -1.246229307E-15
    5        1.200000000E+01

 PROPERTY: MLTPL  1   COMPONENT:   1                              #This is wanted
 ORIGIN:   0.000000000E+00  0.000000000E+00  0.000000000E+00

  STATE          1                2                3                4

    1        7.712938629E-14 -9.102311508E-13 -3.732978631E-01 -2.438713418E-15
    2       -9.102311508E-13  9.679238374E-12  1.728909151E+00  9.858812476E-15
    3       -3.732978631E-01  1.728909151E+00 -9.364600903E-12 -1.572229977E-14
    4       -2.438713418E-15  9.858812476E-15 -1.572229977E-14  5.212719145E-12
    5       -4.761724182E-14  5.265071924E-15 -1.101781051E-14  1.710295527E+00

  STATE          5

    1       -4.761724182E-14
    2        5.265071924E-15
    3       -1.101781051E-14
    4        1.710295527E+00
    5       -5.040856621E-12

 PROPERTY: MLTPL  1   COMPONENT:   2                        #This is wanted
 ORIGIN:   0.000000000E+00  0.000000000E+00  0.000000000E+00

  STATE          1                2                3                4

    1        4.074216029E-14  6.729178137E-15  4.369864581E-15 -7.306955227E-01
    2        6.729178137E-15 -1.952287317E-15  1.801795560E-15 -3.231487341E-01
    3        4.369864581E-15  1.801795560E-15  3.519326344E-17  3.572170536E-13
    4       -7.306955227E-01 -3.231487341E-01  3.572170536E-13 -3.847568714E-14
    5        1.089101587E-12 -4.975377619E-13 -3.559337038E-01 -1.913983826E-15

  STATE          5

    1        1.089101587E-12
    2       -4.975377619E-13
    3       -3.559337038E-01
    4       -1.913983826E-15
    5        4.386068916E-17

 PROPERTY: MLTPL  1   COMPONENT:   3                        #This is wanted
 ORIGIN:   0.000000000E+00  0.000000000E+00  0.000000000E+00

  STATE          1                2                3                4

    1       -1.137579010E-16 -5.756682914E-18 -3.879122328E-19 -2.660126688E-06
    2       -5.756682914E-18 -1.113544139E-16  1.103580246E-17 -1.173776231E-06
    3       -3.879122328E-19  1.103580246E-17 -6.831956398E-17  1.297128434E-18
    4       -2.660126688E-06 -1.173776231E-06  1.297128434E-18 -1.120046885E-16
    5       -6.017214054E-17  1.101877183E-18 -1.293133976E-06  1.098611840E-17

  STATE          5

    1       -6.017214054E-17
    2        1.101877183E-18
    3       -1.293133976E-06
    4        1.098611840E-17
    5       -6.842153071E-17

 PROPERTY: MLTPL  2   COMPONENT:   1                        #This is not wanted
 ORIGIN:   0.000000000E+00  0.000000000E+00  0.000000000E+00

  STATE          1                2                3                4

    1        4.823310421E+01 -1.805369316E+00  4.783430444E-12  7.632822170E-14
    2       -1.805369316E+00  4.482222024E+01 -9.951086369E-13 -4.665853905E-14
    3        4.783430444E-12 -9.951086369E-13  4.458050931E+01 -7.566061281E-15
    4        7.632822170E-14 -4.665853905E-14 -7.566061281E-15  4.585650178E+01
    5       -9.358570459E-17  1.592285998E-16  1.279473824E-17 -1.616419414E-13

  STATE          5

    1       -9.358570459E-17
    2        1.592285998E-16
    3        1.279473824E-17
    4       -1.616419414E-13
    5        4.577125639E+01

 PROPERTY: MLTPL  2   COMPONENT:   2                        #This is not wanted
 ORIGIN:   0.000000000E+00  0.000000000E+00  0.000000000E+00

  STATE          1                2                3                4

    1       -2.192419537E-16 -2.411741231E-16 -2.314343136E-17 -2.063236807E-12
    2       -2.411741231E-16 -1.096619443E-16 -1.500648083E-17  1.065273015E-13
    3       -2.314343136E-17 -1.500648083E-17  6.945394753E-17 -2.689810760E-25
    4       -2.063236807E-12  1.065273015E-13 -2.689810760E-25 -1.257444004E-15
    5       -1.431227599E+00  6.493368077E-02 -1.623715429E-13 -3.989299446E-14

  STATE          5

    1       -1.431227599E+00
    2        6.493368077E-02
    3       -1.623715429E-13
    4       -3.989299446E-14
    5       -1.454288070E-15

 PROPERTY: MLTPL  2   COMPONENT:   3                        #This is not wanted
 ORIGIN:   0.000000000E+00  0.000000000E+00  0.000000000E+00

  STATE          1                2                3                4

    1       -7.138286176E-17 -3.053047924E-18 -5.733640991E-17 -1.369977170E-16
    2       -3.053047924E-18 -7.650874504E-17  5.043306125E-17 -7.885876738E-17
    3       -5.733640991E-17  5.043306125E-17 -4.059241581E-17  8.831450537E-29
    4       -1.369977170E-16 -7.885876738E-17  8.831450537E-29 -7.209622042E-17
    5       -5.208466495E-06  2.363040658E-07 -8.562577275E-17  4.752354755E-17

  STATE          5

    1       -5.208466495E-06
    2        2.363040658E-07
    3       -8.562577275E-17
    4        4.752354755E-17
    5       -3.593758270E-17

 PROPERTY: MLTPL  2   COMPONENT:   4                        #This is not wanted
 
 ############################      
#...............        ##########

# ... Keeps going after this and so on however I am only currently wantin go the make files for the MLTPL  1  COMONENTS:  {1,2,3} ...

#...............        ##########
############################

Большое спасибо даже за то, что прочитали этот вопрос, и любая помощь или предложение помогут мне.

С уважением, Рубен

0

Добавить комментарий

Ваш адрес email не будет опубликован.