diff --git a/cmmde_gui/gui.py b/cmmde_gui/gui.py index 1c7f342..df55052 100755 --- a/cmmde_gui/gui.py +++ b/cmmde_gui/gui.py @@ -115,8 +115,8 @@ def cmmde_gui(): # Post calculations - post_calc = {'Frequency calculation':'freq', 'Radial distribution function':'rdf','Mean Square Displacement':'msd','Time-dependent calculation':'td','Thermochemistry calculation':'thermo','Optimized energy':'opt'} - post_btn = pn.widgets.Select(name="Job Selection",value='Frequency calculation', options=['Frequency calculation','Radial distribution function', 'Mean Square Displacement','Time-dependent calculation','Thermochemistry calculation','Optimized energy']) + post_calc = {'Frequency calculation':'freq', 'Radial distribution function':'rdf','Mean Square Displacement':'msd','Time-dependent calculation':'td','Thermochemistry calculation':'thermo','Optimized energy':'opt','IR plot':'ir'} + post_btn = pn.widgets.Select(name="Job Selection",value='Frequency calculation', options=['Frequency calculation','Radial distribution function', 'Mean Square Displacement','Time-dependent calculation','Thermochemistry calculation','Optimized energy','IR plot']) # Post Calculation CMMDE software options post_software_btn = pn.widgets.Select(name="Software selections for post calculations",value='Orca',options=['Orca','GROMACS','Dcdftbmd','Quantum Espresso']) post_software = {'Orca':'orca','GROMACS':'gromacs','Dcdftbmd':'dcdftb','Quantum Espresso':'qe'} @@ -126,8 +126,23 @@ def cmmde_gui(): def post_calculation(event): # terminal.clear() if post_calc[post_btn.value] == 'thermo' and post_software[post_software_btn.value] == 'orca': + Folder = workdir + "/" + id_input.value + "/" + Molecule_input.value + os.chdir(Folder) + if not os.path.exists(post_calc[post_btn.value]): + os.makedirs(post_calc[post_btn.value]) + os.chdir(post_calc[post_btn.value]) + os.system("cp ../freq/cmmd.out .") cmd = subprocess.run(["cmmdepost.py","-j","{}".format(post_calc[post_btn.value]),"-s","{}".format(post_software[post_software_btn.value])],capture_output=True,text=True) TextArea.value = TextArea.value + "\n" + cmd.stdout + elif post_calc[post_btn.value] == 'ir' and post_software[post_software_btn.value] == 'orca': + Folder = workdir + "/" + id_input.value + "/" + Molecule_input.value + os.chdir(Folder) + if not os.path.exists(post_calc[post_btn.value]): + os.makedirs(post_calc[post_btn.value]) + os.chdir(post_calc[post_btn.value]) + os.system("cp ../freq/cmmd.out .") + cmd = subprocess.run(["cmmdepost.py","-j","{}".format(post_calc[post_btn.value]),"-s","{}".format(post_software[post_software_btn.value])]) + TextArea.value = TextArea.value + "\n" + "Plot spektrum IR berhasil dilakukan" # terminal.subprocess.run("cmmdepost.py","-j{}".format(post_calc[post_btn.value]),"-s{}".format(post_software[post_software_btn.value])) elif post_calc[post_btn.value] == 'opt' and post_software[post_software_btn.value] == 'orca': cmd = subprocess.run(["cmmdepost.py","-j","{}".format(post_calc[post_btn.value]),"-s","{}".format(post_software[post_software_btn.value]),"-m","{}".format(post_method[post_method_btn.value])],capture_output=True,text=True) @@ -161,10 +176,12 @@ def cmmde_gui(): Checkcalc_btn = pn.widgets.Button(name="Check calculation",button_type='primary') Checkcalc_btn.on_click(calc_progress) # # Download Button - download_xyz = pn.widgets.FileDownload(file="cmmd.xyz",filename="cmmd.xyz") + download_xyz = pn.widgets.FileDownload(file="cmmd.xyz",filename="optimized.xyz") download_slab = pn.widgets.FileDownload(file="slab.vasp",filename="slab.vasp") - download_spectrum = pn.widgets.FileDownload(file="IR.pdf",filename="IR.pdf") - + download_spec_plot = pn.widgets.FileDownload(file="IR.pdf",filename="IR.pdf") + download_spec_raw = pn.widgets.FileDownload(file="IR_fit.dat",filename="IR_fit.dat") + download_opt_plot = pn.widgets.FileDownload(file="optimized.pdf",filename="optimized.pdf") + download_opt_raw = pn.widgets.FileDownload(file="optimized.dat",filename="optimized.dat") # Slab Builder hkl_input = pn.widgets.TextInput(name="Miller index (hkl)",placeholder="Example: 100") size_input = pn.widgets.TextInput(name="Dimension",placeholder="Example: 2x2") @@ -289,10 +306,11 @@ def cmmde_gui(): #### Wrap them all together ########## return pn.template.MaterialTemplate( + sidebar_width=410, site="CMMDE-GUI", title="CMMDE Editor", main=[TextArea, editor, xyzviewer], - sidebar=[pn.Card(id_input,title="User Information",collapsed=True),pn.Card(Molecule_input,charge,mult,checkdir_btn,TextWarning,pn.Card(FileInput,title="Upload molecule",collapsed=True),title="Molecule Information",collapsed=True),pn.Card(Material_input, materialdir_btn,TextWarning, pn.Card(Material_upload,title="Unit cell",collapsed=True),hkl_input,size_input,layer_input,pn.Row(slabbuilder_btn,visual_btn),pn.Row(download_xyz,download_slab),title="Surface Builder",collapsed=True),pn.Card(software_btn,job_btn,method_btn,pn.Row(Run_btn,Progress_btn),pn.Row(Checkcalc_btn,visual_btn),download_xyz,title="Main Calculation",collapsed=True),pn.Card(post_software_btn,post_btn,post_method_btn,pn.Row(runpost_btn,Progress_btn),pn.Row(Checkcalc_btn,visual_btn),download_spectrum,title="Post-Calculation",collapsed=True)], + sidebar=[pn.Card(id_input,title="User Information",collapsed=True),pn.Card(Molecule_input,charge,mult,checkdir_btn,TextWarning,pn.Card(FileInput,title="Upload molecule",collapsed=True),title="Molecule Information",collapsed=True),pn.Card(Material_input, materialdir_btn,TextWarning, pn.Card(Material_upload,title="Unit cell",collapsed=True),hkl_input,size_input,layer_input,pn.Row(slabbuilder_btn,visual_btn),pn.Row(download_xyz,download_slab),title="Surface Builder",collapsed=True),pn.Card(software_btn,job_btn,method_btn,pn.Row(Run_btn,Progress_btn),pn.Row(Checkcalc_btn,visual_btn),download_xyz,title="Main Calculation",collapsed=True),pn.Card(post_software_btn,post_btn,post_method_btn,pn.Row(runpost_btn,Progress_btn),pn.Row(Checkcalc_btn,visual_btn),pn.Row(download_spec_raw,download_spec_plot),pn.Row(download_opt_raw,download_opt_plot),title="Post-Calculation",collapsed=True)], header_background=accent, accent_base_color=accent )