Я ценю любую помощь или предложения
Меня зовут Рубен, и я ищу советы о том, как улучшить / оптимизировать эти функции. В прошлом году я освоил 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
-----------------------
Это сокращенный файл журнала:
()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
&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} ...
#............... ##########
############################
Большое спасибо даже за то, что прочитали этот вопрос, и любая помощь или предложение помогут мне.
С уважением, Рубен