1 /* SemiEmpiricalDlg.c */
2 /**********************************************************************************************************
3 Copyright (c) 2002-2013 Abdul-Rahman Allouche. All rights reserved
4 
5 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
6 documentation files (the Gabedit), to deal in the Software without restriction, including without limitation
7 the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
8 and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9 
10   The above copyright notice and this permission notice shall be included in all copies or substantial portions
11   of the Software.
12 
13 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
14 TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
15 THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
16 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
17 DEALINGS IN THE SOFTWARE.
18 ************************************************************************************************************/
19 
20 
21 #include <stdlib.h>
22 #include <math.h>
23 #include "../../Config.h"
24 #include "../Common/Global.h"
25 #include "../Utils/UtilsInterface.h"
26 #include "../Utils/Constants.h"
27 #include "../Geometry/Fragments.h"
28 #include "../Geometry/DrawGeom.h"
29 #include "../Geometry/Measure.h"
30 #include "../Geometry/ResultsAnalise.h"
31 #include "../Geometry/GeomGlobal.h"
32 #include "../Geometry/GeomXYZ.h"
33 #include "../Utils/Utils.h"
34 #include "../Utils/AtomsProp.h"
35 #include "../Files/FolderChooser.h"
36 #include "../Files/GabeditFolderChooser.h"
37 #include "AtomSE.h"
38 #include "MoleculeSE.h"
39 #include "SemiEmpiricalModel.h"
40 #include "SemiEmpirical.h"
41 #include "SemiEmpiricalMD.h"
42 #include "SemiEmpiricalDlg.h"
43 
44 typedef enum
45 {
46 	TOLE = 0,
47 	TOLD = 1
48 } TOLptions;
49 
50 #define NINTEGOPTIONS 3
51 #define NTHERMOPTIONS 4
52 
53 #define NENTRYTOL 2
54 
55 #define NCONSTRAINTS 3
56 
57 static	GtkWidget* buttonConstraintsOptions[NCONSTRAINTS];
58 
59 static	GtkWidget* entryTolerance[NENTRYTOL];
60 static	GtkWidget* buttonTolerance[NENTRYTOL];
61 
62 static	GtkWidget* buttonMDOptions[NINTEGOPTIONS];
63 static	GtkWidget* buttonMDThermOptions[NTHERMOPTIONS];
64 static 	GtkWidget* entryMDTimes[4];
65 static 	GtkWidget* entryMDTemperature[4];
66 static 	GtkWidget* entryMDStepSize;
67 static 	GtkWidget* entryMDRafresh;
68 
69 static 	GtkWidget* entrySDFriction;
70 static 	GtkWidget* entrySDCollide;
71 
72 static  GtkWidget* entryNumberOfGeom = NULL;
73 static  GtkWidget* entryFileNameGeom = NULL;
74 static  GtkWidget* entryFileNameTraj = NULL;
75 static  GtkWidget* entryFileNameProp = NULL;
76 static  GtkWidget* buttonSaveTraj = NULL;
77 static  GtkWidget* buttonSaveProp = NULL;
78 static  GtkWidget* buttonDirSelector = NULL;
79 static  GtkWidget* entryCharge = NULL;
80 static  GtkWidget* entrySpinMultiplicity = NULL;
81 static  GtkWidget* buttonCreateGaussian = NULL ;
82 static  GtkWidget* entryGaussianKeywords = NULL;
83 static  GtkWidget* buttonCreateMopac = NULL ;
84 static  GtkWidget* entryMopacKeywords = NULL;
85 static  GtkWidget* buttonCreateFireFly = NULL ;
86 static  GtkWidget* entryFireFlyKeywords = NULL;
87 static  GtkWidget* entryOpenBabelKeywords = NULL;
88 static  GtkWidget* entryOpenBabelPotential = NULL;
89 static  GtkWidget* entryGenericKeywords = NULL;
90 static  GtkWidget* entryGenericPotential = NULL;
91 static  GtkWidget* buttonPostNone = NULL ;
92 static  GtkWidget* buttonPostOpt = NULL ;
93 static  GtkWidget* buttonMopac = NULL ;
94 static  GtkWidget* buttonFireFly = NULL ;
95 static  GtkWidget* buttonOpenBabel = NULL ;
96 static  GtkWidget* buttonGeneric = NULL ;
97 static  GtkWidget* entryMopacMethod = NULL;
98 static  GtkWidget* entryFireFlyMethod = NULL;
99 static  GtkWidget* entryOpenBabelMethod = NULL;
100 static  GtkWidget* entryGenericMethod = NULL;
101 static  GtkWidget* entryMopacHamiltonianSparkle = NULL;
102 static  GtkWidget* entryMopacHamiltonian = NULL;
103 static  GtkWidget* entryAddMopacKeywords = NULL;
104 static  GtkWidget* entryOrcaHamiltonian = NULL;
105 static  GtkWidget* entryAddOrcaKeywords = NULL;
106 static  GtkWidget* entryAddOpenBabelKeywords = NULL;
107 static  gchar* genericProgName = NULL;
108 static gint totalCharge = 0;
109 static gint spinMultiplicity=1;
110 
111 static gint numberOfPointsRP[2] = {10,10};
112 static gdouble stepValueRP[2] = {0.1,0.1};
113 static gchar typeRP[2][100] = {"Bond","Nothing"};
114 static gint atomRP[2] = {1,0};
115 
116 static  GtkWidget* entryFileName = NULL;
117 
118 /*********************************************************************************/
119 static void addMopacOptions(GtkWidget *box, gchar* type);
120 static void addOrcaOptions(GtkWidget *box, gchar* type);
121 static void addMopacSparkleOptions(GtkWidget *box, gchar* type);
122 static void addOpenBabelOptions(GtkWidget *box, gchar* type);
123 static gboolean runOneGeneric(MoleculeSE* mol, char* fileNamePrefix, char* keyWords, char* genericCommand);
124 /*********************************************************************************/
getMultiplicityName(gint multiplicity,gchar * buffer)125 static void getMultiplicityName(gint multiplicity, gchar* buffer)
126 {
127 	if(multiplicity==1) sprintf(buffer,"Singlet");
128 	else if(multiplicity==2) sprintf(buffer,"Doublet");
129 	else if(multiplicity==3) sprintf(buffer,"Triplet");
130 	else if(multiplicity==4) sprintf(buffer,"Quartet");
131 	else if(multiplicity==5) sprintf(buffer,"Quintet");
132 	else if(multiplicity==6) sprintf(buffer,"Sextet");
133 	else sprintf(buffer,"UNKNOWN");
134 }
135 /*****************************************************************************/
getEnergyMopac(gchar * fileNameOut,gdouble * energy)136 static gboolean getEnergyMopac(gchar* fileNameOut, gdouble* energy)
137 {
138 	FILE* file = NULL;
139 	gchar buffer[1024];
140 	gchar* pdest = NULL;
141 
142  	file = FOpen(fileNameOut, "rb");
143 	if(!file) return FALSE;
144 	 while(!feof(file))
145 	 {
146 		if(!fgets(buffer,BSIZE,file))break;
147 		pdest = strstr( buffer, " FINAL HEAT OF FORMATION");
148 		if(pdest)
149 		{
150 			pdest = strstr( buffer, "=");
151 			if(pdest)
152 			{
153 				if(sscanf(pdest+1,"%lf",energy)==1)
154 				{
155 					fclose(file);
156 					return TRUE;
157 				}
158 			}
159 		}
160 	 }
161 	fclose(file);
162 	return FALSE;
163 }
164 /*************************************************************************************************************/
getRealNumberXYZVariables()165 static gint getRealNumberXYZVariables()
166 {
167 	gint k=0;
168 	gint i;
169         for(i=0;i<NcentersXYZ;i++)
170 	{
171 		if(!test(GeomXYZ[i].X))k++;
172 		if(!test(GeomXYZ[i].Y))k++;
173 		if(!test(GeomXYZ[i].Z))k++;
174 	}
175 	return k;
176 }
177 /*************************************************************************************************************/
setValueVariableXYZ(gchar * source,gchar * value,gint * k)178 static void setValueVariableXYZ(gchar* source, gchar* value, gint* k)
179 {
180 	if(!test(source))
181 	{
182 		sprintf(value,"%f ", get_value_variableXYZ(source));
183 		*k = 1;
184 	}
185 	else
186 	{
187 		sprintf(value,"%s ",source);
188 		*k = 0;
189 	}
190 }
191 /*************************************************************************************************************/
setValueVariableZmat(gchar * source,gchar * value,gint * k)192 static void setValueVariableZmat(gchar* source, gchar* value, gint* k)
193 {
194 	if(!test(source))
195 	{
196 		sprintf(value,"%f ", get_value_variableZmat(source));
197 		*k = 1;
198 	}
199 	else
200 	{
201 		sprintf(value,"%s ",source);
202 		*k = 0;
203 	}
204 }
205 /*************************************************************************************************************/
getRealNumberZmatVariables()206 static gint getRealNumberZmatVariables()
207 {
208 	gint k=0;
209 	gint i;
210         for(i=0;i<NcentersZmat;i++)
211 	{
212         	if(Geom[i].Nentry>NUMBER_ENTRY_0 && !test(Geom[i].R)) k++;
213         	if(Geom[i].Nentry>NUMBER_ENTRY_R && !test(Geom[i].Angle)) k++;
214         	if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE && !test(Geom[i].Dihedral)) k++;
215 	}
216 	return k;
217 }
218 /*************************************************************************************************************/
putMopacMoleculeInFile(FILE * file,gboolean RP)219 static gboolean putMopacMoleculeInFile(FILE* file, gboolean RP)
220 {
221         gchar buffer[BSIZE];
222         gchar b1[20];
223         gchar b2[20];
224         gchar b3[20];
225         gchar con[20];
226 	gint i;
227 	gint k1 = 0;
228 	gint k2 = 0;
229 	gint k3 = 0;
230 	gint nvar = 0;
231 	gint k;
232 
233 	if(MethodeGeom==GEOM_IS_XYZ && NcentersXYZ<1) return FALSE;
234 	if(MethodeGeom!=GEOM_IS_XYZ && NcentersZmat<1) return FALSE;
235 	if(MethodeGeom==GEOM_IS_XYZ)
236 		nvar  = getRealNumberXYZVariables();
237 	else
238 		nvar  = getRealNumberZmatVariables();
239 
240 	if(MethodeGeom==GEOM_IS_XYZ)
241       		for (i=0;i<NcentersXYZ;i++)
242 		{
243 			setValueVariableXYZ(GeomXYZ[i].X, b1, &k1);
244 			setValueVariableXYZ(GeomXYZ[i].Y, b2, &k2);
245 			setValueVariableXYZ(GeomXYZ[i].Z, b3, &k3);
246 			if(nvar==0) { k1 = 1; k2 = 1; k3 = 1;}
247 			if(RP)
248 			{
249 				for(k=0;k<2;k++)
250 				{
251 					if(!strcmp(typeRP[k],"X") && i==atomRP[k]-1) k1 = -1;
252 					if(!strcmp(typeRP[k],"Y") && i==atomRP[k]-1) k2 = -1;
253 					if(!strcmp(typeRP[k],"Z") && i==atomRP[k]-1) k3 = -1;
254 				}
255 			}
256 
257 			sprintf(buffer,"%s  %s %d %s %d %s %d\n",GeomXYZ[i].Symb,
258 					b1, k1,
259 					b2, k2,
260 					b3, k3
261 					);
262         		fprintf(file, "%s",buffer);
263 		}
264 	else
265 	{
266         	for(i=0;i<NcentersZmat;i++)
267         	{
268         		if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE)
269 			{
270 				setValueVariableZmat(Geom[i].R, b1, &k1);
271 				setValueVariableZmat(Geom[i].Angle, b2, &k2);
272 				setValueVariableZmat(Geom[i].Dihedral, b3, &k3);
273 				sprintf(con,"%s %s %s", Geom[i].NR, Geom[i].NAngle, Geom[i].NDihedral);
274 				if(nvar==0) { k1 = 1; k2 = 1; k3 = 1;}
275 
276 				if(RP)
277 				{
278 					for(k=0;k<2;k++)
279 					{
280 						if(!strcmp(typeRP[k],"Bond") && i==atomRP[k]-1) k1 = -1;
281 						if(!strcmp(typeRP[k],"Angle") && i==atomRP[k]-1) k2 = -1;
282 						if(!strcmp(typeRP[k],"Dihedral") && i==atomRP[k]-1) k3 = -1;
283 					}
284 				}
285 
286 				sprintf(buffer,"%s  %s %d %s %d %s %d %s\n",
287 						Geom[i].Symb,
288 						b1, k1,
289 						b2, k2,
290 						b3, k3,
291 						con
292 						);
293         			fprintf(file, "%s",buffer);
294 			}
295 			else
296         		if(Geom[i].Nentry>NUMBER_ENTRY_R)
297 			{
298 				setValueVariableZmat(Geom[i].R, b1, &k1);
299 				setValueVariableZmat(Geom[i].Angle, b2, &k2);
300 				sprintf(b3,"0.0"); k3 = 0;
301 				sprintf(con,"%s %s %s", Geom[i].NR, Geom[i].NAngle, "0");
302 
303 				if(nvar==0) { k1 = 1; k2 = 1;}
304 				if(RP)
305 				{
306 					for(k=0;k<2;k++)
307 					{
308 						if(!strcmp(typeRP[k],"Bond") && i==atomRP[k]-1) k1 = -1;
309 						if(!strcmp(typeRP[k],"Angle") && i==atomRP[k]-1) k2 = -1;
310 					}
311 				}
312 				sprintf(buffer,"%s  %s %d %s %d %s %d %s\n",
313 						Geom[i].Symb,
314 						b1, k1,
315 						b2, k2,
316 						b3, k3,
317 						con
318 						);
319 
320         			fprintf(file, "%s",buffer);
321 			}
322 			else
323         		if(Geom[i].Nentry>NUMBER_ENTRY_0)
324 			{
325 				setValueVariableZmat(Geom[i].R, b1, &k1);
326 				sprintf(b2,"0.0"); k2 = 0;
327 				sprintf(b3,"0.0"); k3 = 0;
328 				sprintf(con,"%s %s %s", Geom[i].NR, "0", "0");
329 
330 				if(nvar==0) { k1 = 1;}
331 				if(RP)
332 				for(k=0;k<2;k++)
333 					if(!strcmp(typeRP[k],"Bond") && i==atomRP[k]-1) k1 = -1;
334 
335 				sprintf(buffer,"%s  %s %d %s %d %s %d %s\n",
336 						Geom[i].Symb,
337 						b1, k1,
338 						b2, k2,
339 						b3, k3,
340 						con
341 						);
342         			fprintf(file, "%s",buffer);
343 			}
344 			else
345 			{
346 				sprintf(b1,"0.0"); k1 = 0;
347 				sprintf(b2,"0.0"); k2 = 0;
348 				sprintf(b3,"0.0"); k3 = 0;
349 				sprintf(con,"%s %s %s", "0.0", "0", "0");
350 				sprintf(buffer,"%s  %s %d %s %d %s %d %s\n",
351 						Geom[i].Symb,
352 						b1, k1,
353 						b2, k2,
354 						b3, k3,
355 						con
356 						);
357         			fprintf(file, "%s",buffer);
358 			}
359         	}
360 	}
361 	return TRUE;
362 }
363 /*****************************************************************************/
runOneMopac(gchar * fileNamePrefix,gchar * keyWords)364 static gboolean runOneMopac(gchar* fileNamePrefix, gchar* keyWords)
365 {
366 	FILE* file = NULL;
367 	FILE* fileSH = NULL;
368 	gint j;
369 	gchar* fileNameIn = NULL;
370 	gchar* fileNameOut = NULL;
371 	gchar* fileNameSH = NULL;
372 	gchar multiplicityStr[100];
373 	gchar buffer[1024];
374 	gdouble energy = 0;
375 #ifdef G_OS_WIN32
376 	gchar c='%';
377 #endif
378 
379 	if(!geometry0) return FALSE;
380 #ifndef G_OS_WIN32
381 	fileNameSH = g_strdup_printf("%sMopacOne.sh",fileNamePrefix);
382 #else
383 	fileNameSH = g_strdup_printf("%sMopacOne.bat",fileNamePrefix);
384 #endif
385  	fileSH = FOpen(fileNameSH, "w");
386 	if(!fileSH) return FALSE;
387 #ifdef G_OS_WIN32
388 	fprintf(fileSH,"@echo off\n");
389 	fprintf(fileSH,"set PATH=%cPATH%c;\"%s\"\n",c,c,mopacDirectory);
390 #endif
391 
392 	getMultiplicityName(spinMultiplicity, multiplicityStr);
393 
394 	fileNameIn = g_strdup_printf("%sOne.mop",fileNamePrefix);
395  	file = FOpen(fileNameIn, "w");
396 	if(!file)
397 	{
398  		if(fileNameIn) g_free(fileNameIn);
399  		if(fileNameOut) g_free(fileNameOut);
400  		if(fileNameSH) g_free(fileNameSH);
401 		return FALSE;
402 	}
403 	fprintf(file,"* ===============================\n");
404 	fprintf(file,"* Input file for Mopac\n");
405 	fprintf(file,"* ===============================\n");
406 	if(spinMultiplicity>1)
407 	fprintf(file,"%s UHF CHARGE=%d %s\n",keyWords,totalCharge,multiplicityStr);
408 	else
409 	fprintf(file,"%s CHARGE=%d %s\n",keyWords,totalCharge,multiplicityStr);
410 	fprintf(file,"\n");
411 	fprintf(file,"Mopac file generated by Gabedit\n");
412 
413   	if(!putMopacMoleculeInFile(file, NULL!=strstr(keyWords,"POINT")))
414 	for(j=0;j<(gint)Natoms;j++)
415 	{
416 	fprintf(file," %s %f %d %f %d %f %d\n",
417 			geometry0[j].Prop.symbol,
418 			geometry0[j].X*BOHR_TO_ANG,
419 			geometry0[j].Variable,
420 			geometry0[j].Y*BOHR_TO_ANG,
421 			geometry0[j].Variable,
422 			geometry0[j].Z*BOHR_TO_ANG,
423 			geometry0[j].Variable
424 			);
425 	}
426 	fclose(file);
427 	{
428 		gchar* str = NULL;
429 		if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM7")) str = g_strdup_printf("Minimization by PM7/Mopac ... Please wait");
430 		else if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM6-DH2")) str = g_strdup_printf("Minimization by PM6-DH2/Mopac ... Please wait");
431 		else if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM6-DH+")) str = g_strdup_printf("Minimization by PM6-DH+/Mopac ... Please wait");
432 		else if(strstr(keyWords,"SPARKLE") && strstr(keyWords,"PM6")) str = g_strdup_printf("Minimization by Sparkle/PM6/Mopac ... Please wait");
433 		else if(strstr(keyWords,"SPARKLE") && strstr(keyWords,"AM1")) str = g_strdup_printf("Minimization by Sparkle/AM1/Mopac ... Please wait");
434 		else if(strstr(keyWords,"SPARKLE") && strstr(keyWords,"PM3")) str = g_strdup_printf("Minimization by Sparkle/PM3/Mopac ... Please wait");
435 		else if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM6")) str = g_strdup_printf("Minimization by PM6/Mopac ... Please wait");
436 		else if(strstr(keyWords,"XYZ") && strstr(keyWords,"AM1")) str = g_strdup_printf("Minimization by AM1/Mopac ... Please wait");
437 		else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM6-DH2")) str = g_strdup_printf("ESP charges from PM6-DH2/Mopac ... Please wait");
438 		else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM6-DH+")) str = g_strdup_printf("ESP charges from PM6-DH+/Mopac ... Please wait");
439 		else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM6")) str = g_strdup_printf("ESP charges from PM6/Mopac ... Please wait");
440 		else if(strstr(keyWords,"ESP") && strstr(keyWords,"AM1")) str = g_strdup_printf("ESP charges from AM1/Mopac ... Please wait");
441 		else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM7")) str = g_strdup_printf("ESP charges from PM7/Mopac ... Please wait");
442 		else if(strstr(keyWords,"POINT")) str = g_strdup_printf("Reaction path by Mopac ... Please wait");
443 		else if(strstr(keyWords,"PM6-DH2")) str = g_strdup_printf("Computing of energy by PM6-DH2/Mopac .... Please wait");
444 		else if(strstr(keyWords,"PM6-DH+")) str = g_strdup_printf("Computing of energy by PM6-DH+/Mopac .... Please wait");
445 		else if(strstr(keyWords,"PM6")) str = g_strdup_printf("Computing of energy by PM6/Mopac .... Please wait");
446 		else if(strstr(keyWords,"PM7")) str = g_strdup_printf("Computing of energy by PM7/Mopac .... Please wait");
447 		else str = g_strdup_printf("Computing of energy by AM1/Mopac .... Please wait");
448 		set_text_to_draw(str);
449 		if(str) g_free(str);
450 		drawGeom();
451     		while( gtk_events_pending() ) gtk_main_iteration();
452 	}
453 #ifndef G_OS_WIN32
454 	fprintf(fileSH,"%s %s\n",NameCommandMopac,fileNameIn);
455 	fclose(fileSH);
456 	sprintf(buffer,"chmod u+x %s",fileNameSH);
457 	{int ierr= system(buffer);}
458 	{int ierr = system(fileNameSH);}
459 #else
460 	fprintf(fileSH,"\"%s\" \"%s\"\n",NameCommandMopac,fileNameIn);
461 	fclose(fileSH);
462 	sprintf(buffer,"\"%s\"",fileNameSH);
463 	{int ierr= system(buffer);}
464 #endif
465 
466 	fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix);
467 	if(strstr(keyWords,"POINT")==NULL)
468 	{
469 		if(getEnergyMopac(fileNameOut,&energy))
470 		{
471 		gchar* str = NULL;
472 
473 		read_geom_from_mopac_output_file(fileNameOut, -1);
474 		str = g_strdup_printf("Energy by Mopac = %f", energy);
475 		set_text_to_draw(str);
476 		drawGeom();
477     		while( gtk_events_pending() ) gtk_main_iteration();
478 		Waiting(1);
479 		if(str) g_free(str);
480 		}
481 		else
482 		{
483 		gchar* str = NULL;
484 		str = g_strdup_printf(
485 				_(
486 				"Sorry, I cannot read the output file : %s "
487 				" ; Check also the installation of Mopac..."
488 				),
489 				fileNameOut
490 				);
491 		set_text_to_draw(str);
492 		if(str) g_free(str);
493 		drawGeom();
494     		while( gtk_events_pending() ) gtk_main_iteration();
495  		if(fileNameIn) g_free(fileNameIn);
496  		if(fileNameOut) g_free(fileNameOut);
497  		if(fileNameSH) g_free(fileNameSH);
498 		return FALSE;
499 		}
500 	}
501 
502  	if(fileNameIn) g_free(fileNameIn);
503  	if(fileNameOut) g_free(fileNameOut);
504  	if(fileNameSH) g_free(fileNameSH);
505 	return TRUE;
506 }
507 /*****************************************************************************/
getEnergyFireFly(gchar * fileNameOut,gdouble * energy)508 static gboolean getEnergyFireFly(gchar* fileNameOut, gdouble* energy)
509 {
510 	FILE* file = NULL;
511 	gchar buffer[1024];
512 	gchar* pdest = NULL;
513 	gboolean OK = FALSE;
514 
515  	file = FOpen(fileNameOut, "rb");
516 	if(!file) return FALSE;
517 	 while(!feof(file))
518 	 {
519 		if(!fgets(buffer,BSIZE,file))break;
520 		pdest = strstr( buffer, "HEAT OF FORMATION IS");
521 		if(pdest)
522 		{
523 			pdest = strstr( buffer, "S");
524 			if(pdest)
525 			{
526 				if(sscanf(pdest+1,"%lf",energy)==1)
527 					OK = TRUE;
528 			}
529 		}
530 	 }
531 	fclose(file);
532 	return OK;
533 }
534 /*************************************************************************************************************/
putFireFlyMoleculeXYZFixed(FILE * file)535 static void putFireFlyMoleculeXYZFixed(FILE* file)
536 {
537 	gint i,k,l;
538 	gint nvar = 0;
539 
540         if(Natoms<2)return;
541 	nvar = 0;
542         for(i=0;i<Natoms;i++)
543 		if(geometry[i].Variable) nvar+=3;
544 	/* printf("nvar = %d\n",nvar);*/
545 	if(nvar==3*Natoms) return;
546 	if(nvar==0) return;
547 
548         fprintf(file," ");
549         fprintf(file, "$STATPT\n");
550         fprintf (file,"   IFREEZ(1)=");
551 
552 	l = 0;
553         for(i=0;i<Natoms;i++)
554 	{
555 		if(!geometry[i].Variable)
556 		{
557 			l++;
558 			k = i*3+1;
559 			fprintf(file,"%d, %d, %d ",k,k+1,k+2);
560 			if(l%10==0) fprintf(file,"\n");
561 		}
562 	}
563 	fprintf(file,"\n ");
564         fprintf (file, "$END\n");
565 }
566 /*****************************************************************************/
runOneFireFly(gchar * fileNamePrefix,gchar * keyWords)567 static gboolean runOneFireFly(gchar* fileNamePrefix, gchar* keyWords)
568 {
569 	FILE* file = NULL;
570 	FILE* fileSH = NULL;
571 	gint j;
572 	gchar* fileNameIn = NULL;
573 	gchar* fileNameOut = NULL;
574 	gchar* fileNameSH = NULL;
575 	gchar multiplicityStr[100];
576 	gchar buffer[1024];
577 	gdouble energy = 0;
578 #ifdef G_OS_WIN32
579 	gchar c='%';
580 #endif
581 
582 	if(!geometry0) return FALSE;
583 #ifndef G_OS_WIN32
584 	fileNameSH = g_strdup_printf("%sPCGOne.sh",fileNamePrefix);
585 #else
586 	fileNameSH = g_strdup_printf("%sPCGOne.bat",fileNamePrefix);
587 #endif
588  	fileSH = FOpen(fileNameSH, "w");
589 	if(!fileSH) return FALSE;
590 #ifdef G_OS_WIN32
591 	fprintf(fileSH,"@echo off\n");
592 	fprintf(fileSH,"set PATH=%cPATH%c;\"%s\"\n",c,c,fireflyDirectory);
593 #endif
594 
595 	getMultiplicityName(spinMultiplicity, multiplicityStr);
596 
597 	fileNameIn = g_strdup_printf("%sOne.inp",fileNamePrefix);
598  	file = FOpen(fileNameIn, "w");
599 	if(!file)
600 	{
601  		if(fileNameIn) g_free(fileNameIn);
602  		if(fileNameOut) g_free(fileNameOut);
603  		if(fileNameSH) g_free(fileNameSH);
604 		return FALSE;
605 	}
606 	fprintf(file,"! ======================================================\n");
607 	fprintf(file,"!  Input file for FireFly\n");
608 	fprintf(file,"! ======================================================\n");
609 	if(strstr(keyWords,"RUNTYP"))
610 	{
611 		sscanf(strstr(keyWords,"RUNTYP"),"%s",buffer);
612 		fprintf(file," $CONTRL %s $END\n",buffer);
613 	}
614 	if(strstr(keyWords,"SCFTYP"))
615 	{
616 		sscanf(strstr(keyWords,"SCFTYP"),"%s",buffer);
617 		fprintf(file," $CONTRL %s $END\n",buffer);
618 	}
619 	else
620 	{
621 		if(spinMultiplicity==1)
622 			fprintf(file," $CONTRL SCFTYP=RHF $END\n");
623 		else
624 			fprintf(file," $CONTRL SCFTYP=UHF $END\n");
625 	}
626 
627 	fprintf(file," $CONTRL ICHARG=%d MULT=%d $END\n",totalCharge,spinMultiplicity);
628 	if(strstr(keyWords,"GBASIS"))
629 	{
630 		sscanf(strstr(keyWords,"GBASIS"),"%s",buffer);
631 		fprintf(file," $BASIS %s $END\n",buffer);
632 	}
633 	if(strstr(keyWords,"Optimize"))
634 	{
635         	fprintf(file, " $STATPT OptTol=1e-4 NStep=500 $END\n");
636 	}
637 	if(strstr(keyWords,"Optimize"))
638 	{
639 		putFireFlyMoleculeXYZFixed(file);
640 	}
641 	fprintf(file," $DATA\n");
642 	fprintf(file,"Molecule specification\n");
643 	fprintf(file,"C1\n");
644 	for(j=0;j<(gint)Natoms;j++)
645 	{
646 		gchar* symbol = geometry0[j].Prop.symbol;
647 		SAtomsProp prop = prop_atom_get(symbol);
648 		fprintf(file,"%s %f %f %f %f\n",
649 			symbol,
650 			(gdouble)prop.atomicNumber,
651 			geometry0[j].X*BOHR_TO_ANG,
652 			geometry0[j].Y*BOHR_TO_ANG,
653 			geometry0[j].Z*BOHR_TO_ANG
654 			);
655 	}
656 	fprintf(file," $END\n");
657 	fclose(file);
658 	fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix);
659 #ifndef G_OS_WIN32
660 	if(!strcmp(NameCommandFireFly,"pcgamess") || !strcmp(NameCommandFireFly,"nohup pcgamess")||
661 	!strcmp(NameCommandFireFly,"firefly") || !strcmp(NameCommandFireFly,"nohup firefly"))
662 	{
663 		fprintf(fileSH,"mkdir %stmp\n",fileNamePrefix);
664 		fprintf(fileSH,"cd %stmp\n",fileNamePrefix);
665 		fprintf(fileSH,"cp %s input\n",fileNameIn);
666 		fprintf(fileSH,"%s -p -o %s\n",NameCommandFireFly,fileNameOut);
667 		fprintf(fileSH,"cd ..\n");
668 		fprintf(fileSH,"rm PUNCH\n");
669 		fprintf(fileSH,"/bin/rm -r  %stmp\n",fileNamePrefix);
670 	}
671 	else
672 		fprintf(fileSH,"%s %s",NameCommandFireFly,fileNameIn);
673 #else
674 	 if(!strcmp(NameCommandFireFly,"pcgamess") ||
675 	 !strcmp(NameCommandFireFly,"firefly") )
676 	{
677         	fprintf(fileSH,"mkdir \"%stmp\"\n",fileNamePrefix);
678 		addUnitDisk(fileSH, fileNamePrefix);
679 	 	fprintf(fileSH,"cd \"%stmp\"\n",fileNamePrefix);
680          	fprintf(fileSH,"copy \"%s\" input\n",fileNameIn);
681          	fprintf(fileSH,"%s -p -o \"%s\"\n",NameCommandFireFly,fileNameOut);
682 	 	fprintf(fileSH,"cd ..\n");
683          	fprintf(fileSH,"del PUNCH 2> nul\n");
684          	fprintf(fileSH,"del /Q  \"%stmp\"\n",fileNamePrefix);
685          	fprintf(fileSH,"rmdir  \"%stmp\"\n",fileNamePrefix);
686 	}
687 	else
688 		fprintf(fileSH,"%s %s",NameCommandFireFly,fileNameIn);
689 #endif
690 	fclose(fileSH);
691 	{
692 		gchar* str = NULL;
693 		if(strstr(keyWords,"Optimiz")) str = g_strdup_printf("Minimization by AM1/FireFly ... Please wait");
694 		else str = g_strdup_printf("Computing of energy by AM1/FireFly .... Please wait");
695 		set_text_to_draw(str);
696 		if(str) g_free(str);
697 		drawGeom();
698     		while( gtk_events_pending() ) gtk_main_iteration();
699 	}
700 #ifndef G_OS_WIN32
701 	sprintf(buffer,"chmod u+x %s",fileNameSH);
702 	{int ierr= system(buffer);}
703 	{int ierr = system(fileNameSH);}
704 #else
705 	sprintf(buffer,"\"%s\"",fileNameSH);
706 	{int ierr= system(buffer);}
707 #endif
708 	if(getEnergyFireFly(fileNameOut,&energy))
709 	{
710 		gchar* str = NULL;
711 
712 		str = g_strdup_printf("Energy by FireFly = %f", energy);
713 		set_text_to_draw(str);
714 		drawGeom();
715     		while( gtk_events_pending() ) gtk_main_iteration();
716 		Waiting(1);
717 		if(str) g_free(str);
718 	}
719 	else
720 	{
721 		gchar* str = NULL;
722 		str = g_strdup_printf(
723 				_(
724 				"Sorry, I cannot read the output file :  %s"
725 				" ; Check also the installation of FireFly...")
726 				,
727 				fileNameOut
728 				);
729 		set_text_to_draw(str);
730 		if(str) g_free(str);
731 		drawGeom();
732     		while( gtk_events_pending() ) gtk_main_iteration();
733  		if(fileNameIn) g_free(fileNameIn);
734  		if(fileNameOut) g_free(fileNameOut);
735  		if(fileNameSH) g_free(fileNameSH);
736 		return FALSE;
737 	}
738 
739  	if(fileNameIn) g_free(fileNameIn);
740  	if(fileNameOut) g_free(fileNameOut);
741  	if(fileNameSH) g_free(fileNameSH);
742 	return TRUE;
743 }
744 /*****************************************************************************/
getEnergyOpenBabel(gchar * fileNameOut,gdouble * energy)745 static gboolean getEnergyOpenBabel(gchar* fileNameOut, gdouble* energy)
746 {
747         FILE* file = NULL;
748         char buffer[1024];
749         char* pdest = NULL;
750         char* energyTag = "FINAL ENERGY:";
751 
752         file = fopen(fileNameOut, "r");
753         if(!file) return FALSE;
754          while(!feof(file))
755          {
756                 if(!fgets(buffer,BSIZE,file))break;
757                 pdest = strstr( buffer, energyTag);
758                 if(pdest &&sscanf(pdest+strlen(energyTag)+1,"%lf",energy)==1)
759                 {
760                         fclose(file);
761                         if(strstr(pdest,"kJ")) *energy /= KCALTOKJ;
762                         return TRUE;
763                 }
764          }
765         fclose(file);
766 	return FALSE;
767 }
768 /*****************************************************************************/
saveGeometry(MoleculeSE * molecule,double energy,char * fileNameGeom)769 static gboolean saveGeometry(MoleculeSE* molecule, double energy, char* fileNameGeom)
770 {
771         gboolean Ok = FALSE;
772         double oldEnergy = molecule->energy;
773         molecule->energy = energy;
774         Ok = saveMoleculeSE(molecule,fileNameGeom);
775         molecule->energy = oldEnergy;
776         return Ok;
777 }
778 /*************************************************************************************************************/
runOneOpenBabel(MoleculeSE * mol,gchar * fileNamePrefix,gchar * NameCommandOpenBabel)779 static gboolean runOneOpenBabel(MoleculeSE* mol, gchar* fileNamePrefix, gchar* NameCommandOpenBabel)
780 {
781 	FILE* fileSH = NULL;
782 	char* fileNameIn = NULL;
783 	char* fileNameOut = NULL;
784 	char* fileNameSH = NULL;
785 	char buffer[1024];
786 	double energy;
787 	MoleculeSE molecule;
788 	gboolean newMolSE = FALSE;
789 #ifdef G_OS_WIN32
790 	char c='%';
791 #endif
792 
793 	if(!mol)
794 	{
795 		molecule = createMoleculeSE(geometry0,(gint)Natoms, totalCharge, spinMultiplicity, TRUE);
796 		mol = &molecule;
797 		newMolSE = TRUE;
798 	}
799 	/*
800 	else
801 	{
802       		gint j;
803 		for(j=0;j<mol->nAtoms;j++)
804 		{
805 		gchar* symbol = mol->atoms[j].prop.symbol;
806 		SAtomsProp prop = prop_atom_get(symbol);
807 		fprintf(stderr,"%s %s %s %f %f %f %f\n",
808 			symbol,
809 			mol->atoms[j].pdbType, mol->atoms[j].mmType,
810 			(gdouble)prop.atomicNumber,
811 			mol->atoms[j].coordinates[0],
812 			mol->atoms[j].coordinates[1],
813 			mol->atoms[j].coordinates[2]
814 			);
815 		}
816 	}
817 	*/
818 
819 	if(mol->nAtoms<1) return FALSE;
820 #ifndef G_OS_WIN32
821 	fileNameSH =g_strdup_printf("%sOne.sh",fileNamePrefix);
822 #else
823 	fileNameSH =g_strdup_printf("%sOne.bat",fileNamePrefix);
824 #endif
825  	fileSH = fopen(fileNameSH, "w");
826 	if(!fileSH) return FALSE;
827 #ifdef G_OS_WIN32
828 	fprintf(fileSH,"@echo off\n");
829 #endif
830 
831 	fileNameIn =g_strdup_printf("%sOne.hin",fileNamePrefix);
832 	fileNameOut =g_strdup_printf("%sOne.out",fileNamePrefix);
833 
834 	if(!saveMoleculeSEHIN(mol, fileNameIn))
835 	{
836  		if(fileNameIn) free(fileNameIn);
837  		if(fileNameOut) free(fileNameOut);
838  		if(fileNameSH) free(fileNameSH);
839 		if(mol && newMolSE) freeMoleculeSE(mol);
840 		return FALSE;
841 	}
842 #ifndef G_OS_WIN32
843 	fprintf(fileSH,"#!/bin/bash\n");
844 	fprintf(fileSH,"export PATH=$PATH:%s\n",openbabelDirectory);
845 	fprintf(fileSH,"export BABEL_DATADIR=%s\n",openbabelDirectory);
846 	if(!strstr(NameCommandOpenBabel,"obgradient") || !strstr(NameCommandOpenBabel,"obopt"))
847 	{
848 		fprintf(fileSH,"%s %s > %s\n",NameCommandOpenBabel,fileNameIn,fileNameOut);
849 		fprintf(fileSH,"exit\n");
850 	}
851 	else
852 	{
853 		if(!strstr( NameCommandOpenBabel,"obopt"))
854 		{
855 			char** ssplit = NULL;
856 			int nA = 0;
857 			int i;
858 			ssplit = gab_split(NameCommandOpenBabel);
859 			while(ssplit && ssplit[nA]!=NULL) nA++;
860 			fprintf(fileSH,"%s ", "obopt");
861 			for(i=1;i<nA;i++) fprintf(fileSH,"%s ",  ssplit[i]);
862 			fprintf(fileSH," %s > %s 2>/dev/null", fileNameIn, fileNameOut);
863 			gab_strfreev(ssplit);
864 		}
865 		else fprintf(fileSH,"%s %s > %s 2>/dev/null", NameCommandOpenBabel, fileNameIn, fileNameOut);
866 	}
867 #else
868 	if(strstr(openbabelDirectory,"\""))
869 	{
870 		fprintf(fileSH,"set PATH=%s;%cPATH%c\n",openbabelDirectory,'%','%');
871 		fprintf(fileSH,"set BABEL_DATADIR=%s\n",openbabelDirectory);
872 	}
873 	else
874 	{
875 		fprintf(fileSH,"set PATH=\"%s\";%cPATH%c\n",openbabelDirectory,'%','%');
876 		fprintf(fileSH,"set BABEL_DATADIR=%s\n",openbabelDirectory);
877 	}
878 	if(!strstr(NameCommandOpenBabel,"obgradient") || !strstr(NameCommandOpenBabel,"obopt"))
879 	{
880 		fprintf(fileSH,"%s %s > %s\n",NameCommandOpenBabel,fileNameIn,fileNameOut);
881 		fprintf(fileSH,"exit\n");
882 	}
883 	else
884 	{
885 		if(!strstr( NameCommandOpenBabel,"obopt"))
886 		{
887 			char** ssplit = NULL;
888 			int nA = 0;
889 			int i;
890 			ssplit = gab_split(NameCommandOpenBabel);
891 			while(ssplit && ssplit[nA]!=NULL) nA++;
892 			fprintf(fileSH,"%s ", "obopt");
893 			for(i=1;i<nA;i++) fprintf(fileSH,"%s ",  ssplit[i]);
894 			fprintf(fileSH," %s > %s 2>/dev/null", fileNameIn, fileNameOut);
895 			gab_strfreev(ssplit);
896 		}
897 		else fprintf(fileSH,"%s %s > %s", NameCommandOpenBabel, fileNameIn, fileNameOut);
898 	}
899 #endif
900 	fclose(fileSH);
901 #ifndef G_OS_WIN32
902 	/*
903 	sprintf(buffer,"cat %s",fileNameSH);
904 	system(buffer);
905 	sprintf(buffer,"cat %s",fileNameIn);
906 	system(buffer);
907 	*/
908 
909 
910 
911 	sprintf(buffer,"chmod u+x %s",fileNameSH);
912 	system(buffer);
913 	system(fileNameSH);
914 #else
915 	sprintf(buffer,"\"%s\"",fileNameSH);
916 	system(buffer);
917 #endif
918 	if(getEnergyOpenBabel(fileNameOut,&energy))
919 	{
920 		printf("Energy by OpenBabel = %f\n", energy);
921 		readGeomMoleculeSEFromOpenBabelOutputFile(mol, fileNameOut, -1);
922 		mol->energy = energy;
923 		if(strstr( NameCommandOpenBabel,"obopt"))
924 		{
925 			char* str =g_strdup_printf("%s.gab",fileNamePrefix);
926 			saveGeometry(mol, energy, str);
927 			read_geom_from_gabedit_geom_conv_file(str, 1);
928 			if(str) free(str);
929 			/* str = g_strdup_printf("Energy by OpenBabel = %f", energy);*/
930 			str = g_strdup_printf("Gradient = %f Energy by OpenBabel = %f",getGradientNormMoleculeSE(mol), energy);
931 			set_text_to_draw(str);
932 			drawGeom();
933     			while( gtk_events_pending() ) gtk_main_iteration();
934 			Waiting(1);
935 			/*
936 			printf("----------------------------------------- \n");
937 			printf("Optimized geometry saved in %s file\n",str);
938 			printf("----------------------------------------- \n");
939 			*/
940 			if(str) free(str);
941 		}
942 		else
943 		{
944 			gchar* str = NULL;
945 			str = g_strdup_printf("Energy by OpenBabel = %f", energy);
946 			set_text_to_draw(str);
947 			drawGeom();
948     			while( gtk_events_pending() ) gtk_main_iteration();
949 			Waiting(1);
950 			if(str) g_free(str);
951 			/*
952 			char* str =g_strdup_printf("%s.gab",fileNamePrefix);
953 			saveGeometry(mol, energy, str);
954 			printf("----------------------------------------- \n");
955 			printf("Geometry saved in %s file\n",str);
956 			printf("----------------------------------------- \n");
957 			if(str) free(str);
958 			*/
959 		}
960 	}
961 	else
962 	{
963 		gchar* str = NULL;
964 		str = g_strdup_printf(
965 				_(
966 				"Sorry, I cannot read the output file :  %s"
967 				" ; Check also the installation of OpenBabel...")
968 				,
969 				fileNameOut
970 				);
971 		set_text_to_draw(str);
972 		if(str) g_free(str);
973 		drawGeom();
974     		while( gtk_events_pending() ) gtk_main_iteration();
975 		return FALSE;
976 	}
977 
978  	if(fileNameIn) free(fileNameIn);
979  	if(fileNameOut) free(fileNameOut);
980  	if(fileNameSH) free(fileNameSH);
981 	if(mol && newMolSE) freeMoleculeSE(mol);
982 	return TRUE;
983 }
984 /*****************************************************************************/
getEnergyOrca(gchar * fileNameOut,gdouble * energy)985 static gboolean getEnergyOrca(gchar* fileNameOut, gdouble* energy)
986 {
987 	FILE* file = NULL;
988 	gchar buffer[1024];
989 	gchar* pdest = NULL;
990 	gchar* energyTag = "FINAL SINGLE POINT ENERGY";
991 
992  	file = FOpen(fileNameOut, "rb");
993 	if(!file) return FALSE;
994 	 while(!feof(file))
995 	 {
996 		if(!fgets(buffer,BSIZE,file))break;
997 		pdest = strstr( buffer, energyTag);
998 		if(pdest &&sscanf(pdest+strlen(energyTag)+1,"%lf",energy)==1)
999 		{
1000 			fclose(file);
1001 			*energy *=627.50944796;
1002 			return TRUE;
1003 		}
1004 	 }
1005 	fclose(file);
1006 	return FALSE;
1007 }
1008 /*****************************************************************************/
runOneOrca(gchar * fileNamePrefix,gchar * keyWords)1009 static gboolean runOneOrca(gchar* fileNamePrefix, gchar* keyWords)
1010 {
1011 	FILE* file = NULL;
1012 	FILE* fileSH = NULL;
1013 	gchar* fileNameIn = NULL;
1014 	gchar* fileNameOut = NULL;
1015 	gchar* fileNameSH = NULL;
1016 	gchar multiplicityStr[100];
1017 	gchar buffer[1024];
1018 	gdouble energy = 0;
1019 	gint i;
1020 	gint nV;
1021 
1022 	if(!geometry0) return FALSE;
1023 #ifndef G_OS_WIN32
1024 	fileNameSH = g_strdup_printf("%sOne.sh",fileNamePrefix);
1025 #else
1026 	fileNameSH = g_strdup_printf("%sOne.bat",fileNamePrefix);
1027 #endif
1028  	fileSH = FOpen(fileNameSH, "w");
1029 	if(!fileSH) return FALSE;
1030 #ifdef G_OS_WIN32
1031 	fprintf(fileSH,"@echo off\n");
1032 #endif
1033 
1034 	getMultiplicityName(spinMultiplicity, multiplicityStr);
1035 
1036 	fileNameIn = g_strdup_printf("%sOne.inp",fileNamePrefix);
1037  	file = FOpen(fileNameIn, "w");
1038 	if(!file)
1039 	{
1040  		if(fileNameIn) g_free(fileNameIn);
1041  		if(fileNameOut) g_free(fileNameOut);
1042  		if(fileNameSH) g_free(fileNameSH);
1043 		return FALSE;
1044 	}
1045 	fprintf(file,"# ======================================================\n");
1046 	fprintf(file,"#  Orca input file made in Gabedit\n");
1047 	fprintf(file,"# ======================================================\n");
1048 	fprintf(file,"! %s\n",keyWords);
1049 	if(MethodeGeom==GEOM_IS_XYZ)
1050 	{
1051 		fprintf(file,"* xyz %d   %d\n",totalCharge,spinMultiplicity);
1052       		for (i=0;i<NcentersXYZ;i++)
1053 		{
1054 			gchar X[100];
1055 			gchar Y[100];
1056 			gchar Z[100];
1057 			sprintf(X,"%s",GeomXYZ[i].X);
1058   			/* if(!test(GeomXYZ[i].X)) sprintf(X,"{%s}",GeomXYZ[i].X);*/
1059   			if(!test(GeomXYZ[i].X)) sprintf(X," %lf ", get_value_variableXYZ(GeomXYZ[i].X));
1060 			sprintf(Y,"%s",GeomXYZ[i].Y);
1061   			/* if(!test(GeomXYZ[i].Y)) sprintf(Y,"{%s}",GeomXYZ[i].Y);*/
1062   			if(!test(GeomXYZ[i].Y)) sprintf(Y," %lf ", get_value_variableXYZ(GeomXYZ[i].Y));
1063 			sprintf(Z,"%s",GeomXYZ[i].Z);
1064   			/* if(!test(GeomXYZ[i].Z)) sprintf(Z,"{%s}",GeomXYZ[i].Z);*/
1065   			if(!test(GeomXYZ[i].Z)) sprintf(Z," %lf ", get_value_variableXYZ(GeomXYZ[i].Z));
1066 
1067 			fprintf(file," %s  %s %s %s\n",GeomXYZ[i].Symb, X,Y,Z);
1068 		}
1069 		fprintf(file,"*\n");
1070 		nV = 0;
1071         	if(NVariablesXYZ>0)
1072         	for(i=0;i<NVariablesXYZ;i++)
1073         	{
1074         		if(VariablesXYZ[i].Used)
1075 			{
1076 				/* fprintf(file,"%cparams \n",'%');*/
1077 				nV++;
1078 				break;
1079 			}
1080         	}
1081 		/*
1082         	for(i=0;i<NVariablesXYZ;i++)
1083         	{
1084         		if(VariablesXYZ[i].Used)
1085 			{
1086   				fprintf(file," %s  %s\n",VariablesXYZ[i].Name,VariablesXYZ[i].Value);
1087 			}
1088         	}
1089 		if(nV>0) fprintf(file," end #params\n");
1090 		*/
1091 		if(nV>0)
1092 		{
1093 			fprintf(file,"%cgeom Constraints\n",'%');
1094       			for (i=0;i<NcentersXYZ;i++)
1095 			{
1096   				if(!test(GeomXYZ[i].X) || !test(GeomXYZ[i].Y) || !test(GeomXYZ[i].Z))
1097 				{
1098 					fprintf(file,"  {C %d C}\n",i);
1099 				}
1100 			}
1101 			fprintf(file," end #Constraints\n");
1102 			fprintf(file," invertConstraints true\n");
1103 			fprintf(file," end #geom\n");
1104 		}
1105 	}
1106 	else
1107 	{
1108 		fprintf(file,"* int %d   %d\n",totalCharge,spinMultiplicity);
1109         	for(i=0;i<NcentersZmat;i++)
1110         	{
1111         		if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE)
1112 			{
1113 				gchar R[100];
1114 				gchar A[100];
1115 				gchar D[100];
1116 				sprintf(R,"%s",Geom[i].R);
1117   				/* if(!test(Geom[i].R)) sprintf(R,"{%s}",Geom[i].R);*/
1118   				if(!test(Geom[i].R)) sprintf(R," %lf ",get_value_variableZmat(Geom[i].R));
1119 				sprintf(A,"%s",Geom[i].Angle);
1120   				/* if(!test(Geom[i].Angle)) sprintf(A,"{%s}",Geom[i].Angle);*/
1121   				if(!test(Geom[i].Angle)) sprintf(A," %lf ",get_value_variableZmat(Geom[i].Angle));
1122 				sprintf(D,"%s",Geom[i].Dihedral);
1123   				/* if(!test(Geom[i].Dihedral)) sprintf(D,"{%s}",Geom[i].Dihedral);*/
1124   				if(!test(Geom[i].Dihedral)) sprintf(D," %lf ",get_value_variableZmat(Geom[i].Dihedral));
1125 
1126 				fprintf(file," %s %s %s %s %s %s %s\n",
1127 						Geom[i].Symb,
1128 						Geom[i].NR,
1129 						Geom[i].NAngle,
1130 						Geom[i].NDihedral,
1131 						R,A,D);
1132 			}
1133 			else
1134         		if(Geom[i].Nentry>NUMBER_ENTRY_R)
1135 			{
1136 				gchar R[100];
1137 				gchar A[100];
1138 				sprintf(R,"%s",Geom[i].R);
1139   				/* if(!test(Geom[i].R)) sprintf(R,"{%s}",Geom[i].R);*/
1140   				if(!test(Geom[i].R)) sprintf(R," %lf ",get_value_variableZmat(Geom[i].R));
1141 				sprintf(A,"%s",Geom[i].Angle);
1142   				/* if(!test(Geom[i].Angle)) sprintf(A,"{%s}",Geom[i].Angle);*/
1143   				if(!test(Geom[i].Angle)) sprintf(A," %lf ",get_value_variableZmat(Geom[i].Angle));
1144 				/*
1145 				fprintf(file," %s  %s %s %s %s\n",
1146 						Geom[i].Symb,
1147 						Geom[i].NR,R,
1148 						Geom[i].NAngle,A
1149 						);
1150 				*/
1151 				fprintf(file," %s %s %s %s %s %s %s\n",
1152 						Geom[i].Symb,
1153 						Geom[i].NR,
1154 						Geom[i].NAngle,
1155 						"0",
1156 						R,A,"0.0");
1157 			}
1158 			else
1159         		if(Geom[i].Nentry>NUMBER_ENTRY_0)
1160 			{
1161 				gchar R[100];
1162 				sprintf(R,"%s",Geom[i].R);
1163   				if(!test(Geom[i].R)) sprintf(R," %lf ",get_value_variableZmat(Geom[i].R));
1164   				/* if(!test(Geom[i].R)) sprintf(R,"{%s}",Geom[i].R);*/
1165 				/* fprintf(file," %s  %s %s\n", Geom[i].Symb, Geom[i].NR,R);*/
1166 				fprintf(file," %s %s %s %s %s %s %s\n",
1167 						Geom[i].Symb,
1168 						Geom[i].NR,
1169 						"0",
1170 						"0",
1171 						R,"0.0","0.0");
1172 			}
1173 			else
1174 			{
1175 				//fprintf(file," %s \n", Geom[i].Symb);
1176 				fprintf(file," %s %s %s %s %s %s %s\n",
1177 						Geom[i].Symb,
1178 						"0",
1179 						"0",
1180 						"0",
1181 						"0.0","0.0","0.0");
1182 			}
1183         	}
1184 		fprintf(file,"*\n");
1185 		nV = 0;
1186         	if(NVariables>0)
1187         	for(i=0;i<NVariables;i++)
1188         	{
1189         		if(Variables[i].Used)
1190 			{
1191 				/* fprintf(file,"%cparams \n",'%');*/
1192 				nV++;
1193 				break;
1194 			}
1195         	}
1196 		/*
1197         	for(i=0;i<NVariables;i++)
1198         	{
1199         		if(Variables[i].Used)
1200 			{
1201   				fprintf(file," %s  %s\n",Variables[i].Name,Variables[i].Value);
1202 			}
1203         	}
1204 		if(nV>0)
1205         		fprintf(file," end #params\n");
1206 		*/
1207 		if(nV>0)
1208 		{
1209 			fprintf(file,"%cgeom Constraints\n",'%');
1210       			for (i=0;i<NcentersZmat;i++)
1211 			{
1212   				if(Geom[i].Nentry>=NUMBER_ENTRY_R && !test(Geom[i].R))
1213 				{
1214 					fprintf(file,"  {B %d %d C}\n",atoi(Geom[i].NR)-1,i);
1215 				}
1216   				if(Geom[i].Nentry>=NUMBER_ENTRY_ANGLE && !test(Geom[i].Angle))
1217 				{
1218 					fprintf(file,"  {A %d %d %d C}\n",
1219 							atoi(Geom[i].NAngle)-1,
1220 							atoi(Geom[i].NR)-1,i);
1221 				}
1222   				if(Geom[i].Nentry>NUMBER_ENTRY_ANGLE && !test(Geom[i].Dihedral))
1223 				{
1224 					fprintf(file,"  {D %d %d %d %d C}\n",
1225 							atoi(Geom[i].NDihedral)-1,
1226 							atoi(Geom[i].NAngle)-1,
1227 							atoi(Geom[i].NR)-1,i);
1228 				}
1229 			}
1230 			fprintf(file," end #Constraints\n");
1231 			fprintf(file," invertConstraints true\n");
1232 			fprintf(file," end #geom\n");
1233 		}
1234 	}
1235 
1236 	fclose(file);
1237 	fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix);
1238 #ifndef G_OS_WIN32
1239 	if(!strcmp(NameCommandOrca,"orca") || !strcmp(NameCommandOrca,"nohup orca"))
1240 	{
1241 		fprintf(fileSH,"%s %s > %s\n",NameCommandOrca,fileNameIn,fileNameOut);
1242 		fprintf(fileSH,"exit\n");
1243 	}
1244 	else
1245 		fprintf(fileSH,"%s %s",NameCommandOrca,fileNameIn);
1246 #else
1247 	 if(!strcmp(NameCommandOrca,"orca") )
1248 	{
1249 		if(strstr(orcaDirectory,"\"")) fprintf(fileSH,"set PATH=%s;%cPATH%c\n",orcaDirectory,'%','%');
1250 		else fprintf(fileSH,"set PATH=\"%s\";%cPATH%c\n",orcaDirectory,'%','%');
1251 		fprintf(fileSH,"%s %s > %s\n",NameCommandOrca,fileNameIn,fileNameOut);
1252 		fprintf(fileSH,"exit\n");
1253 	}
1254 	else
1255 		fprintf(fileSH,"%s %s",NameCommandOrca,fileNameIn);
1256 #endif
1257 	fclose(fileSH);
1258 	{
1259 		gchar* str = NULL;
1260 		if(strstr(keyWords,"Opt")) str = g_strdup_printf("Minimization by Orca ... Please wait");
1261 		else str = g_strdup_printf("Computing of energy by Orca .... Please wait");
1262 		set_text_to_draw(str);
1263 		if(str) g_free(str);
1264 		drawGeom();
1265     		while( gtk_events_pending() ) gtk_main_iteration();
1266 	}
1267 #ifndef G_OS_WIN32
1268 	sprintf(buffer,"chmod u+x %s",fileNameSH);
1269 	{int ierr= system(buffer);}
1270 	{int ierr = system(fileNameSH);}
1271 #else
1272 	sprintf(buffer,"\"%s\"",fileNameSH);
1273 	{int ierr= system(buffer);}
1274 #endif
1275 	if(getEnergyOrca(fileNameOut,&energy))
1276 	{
1277 		gchar* str = NULL;
1278 
1279 		str = g_strdup_printf("Energy by Orca = %f", energy);
1280 		set_text_to_draw(str);
1281 		drawGeom();
1282     		while( gtk_events_pending() ) gtk_main_iteration();
1283 		Waiting(1);
1284 		if(str) g_free(str);
1285 	}
1286 	else
1287 	{
1288 		gchar* str = NULL;
1289 		str = g_strdup_printf(
1290 				_(
1291 				"Sorry, I cannot read the output file :  %s"
1292 				" ; Check also the installation of Orca..."
1293 				),
1294 				fileNameOut
1295 				);
1296 		set_text_to_draw(str);
1297 		if(str) g_free(str);
1298 		drawGeom();
1299     		while( gtk_events_pending() ) gtk_main_iteration();
1300  		if(fileNameIn) g_free(fileNameIn);
1301  		if(fileNameOut) g_free(fileNameOut);
1302  		if(fileNameSH) g_free(fileNameSH);
1303 		return FALSE;
1304 	}
1305 
1306  	if(fileNameIn) g_free(fileNameIn);
1307  	if(fileNameOut) g_free(fileNameOut);
1308  	if(fileNameSH) g_free(fileNameSH);
1309 	return TRUE;
1310 }
1311 /*****************************************************************************/
runGeneric(MoleculeSE * mol,char * fileName,char * keys,char * genericCommand)1312 static void runGeneric(MoleculeSE* mol, char* fileName, char* keys, char* genericCommand)
1313 {
1314 	if(keys && genericCommand)
1315 	{
1316 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1317 		if(runOneGeneric(mol, fileNamePrefix, keys, genericCommand))
1318 		{
1319 		}
1320 		if(fileNamePrefix) free(fileNamePrefix);
1321 	}
1322 }
1323 /*****************************************************************************/
runSemiEmpirical(GtkWidget * Win,gpointer data,gchar * type,gchar * keys)1324 static void runSemiEmpirical(GtkWidget* Win, gpointer data, gchar* type, gchar* keys)
1325 {
1326 	gchar* fileName = NULL;
1327 	/* fileName */
1328 	{
1329 		gchar* dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector));
1330 		gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileName)));
1331 		if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR)
1332 			fileName = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp);
1333 		else
1334 			fileName = g_strdup_printf("%s%s",dirName, tmp);
1335 
1336 		g_free(tmp);
1337 		g_free(dirName);
1338 	}
1339 
1340 	gtk_widget_destroy(Win);
1341     	while( gtk_events_pending() ) gtk_main_iteration();
1342 
1343 	{
1344 		gint i;
1345 		for(i=0;i<4;i++) NumSelAtoms[i] = -1;
1346 		change_of_center(NULL,NULL);
1347 	}
1348 
1349 	if(!strcmp(type,"PM6DH2MopacEnergy"))
1350 	{
1351 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1352 		if(runOneMopac(fileNamePrefix, "PM6-DH2 1SCF"))
1353 		{
1354 		}
1355 		if(fileNamePrefix) g_free(fileNamePrefix);
1356 	}
1357 	else if(!strcmp(type,"PM6DH+MopacEnergy"))
1358 	{
1359 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1360 		if(runOneMopac(fileNamePrefix, "PM6-DH+ 1SCF"))
1361 		{
1362 		}
1363 		if(fileNamePrefix) g_free(fileNamePrefix);
1364 	}
1365 	else
1366 	if(!strcmp(type,"PM6MopacEnergy"))
1367 	{
1368 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1369 		if(runOneMopac(fileNamePrefix, "PM6 1SCF"))
1370 		{
1371 		}
1372 		if(fileNamePrefix) g_free(fileNamePrefix);
1373 	}
1374 	else
1375 	if(!strcmp(type,"PM7MopacEnergy"))
1376 	{
1377 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1378 		if(runOneMopac(fileNamePrefix, "PM7 1SCF"))
1379 		{
1380 		}
1381 		if(fileNamePrefix) g_free(fileNamePrefix);
1382 	}
1383 	else if(!strcmp(type,"PM6DH2MopacOptimize"))
1384 	{
1385 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1386 		if(runOneMopac(fileNamePrefix, "PM6-DH2 XYZ AUX"))
1387 		{
1388 			gchar* fileOut = g_strdup_printf("%sOne.aux",fileNamePrefix);
1389 			find_energy_mopac_aux(fileOut);
1390 			if(fileOut) g_free(fileOut);
1391 		}
1392 		if(fileNamePrefix) g_free(fileNamePrefix);
1393 	}
1394 	else if(!strcmp(type,"PM6DH+MopacOptimize"))
1395 	{
1396 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1397 		if(runOneMopac(fileNamePrefix, "PM6-DH+ XYZ AUX"))
1398 		{
1399 			gchar* fileOut = g_strdup_printf("%sOne.aux",fileNamePrefix);
1400 			find_energy_mopac_aux(fileOut);
1401 			if(fileOut) g_free(fileOut);
1402 		}
1403 		if(fileNamePrefix) g_free(fileNamePrefix);
1404 	}
1405 	else if(!strcmp(type,"PM6MopacOptimize"))
1406 	{
1407 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1408 		if(runOneMopac(fileNamePrefix, "PM6 XYZ AUX"))
1409 		{
1410 			gchar* fileOut = g_strdup_printf("%sOne.aux",fileNamePrefix);
1411 			find_energy_mopac_aux(fileOut);
1412 			if(fileOut) g_free(fileOut);
1413 		}
1414 		if(fileNamePrefix) g_free(fileNamePrefix);
1415 	}
1416 	else if(!strcmp(type,"PM7MopacOptimize"))
1417 	{
1418 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1419 		if(runOneMopac(fileNamePrefix, "PM7 XYZ AUX"))
1420 		{
1421 			gchar* fileOut = g_strdup_printf("%sOne.aux",fileNamePrefix);
1422 			find_energy_mopac_aux(fileOut);
1423 			if(fileOut) g_free(fileOut);
1424 		}
1425 		if(fileNamePrefix) g_free(fileNamePrefix);
1426 	}
1427 	else if(!strcmp(type,"PM6DH2MopacESP"))
1428 	{
1429 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1430 		if(runOneMopac(fileNamePrefix, "PM6-DH2 1SCF ESP"))
1431 		{
1432 			gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix);
1433 			read_geom_from_mopac_output_file(fileOut, -1);
1434 			if(fileOut) g_free(fileOut);
1435 		}
1436 		if(fileNamePrefix) g_free(fileNamePrefix);
1437 	}
1438 	else if(!strcmp(type,"PM6DH+MopacESP"))
1439 	{
1440 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1441 		if(runOneMopac(fileNamePrefix, "PM6-DH+ 1SCF ESP"))
1442 		{
1443 			gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix);
1444 			read_geom_from_mopac_output_file(fileOut, -1);
1445 			if(fileOut) g_free(fileOut);
1446 		}
1447 		if(fileNamePrefix) g_free(fileNamePrefix);
1448 	}
1449 	else if(!strcmp(type,"PM6MopacESP"))
1450 	{
1451 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1452 		if(runOneMopac(fileNamePrefix, "PM6 1SCF ESP"))
1453 		{
1454 			gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix);
1455 			read_geom_from_mopac_output_file(fileOut, -1);
1456 			if(fileOut) g_free(fileOut);
1457 		}
1458 		if(fileNamePrefix) g_free(fileNamePrefix);
1459 	}
1460 	else if(!strcmp(type,"PM7MopacESP"))
1461 	{
1462 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1463 		if(runOneMopac(fileNamePrefix, "PM7 1SCF ESP"))
1464 		{
1465 			gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix);
1466 			read_geom_from_mopac_output_file(fileOut, -1);
1467 			if(fileOut) g_free(fileOut);
1468 		}
1469 		if(fileNamePrefix) g_free(fileNamePrefix);
1470 	}
1471 	else if(!strcmp(type,"AM1MopacEnergy"))
1472 	{
1473 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1474 		if(runOneMopac(fileNamePrefix, "AM1 1SCF"))
1475 		{
1476 		}
1477 		if(fileNamePrefix) g_free(fileNamePrefix);
1478 	}
1479 	else if(!strcmp(type,"AM1MopacOptimize"))
1480 	{
1481 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1482 		if(runOneMopac(fileNamePrefix, "AM1 XYZ AUX"))
1483 		{
1484 			gchar* fileOut = g_strdup_printf("%sOne.aux",fileNamePrefix);
1485 			find_energy_mopac_aux(fileOut);
1486 			if(fileOut) g_free(fileOut);
1487 		}
1488 		if(fileNamePrefix) g_free(fileNamePrefix);
1489 	}
1490 	else if(!strcmp(type,"AM1MopacESP"))
1491 	{
1492 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1493 		if(runOneMopac(fileNamePrefix, "AM1 1SCF ESP"))
1494 		{
1495 			gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix);
1496 			read_geom_from_mopac_output_file(fileOut, -1);
1497 			if(fileOut) g_free(fileOut);
1498 		}
1499 		if(fileNamePrefix) g_free(fileNamePrefix);
1500 	}
1501 	else if(!strcmp(type,"MopacEnergy") && keys)
1502 	{
1503 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1504 		if(runOneMopac(fileNamePrefix, keys))
1505 		{
1506 		}
1507 		if(fileNamePrefix) g_free(fileNamePrefix);
1508 	}
1509 	else if(!strcmp(type,"MopacOptimize") && keys)
1510 	{
1511 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1512 		if(runOneMopac(fileNamePrefix, keys))
1513 		{
1514 			gchar* fileOut = g_strdup_printf("%sOne.aux",fileNamePrefix);
1515 			find_energy_mopac_aux(fileOut);
1516 			if(fileOut) g_free(fileOut);
1517 		}
1518 		if(fileNamePrefix) g_free(fileNamePrefix);
1519 	}
1520         else if(!strcmp(type,"MopacOptimizeSparkle") && keys)
1521 	{
1522 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1523 		if(runOneMopac(fileNamePrefix, keys))
1524 		{
1525 			gchar* fileOut = g_strdup_printf("%sOne.aux",fileNamePrefix);
1526 			find_energy_mopac_aux(fileOut);
1527 			if(fileOut) g_free(fileOut);
1528 		}
1529 		if(fileNamePrefix) g_free(fileNamePrefix);
1530 	}
1531 	else if(!strcmp(type,"MopacESP") && keys)
1532 	{
1533 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1534 		if(runOneMopac(fileNamePrefix, keys))
1535 		{
1536 			gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix);
1537 			read_geom_from_mopac_output_file(fileOut, -1);
1538 			if(fileOut) g_free(fileOut);
1539 		}
1540 		if(fileNamePrefix) g_free(fileNamePrefix);
1541 	}
1542 	else if(!strcmp(type,"MopacScan") && keys)
1543 	{
1544 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1545 		if(runOneMopac(fileNamePrefix, keys))
1546 		{
1547 			gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix);
1548 			find_energy_mopac_scan_output(fileOut);
1549 			if(fileOut) g_free(fileOut);
1550 		}
1551 		if(fileNamePrefix) g_free(fileNamePrefix);
1552 	}
1553 	else if(!strcmp(type,"OrcaEnergy") && keys)
1554 	{
1555 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1556 		if(runOneOrca(fileNamePrefix, keys))
1557 		{
1558 		}
1559 		if(fileNamePrefix) g_free(fileNamePrefix);
1560 	}
1561 	else if(!strcmp(type,"OrcaOptimize") && keys)
1562 	{
1563 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1564 		if(runOneOrca(fileNamePrefix, keys))
1565 		{
1566 			gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix);
1567 			find_energy_orca_output(fileOut);
1568 			if(fileOut) g_free(fileOut);
1569 		}
1570 		if(fileNamePrefix) g_free(fileNamePrefix);
1571 	}
1572 	else if(!strcmp(type,"AM1FireFlyEnergy"))
1573 	{
1574 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1575 		if(runOneFireFly(fileNamePrefix, "RUNTYP=Energy GBASIS=AM1"))
1576 		{
1577 		}
1578 		if(fileNamePrefix) g_free(fileNamePrefix);
1579 	}
1580 	else if(!strcmp(type,"AM1FireFlyOptimize"))
1581 	{
1582 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1583 		if(runOneFireFly(fileNamePrefix, "RUNTYP=Optimize GBASIS=AM1"))
1584 		{
1585 			gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix);
1586 			find_energy_gamess_output_heat(fileOut);
1587 			if(fileOut) g_free(fileOut);
1588 		}
1589 		if(fileNamePrefix) g_free(fileNamePrefix);
1590 	}
1591 	else if(!strcmp(type,"OpenBabelEnergy"))
1592 	{
1593 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1594 		printf("Keys = %s\n",keys);
1595 		if(runOneOpenBabel(NULL,fileNamePrefix,keys))
1596 		{
1597 		}
1598 		if(fileNamePrefix) g_free(fileNamePrefix);
1599 	}
1600 	else if(!strcmp(type,"OpenBabelOptimize"))
1601 	{
1602 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1603 		if(runOneOpenBabel(NULL,fileNamePrefix, keys))
1604 		{
1605 			gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix);
1606 			find_energy_gamess_output_heat(fileOut);
1607 			if(fileOut) g_free(fileOut);
1608 		}
1609 		if(fileNamePrefix) g_free(fileNamePrefix);
1610 	}
1611 	else if(!strcmp(type,"GenericEnergy"))
1612 	{
1613 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1614 		printf("Keys = %s\n",keys);
1615 		if(runOneGeneric(NULL,fileNamePrefix,"Energy",keys))
1616 		{
1617 		}
1618 		if(fileNamePrefix) g_free(fileNamePrefix);
1619 	}
1620 	else if(!strcmp(type,"GenericOptimize"))
1621 	{
1622 		gchar* fileNamePrefix = get_suffix_name_file(fileName);
1623 		printf("Keys = %s\n",keys);
1624 		if(runOneGeneric(NULL,fileNamePrefix, "Opt",keys))
1625 		{
1626 			gchar* fileOut = g_strdup_printf("%sOne.out",fileNamePrefix);
1627 			find_energy_gamess_output_heat(fileOut);
1628 			if(fileOut) g_free(fileOut);
1629 		}
1630 		if(fileNamePrefix) g_free(fileNamePrefix);
1631 	}
1632 }
1633 /*****************************************************************************/
runAM1FireFlyEnergy(GtkWidget * Win,gpointer data)1634 static void runAM1FireFlyEnergy(GtkWidget* Win, gpointer data)
1635 {
1636 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1637 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1638 	TotalCharges[0] = totalCharge;
1639 	SpinMultiplicities[0] = spinMultiplicity;
1640 	runSemiEmpirical(Win, data, "AM1FireFlyEnergy",NULL);
1641 }
1642 /*****************************************************************************/
runAM1FireFlyOptimize(GtkWidget * Win,gpointer data)1643 static void runAM1FireFlyOptimize(GtkWidget* Win, gpointer data)
1644 {
1645 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1646 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1647 	TotalCharges[0] = totalCharge;
1648 	SpinMultiplicities[0] = spinMultiplicity;
1649 	runSemiEmpirical(Win, data, "AM1FireFlyOptimize",NULL);
1650 }
1651 /*****************************************************************************/
runOpenBabelEnergy(GtkWidget * Win,gpointer data)1652 static void runOpenBabelEnergy(GtkWidget* Win, gpointer data)
1653 {
1654 	G_CONST_RETURN gchar* potential = gtk_entry_get_text(GTK_ENTRY(entryOpenBabelPotential));
1655 	G_CONST_RETURN gchar* options   = gtk_entry_get_text(GTK_ENTRY(entryAddOpenBabelKeywords));
1656 	gchar* keys = NULL;
1657 	/*
1658 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1659 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1660 	TotalCharges[0] = totalCharge;
1661 	SpinMultiplicities[0] = spinMultiplicity;
1662 	*/
1663 	TotalCharges[0] = 0;
1664 	SpinMultiplicities[0] = 1;
1665 	if(potential && (options && strlen(options) >1) ) keys = g_strdup_printf("obgradient -ff %s %s",potential, options);
1666 	else if(potential) keys = g_strdup_printf("obgradient -ff %s",potential);
1667 	else keys = g_strdup_printf("obgradient -ff MMFF94");
1668 
1669 	runSemiEmpirical(Win, data, "OpenBabelEnergy",keys);
1670 	if(keys) g_free(keys);
1671 }
1672 /*****************************************************************************/
runOpenBabelOptimize(GtkWidget * Win,gpointer data)1673 static void runOpenBabelOptimize(GtkWidget* Win, gpointer data)
1674 {
1675 	G_CONST_RETURN gchar* potential = gtk_entry_get_text(GTK_ENTRY(entryOpenBabelPotential));
1676 	G_CONST_RETURN gchar* options   = gtk_entry_get_text(GTK_ENTRY(entryAddOpenBabelKeywords));
1677 	gchar* keys = NULL;
1678 	/*
1679 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1680 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1681 	TotalCharges[0] = totalCharge;
1682 	SpinMultiplicities[0] = spinMultiplicity;
1683 	*/
1684 	TotalCharges[0] = 0;
1685 	SpinMultiplicities[0] = 1;
1686 	if(potential && (options && strlen(options) >1) ) keys = g_strdup_printf("obopt -ff %s %s",potential, options);
1687 	else if(potential) keys = g_strdup_printf("obopt -ff %s",potential);
1688 	else keys = g_strdup_printf("obopt -ff MMFF94");
1689 	runSemiEmpirical(Win, data, "OpenBabelOptimize",keys);
1690 	if(keys) g_free(keys);
1691 }
1692 /*****************************************************************************/
runGenericEnergy(GtkWidget * Win,gpointer data)1693 static void runGenericEnergy(GtkWidget* Win, gpointer data)
1694 {
1695 	G_CONST_RETURN gchar* potential = gtk_entry_get_text(GTK_ENTRY(entryGenericPotential));
1696 	gchar* keys = NULL;
1697 	/*
1698 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1699 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1700 	TotalCharges[0] = totalCharge;
1701 	SpinMultiplicities[0] = spinMultiplicity;
1702 	*/
1703 	TotalCharges[0] = 0;
1704 	SpinMultiplicities[0] = 1;
1705 	if(potential) keys = g_strdup_printf("%s",potential);
1706 	else keys = g_strdup_printf("generic");
1707 
1708 	if(genericProgName) g_free(genericProgName);
1709 	genericProgName = g_strdup(keys);
1710 	runSemiEmpirical(Win, data, "GenericEnergy",keys);
1711 	if(keys) g_free(keys);
1712 }
1713 /*****************************************************************************/
runGenericOptimize(GtkWidget * Win,gpointer data)1714 static void runGenericOptimize(GtkWidget* Win, gpointer data)
1715 {
1716 	G_CONST_RETURN gchar* potential = gtk_entry_get_text(GTK_ENTRY(entryGenericPotential));
1717 	gchar* keys = NULL;
1718 	/*
1719 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1720 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1721 	TotalCharges[0] = totalCharge;
1722 	SpinMultiplicities[0] = spinMultiplicity;
1723 	*/
1724 	TotalCharges[0] = 0;
1725 	SpinMultiplicities[0] = 1;
1726 	if(potential) keys = g_strdup_printf("%s",potential);
1727 	else keys = g_strdup_printf("generic");
1728 	runSemiEmpirical(Win, data, "GenericOptimize",keys);
1729 	if(keys) g_free(keys);
1730 }
1731 /*****************************************************************************/
runPM6DH2MopacEnergy(GtkWidget * Win,gpointer data)1732 static void runPM6DH2MopacEnergy(GtkWidget* Win, gpointer data)
1733 {
1734 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1735 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1736 	TotalCharges[0] = totalCharge;
1737 	SpinMultiplicities[0] = spinMultiplicity;
1738 	runSemiEmpirical(Win, data, "PM6DH2MopacEnergy",NULL);
1739 }
1740 /*****************************************************************************/
runPM6DH2MopacOptimize(GtkWidget * Win,gpointer data)1741 static void runPM6DH2MopacOptimize(GtkWidget* Win, gpointer data)
1742 {
1743 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1744 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1745 	TotalCharges[0] = totalCharge;
1746 	SpinMultiplicities[0] = spinMultiplicity;
1747 	runSemiEmpirical(Win, data, "PM6DH2MopacOptimize",NULL);
1748 }
1749 /*****************************************************************************/
runPM6DH2MopacESP(GtkWidget * Win,gpointer data)1750 static void runPM6DH2MopacESP(GtkWidget* Win, gpointer data)
1751 {
1752 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1753 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1754 	TotalCharges[0] = totalCharge;
1755 	SpinMultiplicities[0] = spinMultiplicity;
1756 	runSemiEmpirical(Win, data, "PM6DH2MopacESP",NULL);
1757 }
1758 /*****************************************************************************/
runPM6DHpMopacEnergy(GtkWidget * Win,gpointer data)1759 static void runPM6DHpMopacEnergy(GtkWidget* Win, gpointer data)
1760 {
1761 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1762 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1763 	TotalCharges[0] = totalCharge;
1764 	SpinMultiplicities[0] = spinMultiplicity;
1765 	runSemiEmpirical(Win, data, "PM6DH+MopacEnergy",NULL);
1766 }
1767 /*****************************************************************************/
runPM6DHpMopacOptimize(GtkWidget * Win,gpointer data)1768 static void runPM6DHpMopacOptimize(GtkWidget* Win, gpointer data)
1769 {
1770 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1771 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1772 	TotalCharges[0] = totalCharge;
1773 	SpinMultiplicities[0] = spinMultiplicity;
1774 	runSemiEmpirical(Win, data, "PM6DH+MopacOptimize",NULL);
1775 }
1776 /*****************************************************************************/
runPM6DHpMopacESP(GtkWidget * Win,gpointer data)1777 static void runPM6DHpMopacESP(GtkWidget* Win, gpointer data)
1778 {
1779 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1780 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1781 	TotalCharges[0] = totalCharge;
1782 	SpinMultiplicities[0] = spinMultiplicity;
1783 	runSemiEmpirical(Win, data, "PM6DH+MopacESP",NULL);
1784 }
1785 /*****************************************************************************/
runPM6MopacEnergy(GtkWidget * Win,gpointer data)1786 static void runPM6MopacEnergy(GtkWidget* Win, gpointer data)
1787 {
1788 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1789 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1790 	TotalCharges[0] = totalCharge;
1791 	SpinMultiplicities[0] = spinMultiplicity;
1792 	runSemiEmpirical(Win, data, "PM6MopacEnergy",NULL);
1793 }
1794 /*****************************************************************************/
runPM6MopacOptimize(GtkWidget * Win,gpointer data)1795 static void runPM6MopacOptimize(GtkWidget* Win, gpointer data)
1796 {
1797 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1798 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1799 	TotalCharges[0] = totalCharge;
1800 	SpinMultiplicities[0] = spinMultiplicity;
1801 	runSemiEmpirical(Win, data, "PM6MopacOptimize",NULL);
1802 }
1803 /*****************************************************************************/
runPM6MopacESP(GtkWidget * Win,gpointer data)1804 static void runPM6MopacESP(GtkWidget* Win, gpointer data)
1805 {
1806 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1807 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1808 	TotalCharges[0] = totalCharge;
1809 	SpinMultiplicities[0] = spinMultiplicity;
1810 	runSemiEmpirical(Win, data, "PM6MopacESP",NULL);
1811 }
1812 /*****************************************************************************/
runPM7MopacEnergy(GtkWidget * Win,gpointer data)1813 static void runPM7MopacEnergy(GtkWidget* Win, gpointer data)
1814 {
1815 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1816 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1817 	TotalCharges[0] = totalCharge;
1818 	SpinMultiplicities[0] = spinMultiplicity;
1819 	runSemiEmpirical(Win, data, "PM7MopacEnergy",NULL);
1820 }
1821 /*****************************************************************************/
runPM7MopacOptimize(GtkWidget * Win,gpointer data)1822 static void runPM7MopacOptimize(GtkWidget* Win, gpointer data)
1823 {
1824 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1825 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1826 	TotalCharges[0] = totalCharge;
1827 	SpinMultiplicities[0] = spinMultiplicity;
1828 	runSemiEmpirical(Win, data, "PM7MopacOptimize",NULL);
1829 }
1830 /*****************************************************************************/
runPM7MopacESP(GtkWidget * Win,gpointer data)1831 static void runPM7MopacESP(GtkWidget* Win, gpointer data)
1832 {
1833 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1834 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1835 	TotalCharges[0] = totalCharge;
1836 	SpinMultiplicities[0] = spinMultiplicity;
1837 	runSemiEmpirical(Win, data, "PM7MopacESP",NULL);
1838 }
1839 /*****************************************************************************/
runAM1MopacEnergy(GtkWidget * Win,gpointer data)1840 static void runAM1MopacEnergy(GtkWidget* Win, gpointer data)
1841 {
1842 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1843 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1844 	TotalCharges[0] = totalCharge;
1845 	SpinMultiplicities[0] = spinMultiplicity;
1846 	runSemiEmpirical(Win, data, "AM1MopacEnergy",NULL);
1847 }
1848 /*****************************************************************************/
runAM1MopacOptimize(GtkWidget * Win,gpointer data)1849 static void runAM1MopacOptimize(GtkWidget* Win, gpointer data)
1850 {
1851 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1852 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1853 	TotalCharges[0] = totalCharge;
1854 	SpinMultiplicities[0] = spinMultiplicity;
1855 	runSemiEmpirical(Win, data, "AM1MopacOptimize",NULL);
1856 }
1857 /*****************************************************************************/
runAM1MopacESP(GtkWidget * Win,gpointer data)1858 static void runAM1MopacESP(GtkWidget* Win, gpointer data)
1859 {
1860 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
1861 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
1862 	TotalCharges[0] = totalCharge;
1863 	SpinMultiplicities[0] = spinMultiplicity;
1864 	runSemiEmpirical(Win, data, "AM1MopacESP",NULL);
1865 }
1866 /*****************************************************************************/
getEnergyGeneric(char * fileNameOut,double * energy)1867 static gboolean getEnergyGeneric(char* fileNameOut, double* energy)
1868 {
1869 	FILE* file = NULL;
1870 	char buffer[1024];
1871 	int i;
1872  	file = fopen(fileNameOut, "r");
1873 	if(!file) return FALSE;
1874 	if(!fgets(buffer,BSIZE,file)) { fclose(file); return FALSE;}/* first line for energy in Hartree*/
1875 
1876 	for(i=0;i<strlen(buffer);i++) if(buffer[i]=='D' || buffer[i]=='d') buffer[i] ='E';
1877 	if(sscanf(buffer,"%lf",energy)==1)
1878 	{
1879 		fclose(file);
1880 		*energy *=AUTOKCAL;
1881 		return TRUE;
1882 	}
1883 	fclose(file);
1884 	return FALSE;
1885 }
1886 /*****************************************************************************/
runOneGeneric(MoleculeSE * mol,char * fileNamePrefix,char * keyWords,char * genericCommand)1887 static gboolean runOneGeneric(MoleculeSE* mol, char* fileNamePrefix, char* keyWords, char* genericCommand)
1888 {
1889 	FILE* file = NULL;
1890 	FILE* fileSH = NULL;
1891 	gchar* fileNameIn = NULL;
1892 	gchar* fileNameOut = NULL;
1893 	gchar* fileNameSH = NULL;
1894 	gchar multiplicityStr[100];
1895 	gchar buffer[1024];
1896 	gdouble energy = 0;
1897 	gint type = 0;
1898 	gboolean newMolSE = FALSE;
1899 	MoleculeSE molecule;
1900 #ifdef OS_WIN32
1901 	char c='%';
1902 #endif
1903 
1904 	if(!mol)
1905 	{
1906 		molecule = createMoleculeSE(geometry0,(gint)Natoms, totalCharge, spinMultiplicity, TRUE);
1907 		mol = &molecule;
1908 		newMolSE = TRUE;
1909 	}
1910 
1911 	if(!mol) return FALSE;
1912 	if(mol->nAtoms<1) return FALSE;
1913 #ifndef OS_WIN32
1914 	fileNameSH = g_strdup_printf("%sGenericOne.sh",fileNamePrefix);
1915 #else
1916 	fileNameSH = g_strdup_printf("%sGenericOne.bat",fileNamePrefix);
1917 #endif
1918  	fileSH = fopen(fileNameSH, "w");
1919 	if(!fileSH) return FALSE;
1920 #ifdef OS_WIN32
1921 	fprintf(fileSH,"@echo off\n");
1922 #endif
1923 
1924 	fileNameIn = g_strdup_printf("%sOne.inp",fileNamePrefix);
1925 	fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix);
1926 
1927  	file = fopen(fileNameIn, "w");
1928 	if(!file)
1929 	{
1930  		if(fileNameIn) free(fileNameIn);
1931  		if(fileNameOut) free(fileNameOut);
1932  		if(fileNameSH) free(fileNameSH);
1933 		return FALSE;
1934 	}
1935 	if(strstr(keyWords,"Opt")) type = 2;
1936 	if(strstr(keyWords,"ENGRAD")) type = 1;
1937 	fprintf(file,"%d\n",type);
1938 	addMoleculeSEToFile(mol,file);
1939 	fclose(file);
1940 	{
1941 		char* str = NULL;
1942 		if(type==2) str = g_strdup_printf("Minimization by Generic/%s ... Please wait",genericCommand);
1943 		else str = g_strdup_printf("Energy by Generic/%s ... Please wait",genericCommand);
1944 		/* printf("%s\n",str);*/
1945 		set_text_to_draw(str);
1946 		if(str) g_free(str);
1947 		drawGeom();
1948     		while( gtk_events_pending() ) gtk_main_iteration();
1949 	}
1950 #ifndef OS_WIN32
1951 	fprintf(fileSH,"%s %s %s",genericCommand,fileNameIn,fileNameOut);
1952 	fclose(fileSH);
1953 	sprintf(buffer,"chmod u+x %s",fileNameSH);
1954 	system(buffer);
1955 	system(fileNameSH);
1956 #else
1957 	fprintf(fileSH,"\"%s\" \"%s\" \"%s\"",genericCommand,fileNameIn,fileNameOut);
1958 	fclose(fileSH);
1959 	sprintf(buffer,"\"%s\"",fileNameSH);
1960 	system(buffer);
1961 #endif
1962 
1963 	if(getEnergyGeneric(fileNameOut,&energy))
1964 	{
1965 		gchar* str = NULL;
1966 		str = g_strdup_printf("Energy by %s = %f", genericCommand,energy);
1967 		/* printf("%s\n",str);*/
1968 		set_text_to_draw(str);
1969 		drawGeom();
1970     		while( gtk_events_pending() ) gtk_main_iteration();
1971 		if(str) g_free(str);
1972 		if(strstr(keyWords,"Opt"))
1973 		{
1974 			gchar* str = g_strdup_printf("%s.gab",fileNamePrefix);
1975 			readGeometryFromGenericOutputFile(mol,fileNameOut);
1976 			saveGeometry(mol, energy, str);
1977 			read_geom_from_gabedit_geom_conv_file(str, 1);
1978 			if(str) g_free(str);
1979 			/* str = g_strdup_printf("Energy by OpenBabel = %f", energy);*/
1980 			str = g_strdup_printf("Energy by %s = %f", genericCommand,energy);
1981 			set_text_to_draw(str);
1982 			drawGeom();
1983     			while( gtk_events_pending() ) gtk_main_iteration();
1984 			Waiting(1);
1985 		}
1986 	}
1987 	else
1988 	{
1989 		gchar* str = NULL;
1990 		str = g_strdup_printf(
1991 				(
1992 				"Sorry, I cannot read the output file : %s "
1993 				" ; Check also the installation of Generic..."
1994 				),
1995 				fileNameOut
1996 				);
1997 		/* printf(str);*/
1998 		set_text_to_draw(str);
1999 		drawGeom();
2000     		while( gtk_events_pending() ) gtk_main_iteration();
2001 		if(str) g_free(str);
2002  		if(fileNameIn) free(fileNameIn);
2003  		if(fileNameOut) free(fileNameOut);
2004  		if(fileNameSH) free(fileNameSH);
2005 		if(mol && newMolSE) freeMoleculeSE(mol);
2006 		return FALSE;
2007 	}
2008 
2009  	if(fileNameIn) free(fileNameIn);
2010  	if(fileNameOut) free(fileNameOut);
2011  	if(fileNameSH) free(fileNameSH);
2012 	if(mol && newMolSE) freeMoleculeSE(mol);
2013 	return TRUE;
2014 }
2015 /*****************************************************************************/
runMopacEnergy(GtkWidget * Win,gpointer data)2016 static void runMopacEnergy(GtkWidget* Win, gpointer data)
2017 {
2018 
2019 	G_CONST_RETURN gchar* model = gtk_entry_get_text(GTK_ENTRY(entryMopacHamiltonian));
2020 	G_CONST_RETURN gchar* addKeys = gtk_entry_get_text(GTK_ENTRY(entryAddMopacKeywords));
2021 	gchar* keys = g_strdup_printf("%s 1SCF %s",model,addKeys);
2022 	/* printf("addKeys = %s\n",addKeys);*/
2023 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
2024 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
2025 	TotalCharges[0] = totalCharge;
2026 	SpinMultiplicities[0] = spinMultiplicity;
2027 	runSemiEmpirical(Win, data, "MopacEnergy", keys);
2028 	if(keys) g_free(keys);
2029 }
2030 /*****************************************************************************/
runMopacOptimize(GtkWidget * Win,gpointer data)2031 static void runMopacOptimize(GtkWidget* Win, gpointer data)
2032 {
2033 	G_CONST_RETURN gchar* model = gtk_entry_get_text(GTK_ENTRY(entryMopacHamiltonian));
2034 	G_CONST_RETURN gchar* addKeys = gtk_entry_get_text(GTK_ENTRY(entryAddMopacKeywords));
2035 	gchar* keys = g_strdup_printf("%s XYZ AUX %s",model,addKeys);
2036 	/* printf("addKeys = %s\n",addKeys);*/
2037 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
2038 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
2039 	TotalCharges[0] = totalCharge;
2040 	SpinMultiplicities[0] = spinMultiplicity;
2041 	runSemiEmpirical(Win, data, "MopacOptimize",keys);
2042 	if(keys) g_free(keys);
2043 }
2044 /*****************************************************************************/
runMopacOptimizeSparkle(GtkWidget * Win,gpointer data)2045 static void runMopacOptimizeSparkle(GtkWidget* Win, gpointer data)
2046 {
2047 	G_CONST_RETURN gchar* model = gtk_entry_get_text(GTK_ENTRY(entryMopacHamiltonianSparkle));
2048 	G_CONST_RETURN gchar* addKeys = gtk_entry_get_text(GTK_ENTRY(entryAddMopacKeywords));
2049 	gchar* keys = g_strdup_printf("%s SPARKLE XYZ AUX %s",model,addKeys);
2050 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
2051 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
2052 	TotalCharges[0] = totalCharge;
2053 	SpinMultiplicities[0] = spinMultiplicity;
2054 	runSemiEmpirical(Win, data, "MopacOptimizeSparkle",keys);
2055 	if(keys) g_free(keys);
2056 }
2057 /*****************************************************************************/
runMopacESP(GtkWidget * Win,gpointer data)2058 static void runMopacESP(GtkWidget* Win, gpointer data)
2059 {
2060 	G_CONST_RETURN gchar* model = gtk_entry_get_text(GTK_ENTRY(entryMopacHamiltonian));
2061 	G_CONST_RETURN gchar* addKeys = gtk_entry_get_text(GTK_ENTRY(entryAddMopacKeywords));
2062 	gchar* keys = g_strdup_printf("%s ESP %s",model,addKeys);
2063 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
2064 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
2065 	TotalCharges[0] = totalCharge;
2066 	SpinMultiplicities[0] = spinMultiplicity;
2067 	runSemiEmpirical(Win, data, "MopacESP",keys);
2068 	if(keys) g_free(keys);
2069 }
2070 /*****************************************************************************/
runMopacScan(GtkWidget * Win,gpointer data)2071 static void runMopacScan(GtkWidget* Win, gpointer data)
2072 {
2073 	G_CONST_RETURN gchar* model = gtk_entry_get_text(GTK_ENTRY(entryMopacHamiltonian));
2074 	G_CONST_RETURN gchar* addKeys = gtk_entry_get_text(GTK_ENTRY(entryAddMopacKeywords));
2075 	gchar buffer[BSIZE];
2076 	gchar* keys = NULL;
2077 	sprintf(buffer,"STEP=%g POINT=%d ",stepValueRP[0],numberOfPointsRP[0]);
2078 	if(strcmp(typeRP[1],"Nothing"))
2079 		sprintf(buffer,"STEP1=%g POINT1=%d STEP2=%g POINT2=%d",
2080 				stepValueRP[0],numberOfPointsRP[0],
2081 				stepValueRP[1],numberOfPointsRP[1]
2082 				);
2083 	keys = g_strdup_printf("%s 1SCF %s %s",model,buffer,addKeys);
2084 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
2085 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
2086 	TotalCharges[0] = totalCharge;
2087 	SpinMultiplicities[0] = spinMultiplicity;
2088 	runSemiEmpirical(Win, data, "MopacScan",keys);
2089 	if(keys) g_free(keys);
2090 }
2091 /*****************************************************************************/
runOrcaEnergy(GtkWidget * Win,gpointer data)2092 static void runOrcaEnergy(GtkWidget* Win, gpointer data)
2093 {
2094 
2095 	G_CONST_RETURN gchar* model = gtk_entry_get_text(GTK_ENTRY(entryOrcaHamiltonian));
2096 	G_CONST_RETURN gchar* addKeys = gtk_entry_get_text(GTK_ENTRY(entryAddOrcaKeywords));
2097 	gchar* keys = g_strdup_printf("%s %s",model,addKeys);
2098 	/* printf("addKeys = %s\n",addKeys);*/
2099 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
2100 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
2101 	TotalCharges[0] = totalCharge;
2102 	SpinMultiplicities[0] = spinMultiplicity;
2103 	runSemiEmpirical(Win, data, "OrcaEnergy", keys);
2104 	if(keys) g_free(keys);
2105 }
2106 /*****************************************************************************/
runOrcaOptimize(GtkWidget * Win,gpointer data)2107 static void runOrcaOptimize(GtkWidget* Win, gpointer data)
2108 {
2109 	G_CONST_RETURN gchar* model = gtk_entry_get_text(GTK_ENTRY(entryOrcaHamiltonian));
2110 	G_CONST_RETURN gchar* addKeys = gtk_entry_get_text(GTK_ENTRY(entryAddOrcaKeywords));
2111 	gchar* keys = g_strdup_printf("%s Opt %s",model,addKeys);
2112 	/* printf("addKeys = %s\n",addKeys);*/
2113 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
2114 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
2115 	TotalCharges[0] = totalCharge;
2116 	SpinMultiplicities[0] = spinMultiplicity;
2117 	runSemiEmpirical(Win, data, "OrcaOptimize",keys);
2118 	if(keys) g_free(keys);
2119 }
2120 /********************************************************************************/
setSpinMultiplicityComboSpinMultiplicity(GtkWidget * comboSpinMultiplicity,gint spin)2121 static void setSpinMultiplicityComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity, gint spin)
2122 {
2123 	GtkWidget *entry = NULL;
2124 	gchar* t = NULL;
2125 	if(!comboSpinMultiplicity) return;
2126 	entry = GTK_BIN (comboSpinMultiplicity)->child;
2127 	t = g_strdup_printf("%d",spin);
2128 	gtk_entry_set_text(GTK_ENTRY(entry),t);
2129 	g_free(t);
2130 }
2131 /********************************************************************************/
setComboSpinMultiplicity(GtkWidget * comboSpinMultiplicity)2132 static void setComboSpinMultiplicity(GtkWidget *comboSpinMultiplicity)
2133 {
2134 	GList *glist = NULL;
2135 	gint i;
2136 	gint nlist = 0;
2137 	gchar** list = NULL;
2138 	gint k;
2139 	gint kinc;
2140 	gint ne = get_number_electrons(0) - totalCharge;
2141 
2142 	if(ne%2==0) nlist = ne/2+1;
2143 	else nlist = (ne+1)/2;
2144 
2145 	if(nlist<1) return;
2146 	list = g_malloc(nlist*sizeof(gchar*));
2147 	if(!list) return;
2148 	for(i=0;i<nlist;i++)
2149 		list[i] = g_malloc(10*sizeof(gchar));
2150 
2151 
2152 	if(GTK_IS_WIDGET(comboSpinMultiplicity)) gtk_widget_set_sensitive(comboSpinMultiplicity, TRUE);
2153 	if(ne%2==0) k = 1;
2154 	else k = 2;
2155 
2156 	kinc = 2;
2157 	for(i=0;i<nlist;i++)
2158 	{
2159 		sprintf(list[i],"%d",k);
2160 		k+=kinc;
2161 	}
2162 
2163   	//for(i=nlist-1;i>=0;i--) glist = g_list_append(glist,list[i]);
2164   	for(i=0;i<nlist;i++) glist = g_list_append(glist,list[i]);
2165 
2166   	gtk_combo_box_entry_set_popdown_strings( comboSpinMultiplicity, glist) ;
2167 	gtk_combo_box_set_active(GTK_COMBO_BOX(comboSpinMultiplicity), nlist-1);
2168   	g_list_free(glist);
2169 	SpinMultiplicities[0] = atoi(list[0]);
2170 	if( SpinMultiplicities[0]%2 == atoi(list[0])%2) setSpinMultiplicityComboSpinMultiplicity(comboSpinMultiplicity, SpinMultiplicities[0]);
2171 
2172 	if(list)
2173 	{
2174 		for(i=0;i<nlist;i++) if(list[i]) g_free(list[i]);
2175 		g_free(list);
2176 	}
2177 }
2178 /********************************************************************************/
setChargeComboCharge(GtkWidget * comboCharge,gint charge)2179 static void setChargeComboCharge(GtkWidget *comboCharge, gint charge)
2180 {
2181 	GtkWidget *entry = NULL;
2182 	gchar* t = NULL;
2183 	if(!comboCharge) return;
2184 	entry = GTK_BIN (comboCharge)->child;
2185 	t = g_strdup_printf("%d",charge);
2186 	gtk_entry_set_text(GTK_ENTRY(entry),t);
2187 	g_free(t);
2188 }
2189 /********************************************************************************/
setComboCharge(GtkWidget * comboCharge)2190 static void setComboCharge(GtkWidget *comboCharge)
2191 {
2192 	GList *glist = NULL;
2193 	gint i;
2194 	gint nlist;
2195 	gchar** list = NULL;
2196 	gint k;
2197 	gint c = (gint)(0.5+get_sum_charges());
2198 	gint ic = 0;
2199 
2200 	nlist = get_number_electrons(0)*2-2+1;
2201 
2202 	if(nlist<1) return;
2203 	list = g_malloc(nlist*sizeof(gchar*));
2204 	if(!list) return;
2205 	for(i=0;i<nlist;i++)
2206 		list[i] = g_malloc(10*sizeof(gchar));
2207 
2208 
2209 	sprintf(list[0],"0");
2210 	k = 1;
2211 	ic = 0;
2212 	/* printf("c=%d fc = %f\n",c,get_sum_charges());*/
2213 	for(i=1;i<nlist-1;i+=2)
2214 	{
2215 		sprintf(list[i],"+%d",k);
2216 		sprintf(list[i+1],"%d",-k);
2217 		if(c==k) ic = i;
2218 		if(c==-k) ic = i+1;
2219 		k += 1;
2220 	}
2221 
2222   	//for(i=nlist-1;i>=0;i--) glist = g_list_append(glist,list[i]);
2223   	for(i=0;i<nlist;i++) glist = g_list_append(glist,list[i]);
2224 
2225   	gtk_combo_box_entry_set_popdown_strings( comboCharge, glist) ;
2226 	gtk_combo_box_set_active(GTK_COMBO_BOX(comboCharge), nlist-ic-1);
2227 	totalCharge = atoi(list[ic]);
2228   	g_list_free(glist);
2229 	if(list)
2230 	{
2231 		for(i=0;i<nlist;i++) if(list[i]) g_free(list[i]);
2232 		g_free(list);
2233 	}
2234 	totalCharge = TotalCharges[0];
2235 	setChargeComboCharge(comboCharge, TotalCharges[0]);
2236 }
2237 /**********************************************************************/
changedEntryCharge(GtkWidget * entry,gpointer data)2238 static void changedEntryCharge(GtkWidget *entry, gpointer data)
2239 {
2240 	G_CONST_RETURN gchar* entryText = NULL;
2241 	GtkWidget* comboSpinMultiplicity = NULL;
2242 
2243 	if(!GTK_IS_WIDGET(entry)) return;
2244 
2245 	entryText = gtk_entry_get_text(GTK_ENTRY(entry));
2246 	if(strlen(entryText)<1)return;
2247 
2248 	totalCharge = atoi(entryText);
2249 
2250 	comboSpinMultiplicity  = g_object_get_data(G_OBJECT (entry), "ComboSpinMultiplicity");
2251 	if(GTK_IS_WIDGET(comboSpinMultiplicity)) setComboSpinMultiplicity(comboSpinMultiplicity);
2252 
2253 
2254 }
2255 /**********************************************************************/
addComboListToATable(GtkWidget * table,gchar ** list,gint nlist,gint i,gint j,gint k)2256 static GtkWidget* addComboListToATable(GtkWidget* table,
2257 		gchar** list, gint nlist, gint i, gint j, gint k)
2258 {
2259 	GtkWidget *entry = NULL;
2260 	GtkWidget *combo = NULL;
2261 
2262 	combo = create_combo_box_entry(list, nlist, TRUE, -1, -1);
2263 
2264 	gtk_table_attach(GTK_TABLE(table),combo,j,j+k,i,i+1,
2265 		(GtkAttachOptions)	(GTK_FILL | GTK_EXPAND),
2266 		(GtkAttachOptions)	(GTK_FILL | GTK_SHRINK),
2267                   2,2);
2268 	entry = GTK_BIN (combo)->child;
2269 	g_object_set_data(G_OBJECT (entry), "Combo",combo);
2270 	gtk_widget_set_size_request(GTK_WIDGET(entry),(gint)(ScreenHeight*0.1),-1);
2271 
2272 	return entry;
2273 }
2274 /**********************************************************************/
addChargeOfMoleculeToTable(GtkWidget * table,gint i)2275 static GtkWidget *addChargeOfMoleculeToTable(GtkWidget *table, gint i)
2276 {
2277 	GtkWidget* entryCharge = NULL;
2278 	GtkWidget* comboCharge = NULL;
2279 	gint nlistCharge = 1;
2280 	gchar* listCharge[] = {"0"};
2281 
2282 	add_label_table(table,_("Charge"),(gushort)i,0);
2283 	add_label_table(table,":",(gushort)i,1);
2284 	entryCharge = addComboListToATable(table, listCharge, nlistCharge, i, 2, 1);
2285 	comboCharge  = g_object_get_data(G_OBJECT (entryCharge), "Combo");
2286 	gtk_widget_set_sensitive(entryCharge, FALSE);
2287 
2288 
2289 	return comboCharge;
2290 }
2291 /**********************************************************************/
addSpinOfMoleculeToTable(GtkWidget * table,gint i)2292 static GtkWidget *addSpinOfMoleculeToTable(GtkWidget *table, gint i)
2293 {
2294 	GtkWidget* entrySpinMultiplicity = NULL;
2295 	GtkWidget* comboSpinMultiplicity = NULL;
2296 	gint nlistspinMultiplicity = 1;
2297 	gchar* listspinMultiplicity[] = {"0"};
2298 
2299 	add_label_table(table,_("Spin multiplicity"),(gushort)i,0);
2300 	add_label_table(table,":",(gushort)i,1);
2301 	entrySpinMultiplicity = addComboListToATable(table, listspinMultiplicity, nlistspinMultiplicity, i, 2, 1);
2302 	comboSpinMultiplicity  = g_object_get_data(G_OBJECT (entrySpinMultiplicity), "Combo");
2303 	gtk_widget_set_sensitive(entrySpinMultiplicity, FALSE);
2304 
2305 	return comboSpinMultiplicity;
2306 }
2307 /**********************************************************************/
addChargeSpin(GtkWidget * box)2308 static void addChargeSpin(GtkWidget *box)
2309 {
2310 	GtkWidget* frame;
2311 	GtkWidget* vboxFrame;
2312 	GtkWidget* comboSpinMultiplicity = NULL;
2313 	GtkWidget* comboCharge = NULL;
2314 	GtkWidget *table = NULL;
2315 	gint i;
2316 
2317 	totalCharge = TotalCharges[0];
2318 	spinMultiplicity=SpinMultiplicities[0];
2319 
2320 	table = gtk_table_new(2,5,FALSE);
2321 
2322 	frame = gtk_frame_new (_("Charge & Multiplicity"));
2323 	gtk_widget_show (frame);
2324 	gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3);
2325 	gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5);
2326 
2327 	vboxFrame = gtk_vbox_new (FALSE, 3);
2328 	gtk_widget_show (vboxFrame);
2329 	gtk_container_add (GTK_CONTAINER (frame), vboxFrame);
2330 	gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0);
2331 /*----------------------------------------------------------------------------------*/
2332 	i = 0;
2333 	comboCharge = addChargeOfMoleculeToTable(table, i);
2334 /*----------------------------------------------------------------------------------*/
2335 	i = 1;
2336 	comboSpinMultiplicity = addSpinOfMoleculeToTable(table, i);
2337 /*----------------------------------------------------------------------------------*/
2338 
2339 	if(GTK_IS_COMBO_BOX(comboCharge))
2340 		g_object_set_data(G_OBJECT (GTK_BIN(comboCharge)->child), "ComboSpinMultiplicity", comboSpinMultiplicity);
2341 	setComboCharge(comboCharge);
2342 	setComboSpinMultiplicity(comboSpinMultiplicity);
2343 	entryCharge = GTK_WIDGET(GTK_BIN(comboCharge)->child);
2344 	entrySpinMultiplicity = GTK_WIDGET(GTK_BIN(comboSpinMultiplicity)->child);
2345 	g_signal_connect(G_OBJECT(entryCharge),"changed", G_CALLBACK(changedEntryCharge),NULL);
2346 }
2347 /************************************************************************************************************/
setComboReactionPathVariableType(GtkWidget * comboReactionPathVariableType,gboolean nothing)2348 static void setComboReactionPathVariableType(GtkWidget *comboReactionPathVariableType, gboolean nothing)
2349 {
2350 	GList *glist = NULL;
2351 	gint i;
2352 	gchar* listXYZ[] = {"Nothing","X","Y","Z"};
2353 	gchar* listZMatrix[] = {"Nothing","Bond","Angle","Dihedral"};
2354 	gchar** list = NULL;
2355 	gint iBegin = 0;
2356 	gint iEnd = 3;
2357 
2358 	if(!nothing) iBegin = 1;
2359 	if(MethodeGeom==GEOM_IS_XYZ) list = listXYZ;
2360 	else list = listZMatrix;
2361 
2362 	if(MethodeGeom!=GEOM_IS_XYZ)
2363 	{
2364 		if(NcentersZmat<=2) iEnd-=2;
2365 		else if(NcentersZmat<=3) iEnd--;
2366 	}
2367 
2368   	for(i=iBegin;i<=iEnd;i++) glist = g_list_append(glist,list[i]);
2369 
2370   	gtk_combo_box_entry_set_popdown_strings( comboReactionPathVariableType, glist) ;
2371   	g_list_free(glist);
2372 }
2373 /********************************************************************************/
setComboReactionPathAtoms(GtkWidget * comboReactionPathAtoms)2374 static void setComboReactionPathAtoms(GtkWidget *comboReactionPathAtoms)
2375 {
2376 	GList *glist = NULL;
2377 	gint i;
2378 	gint nlist;
2379 	gchar** list = NULL;
2380 	GtkWidget* entry = NULL;
2381 	gchar* typeRP   = NULL;
2382 	gint iEnd;
2383 
2384 	if(!comboReactionPathAtoms) return;
2385 	entry = GTK_BIN (comboReactionPathAtoms)->child;
2386 	if(!entry) return;
2387 	typeRP   = g_object_get_data(G_OBJECT (entry), "TypeRP");
2388 	if(!typeRP) return;
2389 
2390 	nlist = NcentersXYZ;
2391 	if(MethodeGeom!=GEOM_IS_XYZ) nlist = NcentersZmat;
2392 	iEnd = nlist-1;
2393 	if(nlist<1) return;
2394 
2395 	list = g_malloc(nlist*sizeof(gchar*));
2396 	if(!list) return;
2397 	for(i=0;i<nlist;i++) list[i] = NULL;
2398 	if(!strcmp(typeRP,"X") || !strcmp(typeRP,"Y") || !strcmp(typeRP,"Z"))
2399 	{
2400 		iEnd = nlist-1;
2401 		for(i=0;i<=iEnd;i++)
2402 			list[i] = g_strdup_printf("%d",i+1);
2403 	}
2404 	else if(!strcmp(typeRP,"Bond"))
2405 	{
2406 		iEnd = nlist-2;
2407 		for(i=0;i<=iEnd;i++)
2408 		{
2409 			gint a = i+1;
2410 			gint b = atoi(Geom[a].NR)-1;
2411 			list[i] = g_strdup_printf("%d [%s%d-%s%d]",a+1,Geom[a].Symb,a+1,Geom[b].Symb,b+1);
2412 		}
2413 	}
2414 	else if(!strcmp(typeRP,"Angle"))
2415 	{
2416 		iEnd = nlist-3;
2417 		for(i=0;i<=iEnd;i++)
2418 		{
2419 			gint a = i+2;
2420 			gint b = atoi(Geom[a].NR)-1;
2421 			gint c = atoi(Geom[a].NAngle)-1;
2422 			list[i] = g_strdup_printf("%d [%s%d-%s%d-%s%d]",a+1,
2423 					Geom[a].Symb,a+1,
2424 					Geom[b].Symb,b+1,
2425 					Geom[c].Symb,c+1);
2426 		}
2427 	}
2428 	else if(!strcmp(typeRP,"Dihedral"))
2429 	{
2430 		iEnd = nlist-4;
2431 		for(i=0;i<=iEnd;i++)
2432 		{
2433 			gint a = i+3;
2434 			gint b = atoi(Geom[a].NR)-1;
2435 			gint c = atoi(Geom[a].NAngle)-1;
2436 			gint d = atoi(Geom[a].NDihedral)-1;
2437 			list[i] = g_strdup_printf("%d [%s%d-%s%d-%s%d-%s%d]",a+1,
2438 					Geom[a].Symb,a+1,
2439 					Geom[b].Symb,b+1,
2440 					Geom[c].Symb,c+1,
2441 					Geom[d].Symb,d+1
2442 					);
2443 		}
2444 	}
2445 	else
2446 	{
2447 		iEnd = 0;
2448 		list[0] = g_strdup_printf(" ");
2449 	}
2450 
2451   	for(i=0;i<=iEnd;i++) glist = g_list_append(glist,list[i]);
2452 
2453   	gtk_combo_box_entry_set_popdown_strings( comboReactionPathAtoms, glist) ;
2454   	g_list_free(glist);
2455 	if(list)
2456 	{
2457 		for(i=0;i<nlist;i++) if(list[i]) g_free(list[i]);
2458 		g_free(list);
2459 	}
2460 }
2461 /**********************************************************************/
changedEntryReactionPathType(GtkWidget * entry,gpointer data)2462 static void changedEntryReactionPathType(GtkWidget *entry, gpointer data)
2463 {
2464 	G_CONST_RETURN gchar* entryText = NULL;
2465 	gchar* typeRP;
2466 	GtkWidget* entryStep = NULL;
2467 	GtkWidget* entryNbPoints = NULL;
2468 	GtkWidget* comboAtoms = NULL;
2469 
2470 	if(!GTK_IS_WIDGET(entry)) return;
2471 
2472 	entryText = gtk_entry_get_text(GTK_ENTRY(entry));
2473 	if(strlen(entryText)<1)return;
2474 	typeRP   = g_object_get_data(G_OBJECT (entry), "TypeRP");
2475 	if(!typeRP) return;
2476 	sprintf(typeRP,"%s",entryText);
2477 	entryStep = g_object_get_data(G_OBJECT (entry), "EntryStep");
2478 	entryNbPoints =	g_object_get_data(G_OBJECT (entry), "EntryNbPoints");
2479 	if (!strcmp(typeRP,"X") || !strcmp(typeRP,"Y") || !strcmp(typeRP,"Z") || !strcmp(typeRP,"Bond"))
2480 	{
2481 		if(entryStep) gtk_entry_set_text(GTK_ENTRY(entryStep),"0.1");
2482 		if(entryNbPoints) gtk_entry_set_text(GTK_ENTRY(entryNbPoints),"20");
2483 	}
2484 	else
2485 	{
2486 		if(entryStep) gtk_entry_set_text(GTK_ENTRY(entryStep),"1.0");
2487 		if(entryNbPoints) gtk_entry_set_text(GTK_ENTRY(entryNbPoints),"360");
2488 	}
2489 	comboAtoms = g_object_get_data(G_OBJECT (entry), "ComboAtoms");
2490 	if(comboAtoms)setComboReactionPathAtoms(comboAtoms);
2491 }
2492 /**********************************************************************/
changedEntryReactionPathAtoms(GtkWidget * entry,gpointer data)2493 static void changedEntryReactionPathAtoms(GtkWidget *entry, gpointer data)
2494 {
2495 	G_CONST_RETURN gchar* entryText = NULL;
2496 	gint* atomRP = NULL;
2497 
2498 	if(!GTK_IS_WIDGET(entry)) return;
2499 
2500 	entryText = gtk_entry_get_text(GTK_ENTRY(entry));
2501 	if(strlen(entryText)<1)return;
2502 	atomRP   = g_object_get_data(G_OBJECT (entry), "AtomRP");
2503 	if(!atomRP) return;
2504 	sscanf(entryText,"%d",atomRP);
2505 }
2506 /**********************************************************************/
changedEntryReactionPathStep(GtkWidget * entry,gpointer data)2507 static void changedEntryReactionPathStep(GtkWidget *entry, gpointer data)
2508 {
2509 	G_CONST_RETURN gchar* entryText = NULL;
2510 	gdouble* stepValue = NULL;
2511 
2512 
2513 	if(!GTK_IS_WIDGET(entry)) return;
2514 
2515 	entryText = gtk_entry_get_text(GTK_ENTRY(entry));
2516 	if(strlen(entryText)<1)return;
2517 	stepValue = g_object_get_data(G_OBJECT (entry), "StepValueRP");
2518 	if(!stepValue) return;
2519 	*stepValue = atof(entryText);
2520 }
2521 /**********************************************************************/
changedEntryReactionPathNbPoints(GtkWidget * entry,gpointer data)2522 static void changedEntryReactionPathNbPoints(GtkWidget *entry, gpointer data)
2523 {
2524 	G_CONST_RETURN gchar* entryText = NULL;
2525 	gint* numberOfPoints = NULL;
2526 
2527 
2528 	if(!GTK_IS_WIDGET(entry)) return;
2529 
2530 	entryText = gtk_entry_get_text(GTK_ENTRY(entry));
2531 	if(strlen(entryText)<1)return;
2532 	if(atoi(entryText)<1) return;
2533 	numberOfPoints = g_object_get_data(G_OBJECT (entry), "NumberOfPointsRP");
2534 	if(!numberOfPoints) return;
2535 	*numberOfPoints = atoi(entryText);
2536 }
2537 /***********************************************************************************************/
addMopacReactionPathVariableToTable(GtkWidget * table,gint i,gint j)2538 static GtkWidget *addMopacReactionPathVariableToTable(GtkWidget *table, gint i,gint j)
2539 {
2540 	GtkWidget* entry = NULL;
2541 	GtkWidget* combo = NULL;
2542 	gint nlist = 1;
2543 	gchar* list[] = {"Bond"};
2544 
2545 	entry = addComboListToATable(table, list, nlist, i, j, 1);
2546 	combo  = g_object_get_data(G_OBJECT (entry), "Combo");
2547 	gtk_widget_set_sensitive(entry, FALSE);
2548 	g_signal_connect(G_OBJECT(entry),"changed", G_CALLBACK(changedEntryReactionPathType),NULL);
2549 
2550 	return combo;
2551 }
2552 /***********************************************************************************************/
addMopacReactionPathAtomsToTable(GtkWidget * table,gint i,gint j)2553 static GtkWidget *addMopacReactionPathAtomsToTable(GtkWidget *table, gint i, gint j)
2554 {
2555 	GtkWidget* entry = NULL;
2556 	GtkWidget* combo = NULL;
2557 	gint nlist = 1;
2558 	gchar* list[] = {"1-2"};
2559 
2560 	entry = addComboListToATable(table, list, nlist, i, j, 1);
2561 	combo  = g_object_get_data(G_OBJECT (entry), "Combo");
2562 	gtk_widget_set_sensitive(entry, FALSE);
2563 
2564 	g_signal_connect(G_OBJECT(entry),"changed", G_CALLBACK(changedEntryReactionPathAtoms),NULL);
2565 	return combo;
2566 }
2567 /***********************************************************************************************/
createReactionPathFrame(GtkWidget * box)2568 static void createReactionPathFrame(GtkWidget *box)
2569 {
2570 	GtkWidget* frame;
2571 	GtkWidget* vboxFrame;
2572 	GtkWidget* label;
2573 	GtkWidget* comboVariableType[2] = {NULL,NULL}; /* X, Y, Z, R, Angle or Dihedral */
2574 	GtkWidget* comboAtoms[2] = {NULL,NULL}; /* n1-n2-n3-n4 (Symb1-Symb2-Symb3-Symb4)*/
2575 	GtkWidget* entryNbPoints[2] = {NULL,NULL};
2576 	GtkWidget* entryStep[2] = {NULL,NULL};
2577 	GtkWidget *table = NULL;
2578 	gint i;
2579 	gint j;
2580 	gint k;
2581 
2582 	table = gtk_table_new(3,5,FALSE);
2583 
2584 	sprintf(typeRP[1],"Nothing");
2585 	if(MethodeGeom==GEOM_IS_XYZ) sprintf(typeRP[0],"X");
2586 	else sprintf(typeRP[0],"Bond");
2587 
2588 	numberOfPointsRP[0] = 10;
2589 	numberOfPointsRP[1] = 10;
2590 	stepValueRP[0] = 0.1;
2591 	stepValueRP[1] = 0.1;
2592 
2593 	frame = gtk_frame_new (_("Reaction path"));
2594 	gtk_widget_show (frame);
2595 	gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3);
2596 	gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5);
2597 
2598 	vboxFrame = gtk_vbox_new (FALSE, 3);
2599 	gtk_widget_show (vboxFrame);
2600 	gtk_container_add (GTK_CONTAINER (frame), vboxFrame);
2601 
2602 	gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0);
2603 
2604 	i = 0; j = 1;
2605 	label = gtk_label_new(_("Type"));
2606 	gtk_table_attach(GTK_TABLE(table),label,j,j+1,i,i+1,
2607 		(GtkAttachOptions)	(GTK_FILL | GTK_EXPAND),
2608 		(GtkAttachOptions)	(GTK_FILL | GTK_SHRINK),
2609                   2,2);
2610 	i = 0; j = 2;
2611 	label = gtk_label_new(_("Atoms"));
2612 	gtk_table_attach(GTK_TABLE(table),label,j,j+1,i,i+1,
2613 		(GtkAttachOptions)	(GTK_FILL | GTK_EXPAND),
2614 		(GtkAttachOptions)	(GTK_FILL | GTK_SHRINK),
2615                   2,2);
2616 	i = 0; j = 3;
2617 	label = gtk_label_new(_("Nb points"));
2618 	gtk_table_attach(GTK_TABLE(table),label,j,j+1,i,i+1,
2619 		(GtkAttachOptions)	(GTK_FILL | GTK_EXPAND),
2620 		(GtkAttachOptions)	(GTK_FILL | GTK_SHRINK),
2621                   2,2);
2622 	i = 0; j = 4;
2623 	label = gtk_label_new(_("Step value"));
2624 	gtk_table_attach(GTK_TABLE(table),label,j,j+1,i,i+1,
2625 		(GtkAttachOptions)	(GTK_FILL | GTK_EXPAND),
2626 		(GtkAttachOptions)	(GTK_FILL | GTK_SHRINK),
2627                   2,2);
2628 
2629 	i = 1;
2630 	j = 0;
2631 	label = gtk_label_new(_("First"));
2632 	gtk_table_attach(GTK_TABLE(table),label,j,j+1,i,i+1,
2633 		(GtkAttachOptions)	(GTK_FILL | GTK_EXPAND),
2634 		(GtkAttachOptions)	(GTK_FILL | GTK_SHRINK),
2635                   2,2);
2636 	j = 1;
2637 	comboVariableType[0] = addMopacReactionPathVariableToTable(table, i,j);
2638 	j = 2;
2639 	comboAtoms[0] = addMopacReactionPathAtomsToTable(table, i,j);
2640 	j = 3;
2641 	entryNbPoints[0] = gtk_entry_new ();
2642 	gtk_widget_set_size_request(GTK_WIDGET(entryNbPoints[0]),(gint)(ScreenHeight*0.1),-1);
2643 	gtk_table_attach(GTK_TABLE(table),entryNbPoints[0],j,j+1,i,i+1,
2644 		(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
2645 		(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
2646                   2,2);
2647 	j = 4;
2648 	entryStep[0] = gtk_entry_new ();
2649 	gtk_widget_set_size_request(GTK_WIDGET(entryStep[0]),(gint)(ScreenHeight*0.1),-1);
2650 	gtk_table_attach(GTK_TABLE(table),entryStep[0],j,j+1,i,i+1,
2651 		(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
2652 		(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
2653                   2,2);
2654 	i = 2;
2655 	j = 0;
2656 	label = gtk_label_new(_("Second"));
2657 	gtk_table_attach(GTK_TABLE(table),label,j,j+1,i,i+1,
2658 		(GtkAttachOptions)	(GTK_FILL | GTK_EXPAND),
2659 		(GtkAttachOptions)	(GTK_FILL | GTK_SHRINK),
2660                   2,2);
2661 	j = 1;
2662 	comboVariableType[1] = addMopacReactionPathVariableToTable(table, i,j);
2663 	j = 2;
2664 	comboAtoms[1] = addMopacReactionPathAtomsToTable(table, i,j);
2665 	j = 3;
2666 	entryNbPoints[1] = gtk_entry_new ();
2667 	gtk_widget_set_size_request(GTK_WIDGET(entryNbPoints[1]),(gint)(ScreenHeight*0.1),-1);
2668 	gtk_table_attach(GTK_TABLE(table),entryNbPoints[1],j,j+1,i,i+1,
2669 		(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
2670 		(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
2671                   2,2);
2672 	j = 4;
2673 	entryStep[1] = gtk_entry_new ();
2674 	gtk_widget_set_size_request(GTK_WIDGET(entryStep[1]),(gint)(ScreenHeight*0.1),-1);
2675 	gtk_table_attach(GTK_TABLE(table),entryStep[1],j,j+1,i,i+1,
2676 		(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
2677 		(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
2678                   2,2);
2679 
2680 	for(k=0;k<2;k++) gtk_entry_set_text(GTK_ENTRY(entryStep[k]),"0.1");
2681 	for(k=0;k<2;k++) gtk_entry_set_text(GTK_ENTRY(entryNbPoints[k]),"20");
2682 	for(k=0;k<2;k++)
2683 	if(GTK_IS_COMBO_BOX(comboVariableType[k]))
2684 	{
2685 		g_object_set_data(G_OBJECT (GTK_BIN(comboVariableType[k])->child), "ComboAtoms", comboAtoms[k]);
2686 		g_object_set_data(G_OBJECT (GTK_BIN(comboVariableType[k])->child), "TypeRP", typeRP[k]);
2687 		g_object_set_data(G_OBJECT (GTK_BIN(comboVariableType[k])->child), "EntryStep", entryStep[k]);
2688 		g_object_set_data(G_OBJECT (GTK_BIN(comboVariableType[k])->child), "EntryNbPoints", entryNbPoints[k]);
2689 	}
2690 	for(k=0;k<2;k++)
2691 	if(GTK_IS_COMBO_BOX(comboAtoms[k]))
2692 	{
2693 		g_object_set_data(G_OBJECT (GTK_BIN(comboAtoms[k])->child), "EntryStep", entryStep[k]);
2694 		g_object_set_data(G_OBJECT (GTK_BIN(comboAtoms[k])->child), "EntryNbPoints", entryNbPoints[k]);
2695 		g_object_set_data(G_OBJECT (GTK_BIN(comboAtoms[k])->child), "AtomRP", &atomRP[k]);
2696 		g_object_set_data(G_OBJECT (GTK_BIN(comboAtoms[k])->child), "TypeRP", typeRP[k]);
2697 	}
2698 	for(k=0;k<2;k++) g_object_set_data(G_OBJECT (entryNbPoints[k]), "NumberOfPointsRP", &numberOfPointsRP[k]);
2699 	for(k=0;k<2;k++) g_object_set_data(G_OBJECT (entryStep[k]), "StepValueRP", &stepValueRP[k]);
2700 
2701 	for(k=0;k<2;k++) g_signal_connect(G_OBJECT(entryStep[k]),"changed", G_CALLBACK(changedEntryReactionPathStep),NULL);
2702 	for(k=0;k<2;k++) g_signal_connect(G_OBJECT(entryNbPoints[k]),"changed", G_CALLBACK(changedEntryReactionPathNbPoints),NULL);
2703 
2704 	for(k=0;k<2;k++) setComboReactionPathVariableType(comboVariableType[k],k>0);
2705 	for(k=0;k<2;k++) setComboReactionPathAtoms(comboAtoms[k]);
2706 }
2707 /**********************************************************************/
addGenericOptions(GtkWidget * box,gchar * type)2708 static void addGenericOptions(GtkWidget *box, gchar* type)
2709 {
2710 	GtkWidget* frame;
2711 	GtkWidget* vboxFrame;
2712 	GtkWidget* comboGenericPotential = NULL;
2713 	GtkWidget* label = NULL;
2714 	GtkWidget *table = NULL;
2715 	gint i;
2716 	gint j;
2717 
2718 	table = gtk_table_new(2,5,FALSE);
2719 
2720 	frame = gtk_frame_new (NULL);
2721 	gtk_widget_show (frame);
2722 	gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3);
2723 	gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5);
2724 
2725 	vboxFrame = gtk_vbox_new (FALSE, 3);
2726 	gtk_widget_show (vboxFrame);
2727 	gtk_container_add (GTK_CONTAINER (frame), vboxFrame);
2728 	gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0);
2729 /*----------------------------------------------------------------------------------*/
2730 	i = 0;
2731 	j = 0;
2732 	add_label_table(table,_("Name of your generic program"),(gushort)i,(gushort)j);
2733 /*----------------------------------------------------------------------------------*/
2734 	j = 1;
2735 	label = gtk_label_new(":");
2736 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
2737                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
2738                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2739                   1,1);
2740 /*----------------------------------------------------------------------------------*/
2741 	j = 2;
2742 	entryGenericPotential = gtk_entry_new();
2743 	gtk_widget_set_size_request(GTK_WIDGET(entryGenericPotential),(gint)(ScreenHeight*0.2),-1);
2744 	gtk_table_attach(GTK_TABLE(table),entryGenericPotential, j,j+4,i,i+1,
2745                   (GtkAttachOptions)(GTK_FILL|GTK_EXPAND),
2746                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2747                   1,1);
2748 	if(!genericProgName) genericProgName = g_strdup("myGenericProgram");
2749 	gtk_entry_set_text(GTK_ENTRY(entryGenericPotential),genericProgName);
2750 /*----------------------------------------------------------------------------------*/
2751 }
2752 /************************************************************************************************************/
AddOptionsDlg(GtkWidget * NoteBook,GtkWidget * win,gchar * type)2753 static void AddOptionsDlg(GtkWidget *NoteBook, GtkWidget *win,gchar* type)
2754 {
2755 	gint i;
2756 	gint j;
2757 	GtkWidget *frame;
2758 	GtkWidget *LabelOnglet;
2759 	GtkWidget *LabelMenu;
2760 	GtkWidget *vbox;
2761 	GtkWidget *table;
2762 	GtkWidget *label;
2763 
2764 	frame = gtk_frame_new(NULL);
2765 	gtk_container_set_border_width(GTK_CONTAINER(frame), 5);
2766 
2767 	LabelOnglet = gtk_label_new(_("General"));
2768 	LabelMenu = gtk_label_new(_("General"));
2769 	gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu);
2770 	g_object_set_data (G_OBJECT (frame), "frame", frame);
2771 
2772 	vbox = gtk_vbox_new (FALSE, 0);
2773 	gtk_container_add (GTK_CONTAINER (frame), vbox);
2774 
2775 	table = gtk_table_new(4,5,FALSE);
2776 	gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);
2777 
2778 	i=-1;
2779 /*----------------------------------------------------------------------------------*/
2780 	if(!strstr(type,"OpenBabel"))
2781 	{
2782 		i++;
2783 		j = 0;
2784 		vbox = gtk_vbox_new (FALSE, 0);
2785 		gtk_table_attach(GTK_TABLE(table),vbox,
2786 			j,j+6,i,i+1,
2787                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2788                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2789                   1,1);
2790 		addChargeSpin(vbox);
2791 	}
2792 /*----------------------------------------------------------------------------------*/
2793 	if(strstr(type,"Generic"))
2794 	{
2795 		i++;
2796 		j = 0;
2797 		vbox = gtk_vbox_new (FALSE, 0);
2798 		gtk_table_attach(GTK_TABLE(table),vbox,
2799 			j,j+6,i,i+1,
2800                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2801                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2802                   1,1);
2803 		addGenericOptions(vbox, type);
2804 	}
2805 	else if(strstr(type,"OpenBabel"))
2806 	{
2807 		i++;
2808 		j = 0;
2809 		vbox = gtk_vbox_new (FALSE, 0);
2810 		gtk_table_attach(GTK_TABLE(table),vbox,
2811 			j,j+6,i,i+1,
2812                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2813                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2814                   1,1);
2815 		addOpenBabelOptions(vbox, type);
2816 	}
2817 	else if(strstr(type,"Orca"))
2818 	{
2819 		i++;
2820 		j = 0;
2821 		vbox = gtk_vbox_new (FALSE, 0);
2822 		gtk_table_attach(GTK_TABLE(table),vbox,
2823 			j,j+6,i,i+1,
2824                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2825                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2826                   1,1);
2827 		addOrcaOptions(vbox, type);
2828 	}
2829 	else if(strstr(type,"Mopac") && strstr(type,"Sparkle"))
2830 	{
2831 		i++;
2832 		j = 0;
2833 		vbox = gtk_vbox_new (FALSE, 0);
2834 		gtk_table_attach(GTK_TABLE(table),vbox, j,j+3,i,i+1,
2835                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2836                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2837                   1,1);
2838 		addMopacSparkleOptions(vbox, type);
2839 	}
2840 	else
2841 	if(strstr(type,"Mopac") && !strstr(type,"PM6") && !strstr(type,"AM1") && !strstr(type,"PM7"))
2842 	{
2843 		i++;
2844 		j = 0;
2845 		vbox = gtk_vbox_new (FALSE, 0);
2846 		gtk_table_attach(GTK_TABLE(table),vbox,
2847 			j,j+6,i,i+1,
2848                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2849                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2850                   1,1);
2851 		addMopacOptions(vbox, type);
2852 	}
2853 	else if(strstr(type,"MopacScanAM1") || strstr(type,"MopacScanPM6") || strstr(type,"MopacScanPM6DH2") || strstr(type,"MopacScanPM6DH+") || strstr(type,"MopacScanPM7") )
2854 	{
2855 		i++;
2856 		j = 0;
2857 		vbox = gtk_vbox_new (FALSE, 0);
2858 		gtk_table_attach(GTK_TABLE(table),vbox,
2859 			j,j+6,i,i+1,
2860                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2861                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2862                   1,1);
2863 		addMopacOptions(vbox, type);
2864 	}
2865 	if(strstr(type,"MopacScan"))
2866 	{
2867 		i++;
2868 		j = 0;
2869 		vbox = gtk_vbox_new (FALSE, 0);
2870 		gtk_table_attach(GTK_TABLE(table),vbox,
2871 			j,j+6,i,i+1,
2872                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2873                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2874                   1,1);
2875 		createReactionPathFrame(vbox);
2876 	}
2877 /*----------------------------------------------------------------------------------*/
2878 	i++;
2879 	j = 0;
2880 	add_label_table(table,_("Working Folder"),(gushort)i,(gushort)j);
2881 /*----------------------------------------------------------------------------------*/
2882 	j = 1;
2883 	label = gtk_label_new(":");
2884 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
2885                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
2886                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2887                   1,1);
2888 /*----------------------------------------------------------------------------------*/
2889 	j = 2;
2890 	buttonDirSelector =  gabedit_dir_button();
2891 	gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(buttonDirSelector), g_get_current_dir());
2892 	gtk_widget_set_size_request(GTK_WIDGET(buttonDirSelector),(gint)(ScreenHeight*0.2),-1);
2893 	gtk_table_attach(GTK_TABLE(table),buttonDirSelector,
2894 			j,j+4,i,i+1,
2895                   (GtkAttachOptions)(GTK_FILL|GTK_EXPAND),
2896                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2897                   1,1);
2898 /*----------------------------------------------------------------------------------*/
2899 	i++;
2900 	j = 0;
2901 	add_label_table(table,_("File name"),(gushort)i,(gushort)j);
2902 /*----------------------------------------------------------------------------------*/
2903 	j = 1;
2904 	label = gtk_label_new(":");
2905 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
2906                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
2907                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2908                   1,1);
2909 /*----------------------------------------------------------------------------------*/
2910 	j = 2;
2911 	entryFileName = gtk_entry_new();
2912 	if(strstr(type,"AM1")) gtk_entry_set_text(GTK_ENTRY(entryFileName),"am1");
2913 	if(strstr(type,"PM6")) gtk_entry_set_text(GTK_ENTRY(entryFileName),"pm6");
2914 	if(strstr(type,"PM7")) gtk_entry_set_text(GTK_ENTRY(entryFileName),"pm7");
2915 	else if(strstr(type,"Mopac")) gtk_entry_set_text(GTK_ENTRY(entryFileName),"mopacFile");
2916 	else if(strstr(type,"FireFly")) gtk_entry_set_text(GTK_ENTRY(entryFileName),"fireflyFile");
2917 	else if(strstr(type,"Orca")) gtk_entry_set_text(GTK_ENTRY(entryFileName),"orcaFile");
2918 	else gtk_entry_set_text(GTK_ENTRY(entryFileName),"myFile");
2919 	gtk_widget_set_size_request(GTK_WIDGET(entryFileName),(gint)(ScreenHeight*0.2),-1);
2920 	gtk_table_attach(GTK_TABLE(table),entryFileName, j,j+4,i,i+1,
2921                   (GtkAttachOptions)(GTK_FILL|GTK_EXPAND),
2922                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2923                   1,1);
2924 
2925 /*----------------------------------------------------------------------------------*/
2926 }
2927 /**********************************************************************/
addMopacHamiltonianToTable(GtkWidget * table,gint i)2928 static GtkWidget *addMopacHamiltonianToTable(GtkWidget *table, gint i)
2929 {
2930 	GtkWidget* entryMopacHamiltonian = NULL;
2931 	GtkWidget* comboMopacHamiltonian = NULL;
2932 	gint nlistHamiltonian = 7;
2933 	gchar* listHamiltonian[] = {"PM7","PM6","PM6-DH+","PM6-DH2","AM1","RM1","PM3","MNDO"};
2934 
2935 	add_label_table(table,_("Model"),(gushort)i,0);
2936 	add_label_table(table,":",(gushort)i,1);
2937 	entryMopacHamiltonian = addComboListToATable(table, listHamiltonian, nlistHamiltonian, i, 2, 1);
2938 	comboMopacHamiltonian  = g_object_get_data(G_OBJECT (entryMopacHamiltonian), "Combo");
2939 	gtk_widget_set_sensitive(entryMopacHamiltonian, FALSE);
2940 
2941 
2942 	return comboMopacHamiltonian;
2943 }
2944 /**********************************************************************/
addMopacOptions(GtkWidget * box,gchar * type)2945 static void addMopacOptions(GtkWidget *box, gchar* type)
2946 {
2947 	GtkWidget* frame;
2948 	GtkWidget* vboxFrame;
2949 	GtkWidget* comboMopacHamiltonian = NULL;
2950 	GtkWidget* label = NULL;
2951 	GtkWidget *table = NULL;
2952 	gint i;
2953 	gint j;
2954 
2955 	table = gtk_table_new(2,5,FALSE);
2956 
2957 	frame = gtk_frame_new (NULL);
2958 	gtk_widget_show (frame);
2959 	gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3);
2960 	gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5);
2961 
2962 	vboxFrame = gtk_vbox_new (FALSE, 3);
2963 	gtk_widget_show (vboxFrame);
2964 	gtk_container_add (GTK_CONTAINER (frame), vboxFrame);
2965 	gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0);
2966 /*----------------------------------------------------------------------------------*/
2967 	i = 0;
2968 	comboMopacHamiltonian = addMopacHamiltonianToTable(table, i);
2969 	entryMopacHamiltonian = GTK_WIDGET(GTK_BIN(comboMopacHamiltonian)->child);
2970 /*----------------------------------------------------------------------------------*/
2971 	i++;
2972 	j = 0;
2973 	add_label_table(table,_("Additional keywords"),(gushort)i,(gushort)j);
2974 /*----------------------------------------------------------------------------------*/
2975 	j = 1;
2976 	label = gtk_label_new(":");
2977 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
2978                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
2979                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2980                   1,1);
2981 /*----------------------------------------------------------------------------------*/
2982 	j = 2;
2983 	entryAddMopacKeywords = gtk_entry_new();
2984 	if(strstr(type,"Opt")) gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"GNORM=0.01");
2985 	else if(strstr(type,"Gradient")) gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"GNORM=0.01");
2986 	else if(strstr(type,"Scan")) gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"GEO-OK EPS=78.39 RSOLV=1.3");
2987 	else gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"BONDS");
2988 	gtk_widget_set_size_request(GTK_WIDGET(entryAddMopacKeywords),(gint)(ScreenHeight*0.2),-1);
2989 	gtk_table_attach(GTK_TABLE(table),entryAddMopacKeywords, j,j+4,i,i+1,
2990                   (GtkAttachOptions)(GTK_FILL|GTK_EXPAND),
2991                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
2992                   1,1);
2993 	if(strstr(type,"MopacScanAM1")) gtk_entry_set_text(GTK_ENTRY(entryMopacHamiltonian),"AM1");
2994 /*----------------------------------------------------------------------------------*/
2995 }
2996 /**********************************************************************/
addMopacHamiltonianSparkleToTable(GtkWidget * table,gint i)2997 static GtkWidget *addMopacHamiltonianSparkleToTable(GtkWidget *table, gint i)
2998 {
2999 	GtkWidget* entryMopacHamiltonianSparkle = NULL;
3000 	GtkWidget* comboMopacHamiltonianSparkle = NULL;
3001 	gint nlistHamiltonianSparkle = 4;
3002 	gchar* listHamiltonianSparkle[] = {"AM1","PM7","PM6","PM3"};
3003 
3004 	add_label_table(table,_("Model"),(gushort)i,0);
3005 	add_label_table(table,":",(gushort)i,1);
3006 	entryMopacHamiltonianSparkle = addComboListToATable(table, listHamiltonianSparkle, nlistHamiltonianSparkle, i, 2, 1);
3007 	comboMopacHamiltonianSparkle  = g_object_get_data(G_OBJECT (entryMopacHamiltonianSparkle), "Combo");
3008 	gtk_widget_set_sensitive(entryMopacHamiltonianSparkle, FALSE);
3009 
3010 	return comboMopacHamiltonianSparkle;
3011 }
3012 /**********************************************************************/
addMopacSparkleOptions(GtkWidget * box,gchar * type)3013 static void addMopacSparkleOptions(GtkWidget *box, gchar* type)
3014 {
3015 	GtkWidget* frame;
3016 	GtkWidget* vboxFrame;
3017 	GtkWidget* comboMopacHamiltonianSparkle = NULL;
3018 	GtkWidget* label = NULL;
3019 	GtkWidget *table = NULL;
3020 	gint i;
3021 	gint j;
3022 
3023 	table = gtk_table_new(2,5,FALSE);
3024 
3025 	frame = gtk_frame_new (NULL);
3026 	gtk_widget_show (frame);
3027 	gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3);
3028 	gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5);
3029 
3030 	vboxFrame = gtk_vbox_new (FALSE, 3);
3031 	gtk_widget_show (vboxFrame);
3032 	gtk_container_add (GTK_CONTAINER (frame), vboxFrame);
3033 	gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0);
3034 /*----------------------------------------------------------------------------------*/
3035 	i = 0;
3036 	comboMopacHamiltonianSparkle = addMopacHamiltonianSparkleToTable(table, i);
3037 	entryMopacHamiltonianSparkle = GTK_WIDGET(GTK_BIN(comboMopacHamiltonianSparkle)->child);
3038 /*----------------------------------------------------------------------------------*/
3039 	i++;
3040 	j = 0;
3041 	add_label_table(table,_("Additional keywords"),(gushort)i,(gushort)j);
3042 /*----------------------------------------------------------------------------------*/
3043 	j = 1;
3044 	label = gtk_label_new(":");
3045 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
3046                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
3047                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
3048                   1,1);
3049 /*----------------------------------------------------------------------------------*/
3050 	j = 2;
3051 	entryAddMopacKeywords = gtk_entry_new();
3052 	if(strstr(type,"Opt")) gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"GNORM=0.01");
3053 	else if(strstr(type,"Gradient")) gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"GNORM=0.01");
3054 	else if(strstr(type,"Scan")) gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"GEO-OK EPS=78.39 RSOLV=1.3");
3055 	else gtk_entry_set_text(GTK_ENTRY(entryAddMopacKeywords),"BONDS");
3056 	gtk_widget_set_size_request(GTK_WIDGET(entryAddMopacKeywords),(gint)(ScreenHeight*0.2),-1);
3057 	gtk_table_attach(GTK_TABLE(table),entryAddMopacKeywords, j,j+4,i,i+1,
3058                   (GtkAttachOptions)(GTK_FILL|GTK_EXPAND),
3059                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
3060                   1,1);
3061 	if(strstr(type,"MopacScanAM1")) gtk_entry_set_text(GTK_ENTRY(entryMopacHamiltonian),"AM1");
3062 /*----------------------------------------------------------------------------------*/
3063 }
3064 /**********************************************************************/
addOrcaHamiltonianToTable(GtkWidget * table,gint i)3065 static GtkWidget *addOrcaHamiltonianToTable(GtkWidget *table, gint i)
3066 {
3067 	GtkWidget* entryOrcaHamiltonian = NULL;
3068 	GtkWidget* comboOrcaHamiltonian = NULL;
3069 	gint nlistHamiltonian = 2;
3070 	gchar* listHamiltonian[] = {"PM3","AM1"};
3071 
3072 	add_label_table(table,_("Model"),(gushort)i,0);
3073 	add_label_table(table,":",(gushort)i,1);
3074 	entryOrcaHamiltonian = addComboListToATable(table, listHamiltonian, nlistHamiltonian, i, 2, 1);
3075 	comboOrcaHamiltonian  = g_object_get_data(G_OBJECT (entryOrcaHamiltonian), "Combo");
3076 	gtk_widget_set_sensitive(entryOrcaHamiltonian, FALSE);
3077 
3078 
3079 	return comboOrcaHamiltonian;
3080 }
3081 /**********************************************************************/
addOrcaOptions(GtkWidget * box,gchar * type)3082 static void addOrcaOptions(GtkWidget *box, gchar* type)
3083 {
3084 	GtkWidget* frame;
3085 	GtkWidget* vboxFrame;
3086 	GtkWidget* comboOrcaHamiltonian = NULL;
3087 	GtkWidget* label = NULL;
3088 	GtkWidget *table = NULL;
3089 	gint i;
3090 	gint j;
3091 
3092 	table = gtk_table_new(2,5,FALSE);
3093 
3094 	frame = gtk_frame_new (NULL);
3095 	gtk_widget_show (frame);
3096 	gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3);
3097 	gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5);
3098 
3099 	vboxFrame = gtk_vbox_new (FALSE, 3);
3100 	gtk_widget_show (vboxFrame);
3101 	gtk_container_add (GTK_CONTAINER (frame), vboxFrame);
3102 	gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0);
3103 /*----------------------------------------------------------------------------------*/
3104 	i = 0;
3105 	comboOrcaHamiltonian = addOrcaHamiltonianToTable(table, i);
3106 	entryOrcaHamiltonian = GTK_WIDGET(GTK_BIN(comboOrcaHamiltonian)->child);
3107 /*----------------------------------------------------------------------------------*/
3108 	i++;
3109 	j = 0;
3110 	add_label_table(table,_("Additional keywords"),(gushort)i,(gushort)j);
3111 /*----------------------------------------------------------------------------------*/
3112 	j = 1;
3113 	label = gtk_label_new(":");
3114 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
3115                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
3116                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
3117                   1,1);
3118 /*----------------------------------------------------------------------------------*/
3119 	j = 2;
3120 	entryAddOrcaKeywords = gtk_entry_new();
3121 	gtk_widget_set_size_request(GTK_WIDGET(entryAddOrcaKeywords),(gint)(ScreenHeight*0.2),-1);
3122 	gtk_table_attach(GTK_TABLE(table),entryAddOrcaKeywords, j,j+4,i,i+1,
3123                   (GtkAttachOptions)(GTK_FILL|GTK_EXPAND),
3124                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
3125                   1,1);
3126 	gtk_entry_set_text(GTK_ENTRY(entryOrcaHamiltonian),"PM3");
3127 /*----------------------------------------------------------------------------------*/
3128 }
3129 /**********************************************************************/
addOpenBabelPotentialToTable(GtkWidget * table,gint i)3130 static GtkWidget *addOpenBabelPotentialToTable(GtkWidget *table, gint i)
3131 {
3132 	GtkWidget* entryOpenBabelPotential = NULL;
3133 	GtkWidget* comboOpenBabelPotential = NULL;
3134 	gint nlistPotential = 4;
3135 	gchar* listPotential[] = {"MMFF94","MMFF94s","UFF", "GHEMICAL"};
3136 
3137 	add_label_table(table,_("Model"),(gushort)i,0);
3138 	add_label_table(table,":",(gushort)i,1);
3139 	entryOpenBabelPotential = addComboListToATable(table, listPotential, nlistPotential, i, 2, 1);
3140 	comboOpenBabelPotential  = g_object_get_data(G_OBJECT (entryOpenBabelPotential), "Combo");
3141 	gtk_widget_set_sensitive(entryOpenBabelPotential, FALSE);
3142 
3143 	return comboOpenBabelPotential;
3144 }
3145 /**********************************************************************/
addOpenBabelOptions(GtkWidget * box,gchar * type)3146 static void addOpenBabelOptions(GtkWidget *box, gchar* type)
3147 {
3148 	GtkWidget* frame;
3149 	GtkWidget* vboxFrame;
3150 	GtkWidget* comboOpenBabelPotential = NULL;
3151 	GtkWidget* label = NULL;
3152 	GtkWidget *table = NULL;
3153 	gint i;
3154 	gint j;
3155 
3156 	table = gtk_table_new(2,5,FALSE);
3157 
3158 	frame = gtk_frame_new (NULL);
3159 	gtk_widget_show (frame);
3160 	gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3);
3161 	gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5);
3162 
3163 	vboxFrame = gtk_vbox_new (FALSE, 3);
3164 	gtk_widget_show (vboxFrame);
3165 	gtk_container_add (GTK_CONTAINER (frame), vboxFrame);
3166 	gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0);
3167 /*----------------------------------------------------------------------------------*/
3168 	i = 0;
3169 	comboOpenBabelPotential = addOpenBabelPotentialToTable(table, i);
3170 	entryOpenBabelPotential = GTK_WIDGET(GTK_BIN(comboOpenBabelPotential)->child);
3171 /*----------------------------------------------------------------------------------*/
3172 	i++;
3173 	j = 0;
3174 	add_label_table(table,_("Additional options"),(gushort)i,(gushort)j);
3175 /*----------------------------------------------------------------------------------*/
3176 	j = 1;
3177 	label = gtk_label_new(":");
3178 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
3179                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
3180                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
3181                   1,1);
3182 /*----------------------------------------------------------------------------------*/
3183 	j = 2;
3184 	entryAddOpenBabelKeywords = gtk_entry_new();
3185 	gtk_widget_set_size_request(GTK_WIDGET(entryAddOpenBabelKeywords),(gint)(ScreenHeight*0.2),-1);
3186 	gtk_table_attach(GTK_TABLE(table),entryAddOpenBabelKeywords, j,j+4,i,i+1,
3187                   (GtkAttachOptions)(GTK_FILL|GTK_EXPAND),
3188                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
3189                   1,1);
3190 	gtk_entry_set_text(GTK_ENTRY(entryOpenBabelPotential),"MMFF94");
3191 /*----------------------------------------------------------------------------------*/
3192 }
3193 /***********************************************************************/
semiEmpiricalDlg(gchar * type)3194 void semiEmpiricalDlg(gchar* type)
3195 {
3196 	GtkWidget *button;
3197 	GtkWidget *Win;
3198 	GtkWidget *NoteBook;
3199 	GtkWidget *parentWindow = GeomDlg;
3200 
3201 	StopCalcul = TRUE;
3202 
3203 	Win= gtk_dialog_new ();
3204 	gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER);
3205 	gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow));
3206 	if(type)
3207 	{
3208 		gchar* title = g_strdup_printf(_("%s calculation"),type);
3209 		gtk_window_set_title(&GTK_DIALOG(Win)->window,title);
3210 		g_free(title);
3211 	}
3212     	gtk_window_set_modal (GTK_WINDOW (Win), TRUE);
3213 
3214 	g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)gtk_widget_destroy,NULL);
3215 
3216 	NoteBook = gtk_notebook_new();
3217 	gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Win)->vbox), NoteBook,TRUE, TRUE, 0);
3218 
3219 	AddOptionsDlg(NoteBook, Win,type);
3220 
3221 
3222 	gtk_widget_realize(Win);
3223 
3224 	button = create_button(Win,"Cancel");
3225 	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
3226 	gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0);
3227 	g_signal_connect_swapped(GTK_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(Win));
3228 	gtk_widget_show (button);
3229 
3230 	button = create_button(Win,"Ok");
3231 	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
3232 	gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0);
3233 	if(!strcmp(type,"AM1FireFlyEnergy"))
3234 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runAM1FireFlyEnergy,GTK_OBJECT(Win));
3235 	else if(!strcmp(type,"AM1FireFlyOptimize"))
3236 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runAM1FireFlyOptimize,GTK_OBJECT(Win));
3237 
3238 	else if(!strcmp(type,"OpenBabelEnergy"))
3239 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runOpenBabelEnergy,GTK_OBJECT(Win));
3240 	else if(!strcmp(type,"OpenBabelOptimize"))
3241 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runOpenBabelOptimize,GTK_OBJECT(Win));
3242 
3243 	else if(!strcmp(type,"GenericEnergy"))
3244 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runGenericEnergy,GTK_OBJECT(Win));
3245 	else if(!strcmp(type,"GenericOptimize"))
3246 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runGenericOptimize,GTK_OBJECT(Win));
3247 
3248 	else if(!strcmp(type,"PM6DH2MopacEnergy"))
3249 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6DH2MopacEnergy,GTK_OBJECT(Win));
3250 	else if(!strcmp(type,"PM6DH2MopacOptimize"))
3251 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6DH2MopacOptimize,GTK_OBJECT(Win));
3252 	else if(!strcmp(type,"PM6DH2MopacESP"))
3253 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6DH2MopacESP,GTK_OBJECT(Win));
3254 	else if(!strcmp(type,"PM6DH+MopacEnergy"))
3255 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6DHpMopacEnergy,GTK_OBJECT(Win));
3256 	else if(!strcmp(type,"PM6DH+MopacOptimize"))
3257 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6DHpMopacOptimize,GTK_OBJECT(Win));
3258 	else if(!strcmp(type,"PM6DH+MopacESP"))
3259 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6DHpMopacESP,GTK_OBJECT(Win));
3260 
3261 	else if(!strcmp(type,"PM6MopacEnergy"))
3262 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6MopacEnergy,GTK_OBJECT(Win));
3263 	else if(!strcmp(type,"PM6MopacOptimize"))
3264 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6MopacOptimize,GTK_OBJECT(Win));
3265 	else if(!strcmp(type,"PM6MopacESP"))
3266 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM6MopacESP,GTK_OBJECT(Win));
3267 
3268 	else if(!strcmp(type,"PM7MopacEnergy"))
3269 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM7MopacEnergy,GTK_OBJECT(Win));
3270 	else if(!strcmp(type,"PM7MopacOptimize"))
3271 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM7MopacOptimize,GTK_OBJECT(Win));
3272 	else if(!strcmp(type,"PM7MopacESP"))
3273 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runPM7MopacESP,GTK_OBJECT(Win));
3274 
3275 	else if(!strcmp(type,"AM1MopacEnergy"))
3276 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runAM1MopacEnergy,GTK_OBJECT(Win));
3277 	else if(!strcmp(type,"AM1MopacOptimize"))
3278 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runAM1MopacOptimize,GTK_OBJECT(Win));
3279 	else if(!strcmp(type,"AM1MopacESP"))
3280 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runAM1MopacESP,GTK_OBJECT(Win));
3281 	else if(!strcmp(type,"MopacEnergy"))
3282 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runMopacEnergy,GTK_OBJECT(Win));
3283 	else if(!strcmp(type,"MopacOptimize"))
3284 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runMopacOptimize,GTK_OBJECT(Win));
3285 	else if(!strcmp(type,"MopacOptimizeSparkle"))
3286                 g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runMopacOptimizeSparkle,GTK_OBJECT(Win));
3287 	else if(!strcmp(type,"MopacESP"))
3288 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runMopacESP,GTK_OBJECT(Win));
3289 	else if(strstr(type,"MopacScan")!=NULL)
3290 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runMopacScan,GTK_OBJECT(Win));
3291 	else if(!strcmp(type,"OrcaEnergy"))
3292 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runOrcaEnergy,GTK_OBJECT(Win));
3293 	else if(!strcmp(type,"OrcaOptimize"))
3294 		g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)runOrcaOptimize,GTK_OBJECT(Win));
3295 
3296 	gtk_widget_show (button);
3297 
3298 	gtk_widget_show_all(Win);
3299 }
3300 /*****************************************************************************/
saveConfoGeometries(gint numberOfGeometries,SemiEmpiricalModel ** geometries,gdouble * energies,gchar * fileNameGeom)3301 static gboolean saveConfoGeometries(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gchar* fileNameGeom)
3302 {
3303 	FILE* file = NULL;
3304 	gint i;
3305 	gint j;
3306 	gint nG = 0;
3307 	gint k;
3308 
3309 	if(numberOfGeometries<1) return FALSE;
3310 	if(!geometries) return FALSE;
3311 	if(!energies) return FALSE;
3312 	for(i=0;i<numberOfGeometries;i++) if(geometries[i]) nG++;
3313 	if(nG<1) return FALSE;
3314 
3315  	file = FOpen(fileNameGeom, "w");
3316 
3317 	if(!file) return FALSE;
3318 
3319 	fprintf(file,"[Gabedit Format]\n");
3320 	fprintf(file,"[GEOCONV]\n");
3321 	fprintf(file,"energy\n");
3322 	for(i=0;i<numberOfGeometries;i++)
3323 		if(geometries[i]) fprintf(file,"%f\n",energies[i]);
3324 	fprintf(file,"max-force\n");
3325 	for(i=0;i<numberOfGeometries;i++)
3326 		if(geometries[i]) fprintf(file,"0.0\n");
3327 	fprintf(file,"rms-force\n");
3328 	for(i=0;i<numberOfGeometries;i++)
3329 		if(geometries[i]) fprintf(file,"0.0\n");
3330 
3331 	fprintf(file,"\n");
3332 	fprintf(file,"[GEOMETRIES]\n");
3333 	for(i=0;i<numberOfGeometries;i++)
3334 	{
3335 		if(!geometries[i]) continue;
3336 		fprintf(file,"%d\n",geometries[i]->molecule.nAtoms);
3337 		fprintf(file,"\n");
3338 		for(j=0;j<geometries[i]->molecule.nAtoms;j++)
3339 		fprintf(file," %s %f %f %f\n",
3340 				geometries[i]->molecule.atoms[j].prop.symbol,
3341 				geometries[i]->molecule.atoms[j].coordinates[0],
3342 				geometries[i]->molecule.atoms[j].coordinates[1],
3343 				geometries[i]->molecule.atoms[j].coordinates[2]
3344 				);
3345 	}
3346 	fprintf(file,"\n");
3347 	fprintf(file,"[GEOMS] 1\n"); /* for format # 1 */
3348 	fprintf(file,"%d 2\n",nG);
3349 	fprintf(file,"energy kcal/mol 1\n");
3350 	fprintf(file,"deltaE K 1\n");
3351 	k = -1;
3352 	for(i=0;i<numberOfGeometries;i++)
3353 	{
3354 		if(!geometries[i]) continue;
3355 		if(k<0) k = i;
3356 		fprintf(file,"%f\n",energies[i]);
3357 		if(k>=0) fprintf(file,"%f\n",(energies[i]-energies[k])*503.21892494);
3358 		else fprintf(file,"0\n");
3359 		fprintf(file,"%d %d %d\n",geometries[i]->molecule.nAtoms,
3360 		geometries[i]->molecule.totalCharge, geometries[i]->molecule.spinMultiplicity);
3361 		for(j=0;j<geometries[i]->molecule.nAtoms;j++)
3362 		{
3363                         int nc = 0;
3364                         int k;
3365                         for(k=0;k<geometries[i]->molecule.nAtoms;k++)
3366                                 if(geometries[i]->molecule.atoms[j].typeConnections&&geometries[i]->molecule.atoms[j].typeConnections[k]>0) nc++;
3367 
3368                         fprintf(file," %s %s %s %s %d %f %d %d %f %f %f %d ",
3369                                 geometries[i]->molecule.atoms[j].prop.symbol,
3370                                 geometries[i]->molecule.atoms[j].mmType,
3371                                 geometries[i]->molecule.atoms[j].pdbType,
3372                                 geometries[i]->molecule.atoms[j].residueName,
3373                                 geometries[i]->molecule.atoms[j].residueNumber,
3374                                 geometries[i]->molecule.atoms[j].charge,
3375                                 geometries[i]->molecule.atoms[j].layer,
3376                                 geometries[i]->molecule.atoms[j].variable,
3377                                 geometries[i]->molecule.atoms[j].coordinates[0],
3378                                 geometries[i]->molecule.atoms[j].coordinates[1],
3379                                 geometries[i]->molecule.atoms[j].coordinates[2],
3380                                 nc
3381                                 );
3382                         for(k=0;k< geometries[i]->molecule.nAtoms;k++)
3383                         {
3384                                 int nk =  geometries[i]->molecule.atoms[k].N-1;
3385                                 if(geometries[i]->molecule.atoms[j].typeConnections && geometries[i]->molecule.atoms[j].typeConnections[nk]>0)
3386                                         fprintf(file," %d %d", nk+1, geometries[i]->molecule.atoms[j].typeConnections[nk]);
3387                         }
3388                         fprintf(file,"\n");
3389 /*
3390 		fprintf(file," %s %s %s %s %d %f %d %f %f %f\n",
3391 				geometries[i]->molecule.atoms[j].prop.symbol,
3392 				geometries[i]->molecule.atoms[j].mmType,
3393 				geometries[i]->molecule.atoms[j].pdbType,
3394 				geometries[i]->molecule.atoms[j].residueName,
3395 				geometries[i]->molecule.atoms[j].residueNumber,
3396 				geometries[i]->molecule.atoms[j].charge,
3397 				geometries[i]->molecule.atoms[j].layer,
3398 				geometries[i]->molecule.atoms[j].coordinates[0],
3399 				geometries[i]->molecule.atoms[j].coordinates[1],
3400 				geometries[i]->molecule.atoms[j].coordinates[2]
3401 				);
3402 */
3403 		}
3404 	}
3405 	fclose(file);
3406 	return TRUE;
3407 
3408 }
3409 /*****************************************************************************/
runOneOptMopac(SemiEmpiricalModel * geom,gdouble * energy,gchar * fileNamePrefix,gchar * keyWords)3410 static gboolean runOneOptMopac(SemiEmpiricalModel* geom, gdouble* energy, gchar* fileNamePrefix, gchar* keyWords)
3411 {
3412 	FILE* file = NULL;
3413 	FILE* fileSH = NULL;
3414 	gint j;
3415 	gchar* fileNameIn = NULL;
3416 	gchar* fileNameOut = NULL;
3417 	gchar* fileNameSH = NULL;
3418 	gchar multiplicityStr[100];
3419 	gchar buffer[1024];
3420 	*energy = 0;
3421 #ifdef G_OS_WIN32
3422 	gchar c='%';
3423 #endif
3424 
3425 	if(!geom) return FALSE;
3426 	if(geom->molecule.nAtoms<1) return FALSE;
3427 #ifndef G_OS_WIN32
3428 	fileNameSH = g_strdup_printf("%sMopacOne.sh",fileNamePrefix);
3429 #else
3430 	fileNameSH = g_strdup_printf("%sMopacOne.bat",fileNamePrefix);
3431 #endif
3432  	fileSH = FOpen(fileNameSH, "w");
3433 	if(!fileSH) return FALSE;
3434 #ifdef G_OS_WIN32
3435 	fprintf(fileSH,"set PATH=%cPATH%c;\"%s\"\n",c,c,mopacDirectory);
3436 #endif
3437 
3438 	getMultiplicityName(spinMultiplicity, multiplicityStr);
3439 
3440 	fileNameIn = g_strdup_printf("%sOne.mop",fileNamePrefix);
3441  	file = FOpen(fileNameIn, "w");
3442 	if(!file)
3443 	{
3444  		if(fileNameIn) g_free(fileNameIn);
3445  		if(fileNameOut) g_free(fileNameOut);
3446  		if(fileNameSH) g_free(fileNameSH);
3447 		return FALSE;
3448 	}
3449 	fprintf(file,"* ===============================\n");
3450 	fprintf(file,"* Input file for Mopac\n");
3451 	fprintf(file,"* ===============================\n");
3452 	if(spinMultiplicity>1)
3453 	fprintf(file,"%s UHF CHARGE=%d %s\n",keyWords,totalCharge,multiplicityStr);
3454 	else
3455 	fprintf(file,"%s CHARGE=%d %s\n",keyWords,totalCharge,multiplicityStr);
3456 	fprintf(file,"\n");
3457 	fprintf(file,"Mopac file generated by Gabedit\n");
3458 
3459 	for(j=0;j<geom->molecule.nAtoms;j++)
3460 	{
3461 	fprintf(file," %s %f %d %f %d %f %d\n",
3462 			geom->molecule.atoms[j].prop.symbol,
3463 			geom->molecule.atoms[j].coordinates[0],
3464 			geom->molecule.atoms[j].variable,
3465 			geom->molecule.atoms[j].coordinates[1],
3466 			geom->molecule.atoms[j].variable,
3467 			geom->molecule.atoms[j].coordinates[2],
3468 			geom->molecule.atoms[j].variable
3469 			);
3470 	}
3471 	fclose(file);
3472 	{
3473 		gchar* str = NULL;
3474 		if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM7")) str = g_strdup_printf("Minimization by PM7/Mopac ... Please wait");
3475 		else if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM6-DH2")) str = g_strdup_printf("Minimization by PM6-DH2/Mopac ... Please wait");
3476 		else if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM6-DH+")) str = g_strdup_printf("Minimization by PM6-DH+/Mopac ... Please wait");
3477 		else if(strstr(keyWords,"SPARKLE") && strstr(keyWords,"PM6")) str = g_strdup_printf("Minimization by Sparkle/PM6/Mopac ... Please wait");
3478 		else if(strstr(keyWords,"SPARKLE") && strstr(keyWords,"AM1")) str = g_strdup_printf("Minimization by Sparkle/AM1/Mopac ... Please wait");
3479 		else if(strstr(keyWords,"SPARKLE") && strstr(keyWords,"PM3")) str = g_strdup_printf("Minimization by Sparkle/PM3/Mopac ... Please wait");
3480 		else if(strstr(keyWords,"XYZ") && strstr(keyWords,"PM6")) str = g_strdup_printf("Minimization by PM6/Mopac ... Please wait");
3481 		else if(strstr(keyWords,"XYZ") && strstr(keyWords,"AM1")) str = g_strdup_printf("Minimization by AM1/Mopac ... Please wait");
3482 		else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM6-DH2")) str = g_strdup_printf("ESP charges from PM6-DH2/Mopac ... Please wait");
3483 		else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM6-DH+")) str = g_strdup_printf("ESP charges from PM6-DH+/Mopac ... Please wait");
3484 		else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM6")) str = g_strdup_printf("ESP charges from PM6/Mopac ... Please wait");
3485 		else if(strstr(keyWords,"ESP") && strstr(keyWords,"PM7")) str = g_strdup_printf("ESP charges from PM7/Mopac ... Please wait");
3486 		else if(strstr(keyWords,"ESP") && strstr(keyWords,"AM1")) str = g_strdup_printf("ESP charges from AM1/Mopac ... Please wait");
3487 		else if(strstr(keyWords,"PM6-DH2")) str = g_strdup_printf("Computing of energy by PM6-DH2/Mopac .... Please wait");
3488 		else if(strstr(keyWords,"PM6-DH+")) str = g_strdup_printf("Computing of energy by PM6-DH+/Mopac .... Please wait");
3489 		else if(strstr(keyWords,"PM6")) str = g_strdup_printf("Computing of energy by PM6/Mopac .... Please wait");
3490 		else if(strstr(keyWords,"PM7")) str = g_strdup_printf("Computing of energy by PM7/Mopac .... Please wait");
3491 		else str = g_strdup_printf("Computing of energy by AM1/Mopac .... Please wait");
3492 		set_text_to_draw(str);
3493 		if(str) g_free(str);
3494 		drawGeom();
3495     		while( gtk_events_pending() ) gtk_main_iteration();
3496 	}
3497 #ifndef G_OS_WIN32
3498 	fprintf(fileSH,"%s %s\n",NameCommandMopac,fileNameIn);
3499 	fclose(fileSH);
3500 	sprintf(buffer,"chmod u+x %s",fileNameSH);
3501 	{int ierr= system(buffer);}
3502 	{int ierr = system(fileNameSH);}
3503 #else
3504 	fprintf(fileSH,"\"%s\" \"%s\"\n",NameCommandMopac,fileNameIn);
3505 	fclose(fileSH);
3506 	sprintf(buffer,"\"%s\"",fileNameSH);
3507 	{int ierr= system(buffer);}
3508 #endif
3509 
3510 	fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix);
3511 	if(getEnergyMopac(fileNameOut,energy))
3512 	{
3513 		gchar* str = NULL;
3514 
3515 		read_geom_from_mopac_output_file(fileNameOut, -1);
3516 		str = g_strdup_printf("Energy by Mopac = %f", *energy);
3517 		set_text_to_draw(str);
3518 		drawGeom();
3519     		while( gtk_events_pending() ) gtk_main_iteration();
3520 		Waiting(1);
3521 		if(str) g_free(str);
3522 	}
3523 	else
3524 	{
3525 		printf("I cannot read energy = from %s file\n",fileNameOut);
3526  		if(fileNameIn) g_free(fileNameIn);
3527  		if(fileNameOut) g_free(fileNameOut);
3528  		if(fileNameSH) g_free(fileNameSH);
3529 		return FALSE;
3530 	}
3531 
3532  	if(fileNameIn) g_free(fileNameIn);
3533  	if(fileNameOut) g_free(fileNameOut);
3534  	if(fileNameSH) g_free(fileNameSH);
3535 	return TRUE;
3536 }
3537 /*****************************************************************************/
runMopacFiles(gint numberOfGeometries,SemiEmpiricalModel ** geometries,gdouble * energies,gchar * fileNamePrefix,gchar * keyWords)3538 static gboolean runMopacFiles(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords)
3539 {
3540 	gint i;
3541 	gint nG = 0;
3542 	gint nM = 0;
3543 	gchar* str = NULL;
3544 	for(i=0;i<numberOfGeometries;i++)
3545 	{
3546 		if(!geometries[i]) continue;
3547 		nG++;
3548 		if(str) g_free(str);
3549 		str = g_strdup_printf("Minimization by Mopac of geometry n = %d... Please wait", i+1);
3550 		set_text_to_draw(str);
3551 		drawGeom();
3552     		while( gtk_events_pending() ) gtk_main_iteration();
3553 		if(runOneOptMopac(geometries[i], &energies[i], fileNamePrefix, keyWords))
3554 		{
3555 			freeMoleculeSE(&geometries[i]->molecule);
3556 			/*
3557 			geometries[i]->molecule = createMoleculeSE(geometry0,Natoms,
3558 			geometries[i]->molecule.totalCharge,
3559 			geometries[i]->molecule.spinMultiplicity);
3560 			*/
3561 			geometries[i]->molecule = createFromGeomXYZMoleculeSE(
3562 			geometries[i]->molecule.totalCharge,
3563 			geometries[i]->molecule.spinMultiplicity,TRUE);
3564 			nM++;
3565 		}
3566 		if(StopCalcul) break;
3567 	}
3568 	if(str) g_free(str);
3569 	if(nM==nG) return TRUE;
3570 	return FALSE;
3571 
3572 }
3573 /*****************************************************************************/
runOneOptGeneric(SemiEmpiricalModel * geom,double * energy,char * fileNamePrefix,char * keyWords,char * genericCommand)3574 static gboolean runOneOptGeneric(SemiEmpiricalModel* geom, double* energy, char* fileNamePrefix, char* keyWords, char* genericCommand)
3575 {
3576 	FILE* file = NULL;
3577 	FILE* fileSH = NULL;
3578 	char* fileNameIn = NULL;
3579 	char* fileNameOut = NULL;
3580 	char* fileNameSH = NULL;
3581 	char buffer[1024];
3582 	int type = 0;
3583 	MoleculeSE* mol = &geom->molecule;
3584 	*energy = 0;
3585 #ifdef OS_WIN32
3586 	char c='%';
3587 #endif
3588 
3589 	if(!geom) return FALSE;
3590 	if(geom->molecule.nAtoms<1) return FALSE;
3591 #ifndef OS_WIN32
3592 	fileNameSH = g_strdup_printf("%sGeneOne.sh",fileNamePrefix);
3593 #else
3594 	fileNameSH = g_strdup_printf("%sGeneOne.bat",fileNamePrefix);
3595 #endif
3596  	fileSH = fopen(fileNameSH, "w");
3597 	if(!fileSH) return FALSE;
3598 
3599 	fileNameIn = g_strdup_printf("%sOne.inp",fileNamePrefix);
3600 	fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix);
3601 
3602  	file = fopen(fileNameIn, "w");
3603 	if(!file)
3604 	{
3605  		if(fileNameIn) free(fileNameIn);
3606  		if(fileNameOut) free(fileNameOut);
3607  		if(fileNameSH) free(fileNameSH);
3608 		return FALSE;
3609 	}
3610  	file = fopen(fileNameIn, "w");
3611 	if(!file)
3612 	{
3613  		if(fileNameIn) free(fileNameIn);
3614  		if(fileNameOut) free(fileNameOut);
3615  		if(fileNameSH) free(fileNameSH);
3616 		return FALSE;
3617 	}
3618 	if(strstr(keyWords,"Opt")) type = 2;
3619 	if(strstr(keyWords,"ENGRAD")) type = 1;
3620 	fprintf(file,"%d\n",type);
3621 	addMoleculeSEToFile(mol,file);
3622 	fclose(file);
3623 	{
3624 		char* str = NULL;
3625 		if(strstr(keyWords,"OPT")) str = g_strdup_printf("Minimization by Generic/%s ... Please wait",genericCommand);
3626 		else str = g_strdup_printf("Computing of energy by Generic/%s .... Please wait",genericCommand);
3627 		/*printf(str);*/
3628 		set_text_to_draw(str);
3629 		if(str) g_free(str);
3630 		drawGeom();
3631     		while( gtk_events_pending() ) gtk_main_iteration();
3632 	}
3633 #ifndef OS_WIN32
3634 	fprintf(fileSH,"%s %s %s",genericCommand,fileNameIn,fileNameOut);
3635 	fclose(fileSH);
3636 	sprintf(buffer,"chmod u+x %s",fileNameSH);
3637 	system(buffer);
3638 	system(fileNameSH);
3639 #else
3640 	fprintf(fileSH,"\"%s\" \"%s\" \"%s\"",genericCommand,fileNameIn,fileNameOut);
3641 	fclose(fileSH);
3642 	sprintf(buffer,"\"%s\"",fileNameSH);
3643 	system(buffer);
3644 #endif
3645 	if(getEnergyGeneric(fileNameOut,energy))
3646 	{
3647 		printf("Energy by Generic = %f\n", *energy);
3648 		readGeometryFromGenericOutputFile(mol,fileNameOut);
3649 	}
3650 	else
3651 	{
3652  		if(fileNameIn) free(fileNameIn);
3653  		if(fileNameOut) free(fileNameOut);
3654  		if(fileNameSH) free(fileNameSH);
3655 		return FALSE;
3656 	}
3657 
3658  	if(fileNameIn) free(fileNameIn);
3659  	if(fileNameOut) free(fileNameOut);
3660  	if(fileNameSH) free(fileNameSH);
3661 	return TRUE;
3662 }
3663 /*****************************************************************************/
runGenericFiles(int numberOfGeometries,SemiEmpiricalModel ** geometries,double * energies,char * fileNamePrefix,char * keyWords,char * genericCommand)3664 static gboolean runGenericFiles(int numberOfGeometries, SemiEmpiricalModel** geometries, double* energies, char* fileNamePrefix, char* keyWords, char* genericCommand)
3665 {
3666 	int i;
3667 	int nG = 0;
3668 	int nM = 0;
3669 	char* str = NULL;
3670 	for(i=0;i<numberOfGeometries;i++)
3671 	{
3672 		if(!geometries[i]) continue;
3673 		nG++;
3674 		if(str) free(str);
3675 		printf("Minimization by Generic of geometry n = %d... Please wait\n", i+1);
3676 		if(runOneOptGeneric(geometries[i], &energies[i], fileNamePrefix, keyWords, genericCommand))
3677 		{
3678 			nM++;
3679 		}
3680 	}
3681 	if(str) free(str);
3682 	if(nM==nG) return TRUE;
3683 	return FALSE;
3684 
3685 }
3686 /*****************************************************************************/
runOneOptFireFly(SemiEmpiricalModel * geom,gdouble * energy,gchar * fileNamePrefix,gchar * keyWords)3687 static gboolean runOneOptFireFly(SemiEmpiricalModel* geom, gdouble* energy, gchar* fileNamePrefix, gchar* keyWords)
3688 {
3689 	FILE* file = NULL;
3690 	FILE* fileSH = NULL;
3691 	gint j;
3692 	gchar* fileNameIn = NULL;
3693 	gchar* fileNameOut = NULL;
3694 	gchar* fileNameSH = NULL;
3695 	gchar multiplicityStr[100];
3696 	gchar buffer[1024];
3697 	*energy = 0;
3698 #ifdef G_OS_WIN32
3699 	gchar c='%';
3700 #endif
3701 
3702 	if(!geom) return FALSE;
3703 	if(geom->molecule.nAtoms<1) return FALSE;
3704 #ifndef G_OS_WIN32
3705 	fileNameSH = g_strdup_printf("%sPCGOne.sh",fileNamePrefix);
3706 #else
3707 	fileNameSH = g_strdup_printf("%sPCGOne.bat",fileNamePrefix);
3708 #endif
3709  	fileSH = FOpen(fileNameSH, "w");
3710 	if(!fileSH) return FALSE;
3711 #ifdef G_OS_WIN32
3712 	fprintf(fileSH,"set PATH=%cPATH%c;\"%s\"\n",c,c,fireflyDirectory);
3713 #endif
3714 
3715 	getMultiplicityName(spinMultiplicity, multiplicityStr);
3716 
3717 	fileNameIn = g_strdup_printf("%sOne.inp",fileNamePrefix);
3718  	file = FOpen(fileNameIn, "w");
3719 	if(!file)
3720 	{
3721  		if(fileNameIn) g_free(fileNameIn);
3722  		if(fileNameOut) g_free(fileNameOut);
3723  		if(fileNameSH) g_free(fileNameSH);
3724 		return FALSE;
3725 	}
3726 	fprintf(file,"! ======================================================\n");
3727 	fprintf(file,"!  Input file for FireFly\n");
3728 	fprintf(file,"! ======================================================\n");
3729 	if(strstr(keyWords,"RUNTYP"))
3730 	{
3731 		sscanf(strstr(keyWords,"RUNTYP"),"%s",buffer);
3732 		fprintf(file," $CONTRL %s $END\n",buffer);
3733 	}
3734 	if(strstr(keyWords,"SCFTYP"))
3735 	{
3736 		sscanf(strstr(keyWords,"SCFTYP"),"%s",buffer);
3737 		fprintf(file," $CONTRL %s $END\n",buffer);
3738 	}
3739 	else
3740 	{
3741 		if(spinMultiplicity==1)
3742 			fprintf(file," $CONTRL SCFTYP=RHF $END\n");
3743 		else
3744 			fprintf(file," $CONTRL SCFTYP=UHF $END\n");
3745 	}
3746 
3747 	fprintf(file," $CONTRL ICHARG=%d MULT=%d $END\n",totalCharge,spinMultiplicity);
3748 	if(strstr(keyWords,"GBASIS"))
3749 	{
3750 		sscanf(strstr(keyWords,"GBASIS"),"%s",buffer);
3751 		fprintf(file," $BASIS %s $END\n",buffer);
3752 	}
3753 	fprintf(file," $DATA\n");
3754 	fprintf(file,"Molecule specification\n");
3755 	fprintf(file,"C1\n");
3756 	for(j=0;j<geom->molecule.nAtoms;j++)
3757 	{
3758 		gchar* symbol = geom->molecule.atoms[j].prop.symbol;
3759 		SAtomsProp prop = prop_atom_get(symbol);
3760 		fprintf(file,"%s %f %f %f %f\n",
3761 			symbol,
3762 			(gdouble)prop.atomicNumber,
3763 			geom->molecule.atoms[j].coordinates[0],
3764 			geom->molecule.atoms[j].coordinates[1],
3765 			geom->molecule.atoms[j].coordinates[2]
3766 			);
3767 	}
3768 	fprintf(file," $END\n");
3769 	fclose(file);
3770 	fileNameOut = g_strdup_printf("%sOne.out",fileNamePrefix);
3771 #ifndef G_OS_WIN32
3772 	if(!strcmp(NameCommandFireFly,"pcgamess") || !strcmp(NameCommandFireFly,"nohup pcgamess")||
3773 	!strcmp(NameCommandFireFly,"firefly") || !strcmp(NameCommandFireFly,"nohup firefly"))
3774 	{
3775 		fprintf(fileSH,"mkdir %stmp\n",fileNamePrefix);
3776 		fprintf(fileSH,"cd %stmp\n",fileNamePrefix);
3777 		fprintf(fileSH,"cp %s input\n",fileNameIn);
3778 		fprintf(fileSH,"%s -p -o %s\n",NameCommandFireFly,fileNameOut);
3779 		fprintf(fileSH,"cd ..\n");
3780 		fprintf(fileSH,"rm PUNCH\n");
3781 		fprintf(fileSH,"/bin/rm -r  %stmp\n",fileNamePrefix);
3782 	}
3783 	else
3784 		fprintf(fileSH,"%s %s",NameCommandFireFly,fileNameIn);
3785 #else
3786 	 if(!strcmp(NameCommandFireFly,"pcgamess") ||
3787 	 !strcmp(NameCommandFireFly,"firefly") )
3788 	{
3789         	fprintf(fileSH,"mkdir \"%stmp\"\n",fileNamePrefix);
3790 		addUnitDisk(fileSH, fileNamePrefix);
3791 	 	fprintf(fileSH,"cd \"%stmp\"\n",fileNamePrefix);
3792          	fprintf(fileSH,"copy \"%s\" input\n",fileNameIn);
3793          	fprintf(fileSH,"%s -p -o \"%s\"\n",NameCommandFireFly,fileNameOut);
3794 	 	fprintf(fileSH,"cd ..\n");
3795          	fprintf(fileSH,"del PUNCH\n");
3796          	fprintf(fileSH,"del /Q  \"%stmp\"\n",fileNamePrefix);
3797          	fprintf(fileSH,"rmdir  \"%stmp\"\n",fileNamePrefix);
3798 	}
3799 	else
3800 		fprintf(fileSH,"%s %s",NameCommandFireFly,fileNameIn);
3801 #endif
3802 	fclose(fileSH);
3803 	{
3804 		gchar* str = NULL;
3805 		if(strstr(keyWords,"OPTIMIZE")) str = g_strdup_printf("Minimization by AM1/FireFly ... Please wait");
3806 		else str = g_strdup_printf("Computing of energy by AM1/FireFly .... Please wait");
3807 		set_text_to_draw(str);
3808 		if(str) g_free(str);
3809 		drawGeom();
3810     		while( gtk_events_pending() ) gtk_main_iteration();
3811 	}
3812 #ifndef G_OS_WIN32
3813 	sprintf(buffer,"chmod u+x %s",fileNameSH);
3814 	{int ierr= system(buffer);}
3815 	{int ierr = system(fileNameSH);}
3816 #else
3817 	sprintf(buffer,"\"%s\"",fileNameSH);
3818 	{int ierr= system(buffer);}
3819 #endif
3820 	if(getEnergyFireFly(fileNameOut,energy))
3821 	{
3822 		gchar* str = NULL;
3823 
3824 		read_geom_from_gamess_output_file(fileNameOut, -1);
3825 		str = g_strdup_printf("Energy by FireFly = %f", *energy);
3826 		set_text_to_draw(str);
3827 		drawGeom();
3828     		while( gtk_events_pending() ) gtk_main_iteration();
3829 		Waiting(1);
3830 		if(str) g_free(str);
3831 	}
3832 	else
3833 	{
3834  		if(fileNameIn) g_free(fileNameIn);
3835  		if(fileNameOut) g_free(fileNameOut);
3836  		if(fileNameSH) g_free(fileNameSH);
3837 		return FALSE;
3838 	}
3839 
3840  	if(fileNameIn) g_free(fileNameIn);
3841  	if(fileNameOut) g_free(fileNameOut);
3842  	if(fileNameSH) g_free(fileNameSH);
3843 	return TRUE;
3844 }
3845 /*****************************************************************************/
runFireFlyFiles(gint numberOfGeometries,SemiEmpiricalModel ** geometries,gdouble * energies,gchar * fileNamePrefix,gchar * keyWords)3846 static gboolean runFireFlyFiles(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords)
3847 {
3848 	gint i;
3849 	gint nG = 0;
3850 	gint nM = 0;
3851 	gchar* str = NULL;
3852 	for(i=0;i<numberOfGeometries;i++)
3853 	{
3854 		if(!geometries[i]) continue;
3855 		nG++;
3856 		if(str) g_free(str);
3857 		str = g_strdup_printf("Minimization by FireFly of geometry n = %d... Please wait", i+1);
3858 		set_text_to_draw(str);
3859 		drawGeom();
3860     		while( gtk_events_pending() ) gtk_main_iteration();
3861 		if(runOneOptFireFly(geometries[i], &energies[i], fileNamePrefix, keyWords))
3862 		{
3863 			freeMoleculeSE(&geometries[i]->molecule);
3864 			/*
3865 			geometries[i]->molecule = createMoleculeSE(geometry0,Natoms,
3866 			geometries[i]->molecule.totalCharge,
3867 			geometries[i]->molecule.spinMultiplicity);
3868 			*/
3869 			geometries[i]->molecule = createFromGeomXYZMoleculeSE(
3870 			geometries[i]->molecule.totalCharge,
3871 			geometries[i]->molecule.spinMultiplicity,TRUE);
3872 			nM++;
3873 		}
3874 		if(StopCalcul) break;
3875 	}
3876 	if(str) g_free(str);
3877 	if(nM==nG) return TRUE;
3878 	return FALSE;
3879 
3880 }
3881 /*************************************************************************************************************************************************/
runOpenBabelFiles(gint numberOfGeometries,SemiEmpiricalModel ** geometries,gdouble * energies,gchar * fileNamePrefix,gchar * keyWords)3882 static gboolean runOpenBabelFiles(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords)
3883 {
3884         int i;
3885         int nG = 0;
3886         int nM = 0;
3887 	gchar* str = NULL;
3888         if(!geometries) return FALSE;
3889         for(i=0;i<numberOfGeometries;i++)
3890         {
3891                 if(!geometries[i]) continue;
3892                 nG++;
3893 		if(str) g_free(str);
3894 		str = g_strdup_printf("Minimization by OpenBabel of geometry n = %d... Please wait", i+1);
3895 		set_text_to_draw(str);
3896 		drawGeom();
3897     		while( gtk_events_pending() ) gtk_main_iteration();
3898 		printf("str runOpenBabelFiles = %s\n",str);
3899 		//setConnectionsMoleculeSE(&geometries[i]->molecule);
3900 		//printf("End setConnectionsMoleculeSE\n");
3901                 if(runOneOpenBabel(&geometries[i]->molecule, fileNamePrefix, keyWords))
3902                 {
3903                         energies[i] = geometries[i]->molecule.energy;
3904                         nM++;
3905                 }
3906 		if(StopCalcul) break;
3907         }
3908 	if(str) g_free(str);
3909 	if(nM==nG) return TRUE;
3910 	return FALSE;
3911 
3912 }
3913 /*****************************************************************************/
testEqualDistances(gdouble * distancesI,gdouble * distancesJ,gint n,gdouble tol)3914 static gboolean testEqualDistances(gdouble* distancesI, gdouble* distancesJ, gint n, gdouble tol)
3915 {
3916 	gint k;
3917 	if(!distancesI) return FALSE;
3918 	if(!distancesJ) return FALSE;
3919 	if(n<1) return FALSE;
3920 	for (  k = 0; k < n; k++ )
3921 		if(fabs(distancesI[k]-distancesJ[k])>tol) return FALSE;
3922 	return TRUE;
3923 }
3924 /*****************************************************************************/
getDistancesBetweenAtoms(SemiEmpiricalModel * seModel)3925 static gdouble* getDistancesBetweenAtoms(SemiEmpiricalModel* seModel)
3926 {
3927 	gdouble* distances = NULL;
3928 	gint i;
3929 	gint j;
3930 	gint n;
3931 	gint k;
3932 	if(seModel->molecule.nAtoms<1) return distances;
3933 	n = seModel->molecule.nAtoms*(seModel->molecule.nAtoms-1)/2;
3934 	distances = g_malloc(n*sizeof(gdouble));
3935 	n = 0;
3936 	for (  i = 0; i < seModel->molecule.nAtoms-1; i++ )
3937 	for (  j = i+1; j < seModel->molecule.nAtoms; j++ )
3938 	{
3939 		gdouble x = seModel->molecule.atoms[i].coordinates[0]-seModel->molecule.atoms[j].coordinates[0];
3940 		gdouble y = seModel->molecule.atoms[i].coordinates[1]-seModel->molecule.atoms[j].coordinates[1];
3941 		gdouble z = seModel->molecule.atoms[i].coordinates[2]-seModel->molecule.atoms[j].coordinates[2];
3942 		distances[n++] = x*x + y*y + z*z;
3943 	}
3944 	for(i=0;i<n-1;i++)
3945 	{
3946 		k = i;
3947 		for(j=i+1;j<n;j++)
3948 			if(distances[j]<distances[k]) k= j;
3949 		if(k!=i)
3950 		{
3951 			gdouble d = distances[i];
3952 			distances[i] = distances[k];
3953 			distances[k] = d;
3954 		}
3955 	}
3956 	return distances;
3957 }
3958 /*****************************************************************************/
removedsToEnd(gint numberOfGeometries,SemiEmpiricalModel ** geometries,gdouble * energies,gboolean * removeds)3959 static void removedsToEnd(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gboolean* removeds)
3960 {
3961 	if(geometries && energies && removeds)
3962 	{
3963 		gint i;
3964 		gint j;
3965 		gint k;
3966 		for(i=0;i<numberOfGeometries-1;i++)
3967 		{
3968 			if(!removeds[i]) continue;
3969 			k = i;
3970 			for(j=i+1;j<numberOfGeometries;j++)
3971 				if(!removeds[j]) { k= j; break;}
3972 			if(k!=i)
3973 			{
3974 				gdouble energy = energies[i];
3975 				gboolean r = removeds[i];
3976 				SemiEmpiricalModel* g = geometries[i];
3977 
3978 				energies[i] = energies[k];
3979 				energies[k] = energy;
3980 				geometries[i] = geometries[k];
3981 				geometries[k] = g;
3982 				removeds[i] = removeds[k];
3983 				removeds[k] = r;
3984 			}
3985 		}
3986 	}
3987 }
3988 /*****************************************************************************/
computeRemoveds(gint numberOfGeometries,SemiEmpiricalModel ** geometries,gdouble * energies,gboolean * removeds,gdouble tolEnergy,gdouble tolDistance)3989 static void computeRemoveds(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gboolean *removeds,
3990 		gdouble tolEnergy, gdouble tolDistance)
3991 {
3992 	gint i;
3993 	gint j;
3994 	gdouble* distancesI = NULL;
3995 	gdouble* distancesJ = NULL;
3996 	if(tolDistance<=0 && tolEnergy<=0) return;
3997 	if(!geometries || !energies) return;
3998 	if(numberOfGeometries<1) return;
3999 	for(i=0;i<numberOfGeometries-1;i++)
4000 	{
4001 		gint n;
4002 		if(removeds[i]) continue;
4003 		if(tolDistance>0) distancesI =  getDistancesBetweenAtoms(geometries[i]);
4004 		n = geometries[i]->molecule.nAtoms*(geometries[i]->molecule.nAtoms-1)/2;
4005 		for(j=i+1;j<numberOfGeometries;j++)
4006 		{
4007 			if(removeds[j]) continue;
4008 			if(tolEnergy>0 && fabs(energies[j]-energies[i])<tolEnergy && geometries[i]->molecule.nAtoms==geometries[j]->molecule.nAtoms)
4009 			{
4010 				if(tolDistance>0)
4011 				{
4012 					distancesJ =  getDistancesBetweenAtoms(geometries[j]);
4013 					if(testEqualDistances(distancesI, distancesJ, n, tolDistance))
4014 						removeds[j] = TRUE;
4015 					if(distancesJ) g_free(distancesJ);
4016 					distancesJ = NULL;
4017 				}
4018 				else
4019 					removeds[j] = TRUE;
4020 			}
4021 			if(tolEnergy<0 && tolDistance>0 && geometries[i]->molecule.nAtoms==geometries[j]->molecule.nAtoms)
4022 			{
4023 				distancesJ =  getDistancesBetweenAtoms(geometries[j]);
4024 				if(testEqualDistances(distancesI, distancesJ, n, tolDistance))
4025 					removeds[j] = TRUE;
4026 				if(distancesJ) g_free(distancesJ);
4027 				distancesJ = NULL;
4028 			}
4029 		}
4030 		if(distancesI) g_free(distancesI);
4031 		distancesI = NULL;
4032 	}
4033 
4034 }
4035 /*****************************************************************************/
removeIdenticalGeometries(gint * nG,SemiEmpiricalModel *** geoms,gdouble ** eners,gdouble tolEnergy,gdouble tolDistance)4036 static void removeIdenticalGeometries(gint* nG, SemiEmpiricalModel*** geoms, gdouble** eners, gdouble tolEnergy, gdouble tolDistance)
4037 {
4038 	gint i;
4039 	gint numberOfGeometries =*nG;
4040 	SemiEmpiricalModel** geometries = *geoms;
4041 	gdouble* energies = *eners;
4042 	gboolean* removeds = NULL;
4043 	gint newN = 0;
4044 	if(numberOfGeometries<1) return;
4045 	removeds = g_malloc(numberOfGeometries*sizeof(gboolean));
4046 	for(i=0;i<numberOfGeometries;i++) removeds[i] = FALSE;
4047 	computeRemoveds(numberOfGeometries, geometries, energies, removeds, tolEnergy, tolDistance);
4048 	removedsToEnd(numberOfGeometries, geometries, energies, removeds);
4049 
4050 	for(i=0;i<numberOfGeometries;i++)
4051 	{
4052 		if(removeds[i])
4053 		{
4054 			if(geometries[i]) freeSemiEmpiricalModel(geometries[i]);
4055 		}
4056 		else newN++;
4057 	}
4058 	if(newN==0) newN = 1;
4059 	if(newN==numberOfGeometries) return;
4060 	*nG = newN;
4061 	*eners = g_realloc(*eners,newN*sizeof(gdouble));
4062 	*geoms = g_realloc(*geoms,newN*sizeof(SemiEmpiricalModel**));
4063 
4064 	g_free(removeds);
4065 }
4066 /*****************************************************************************/
sortGeometries(gint numberOfGeometries,SemiEmpiricalModel ** geometries,gdouble * energies)4067 static void sortGeometries(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies)
4068 {
4069 	if(geometries && energies)
4070 	{
4071 		gint i;
4072 		gint j;
4073 		gint k;
4074 		for(i=0;i<numberOfGeometries-1;i++)
4075 		{
4076 			k = i;
4077 			for(j=i+1;j<numberOfGeometries;j++)
4078 				if(energies[j]<energies[k]) k= j;
4079 			if(k!=i)
4080 			{
4081 				gdouble energy = energies[i];
4082 				SemiEmpiricalModel* g = geometries[i];
4083 
4084 				energies[i] = energies[k];
4085 				energies[k] = energy;
4086 				geometries[i] = geometries[k];
4087 				geometries[k] = g;
4088 			}
4089 		}
4090 	}
4091 }
4092 /*****************************************************************************/
createMopacFiles(gint numberOfGeometries,SemiEmpiricalModel ** geometries,gdouble * energies,gchar * fileNamePrefix,gchar * keyWords)4093 static gboolean createMopacFiles(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords)
4094 {
4095 	FILE* file = NULL;
4096 	FILE* fileSH = NULL;
4097 	gint i;
4098 	gint j;
4099 	gint nG = 0;
4100 	gchar* fileName = NULL;
4101 	gchar* fileNameSH = NULL;
4102 	gchar multiplicityStr[100];
4103 #ifdef G_OS_WIN32
4104 	gchar c='%';
4105 #endif
4106 
4107 	if(numberOfGeometries<1) return FALSE;
4108 	if(!geometries) return FALSE;
4109 	if(!energies) return FALSE;
4110 	for(i=0;i<numberOfGeometries;i++) if(geometries[i]) nG++;
4111 	if(nG<1) return FALSE;
4112 #ifndef G_OS_WIN32
4113 	fileNameSH = g_strdup_printf("%sMopac.sh",fileNamePrefix);
4114 #else
4115 	fileNameSH = g_strdup_printf("%sMopac.bat",fileNamePrefix);
4116 #endif
4117  	fileSH = FOpen(fileNameSH, "w");
4118 	if(!fileSH) return FALSE;
4119 #ifdef G_OS_WIN32
4120 	fprintf(fileSH,"set PATH=%cPATH%c;\"%s\"\n",c,c,mopacDirectory);
4121 #endif
4122 
4123 	getMultiplicityName(spinMultiplicity, multiplicityStr);
4124 
4125 	for(i=0;i<numberOfGeometries;i++)
4126 	{
4127 		if(!geometries[i]) continue;
4128  		if(fileName) g_free(fileName);
4129 		fileName = g_strdup_printf("%s_%d.mop",fileNamePrefix,i+1);
4130  		file = FOpen(fileName, "w");
4131 		if(!file) return FALSE;
4132 		fprintf(file,"* ===============================\n");
4133 		fprintf(file,"* Input file for Mopac\n");
4134 		fprintf(file,"* Semi-Emperical Energy(kCal/mol) =%f\n",energies[i]);
4135 		fprintf(file,"* ===============================\n");
4136 		if(spinMultiplicity>1)
4137 		fprintf(file,"%s UHF CHARGE=%d %s\n",keyWords,totalCharge,multiplicityStr);
4138 		else
4139 		fprintf(file,"%s CHARGE=%d %s\n",keyWords,totalCharge,multiplicityStr);
4140 		fprintf(file,"\n");
4141 		fprintf(file,"Mopac file generated by Gabedit\n");
4142 
4143 		for(j=0;j<geometries[i]->molecule.nAtoms;j++)
4144 		{
4145 		fprintf(file," %s %f %d %f %d %f %d\n",
4146 				geometries[i]->molecule.atoms[j].prop.symbol,
4147 				geometries[i]->molecule.atoms[j].coordinates[0],
4148 				1,
4149 				geometries[i]->molecule.atoms[j].coordinates[1],
4150 				1,
4151 				geometries[i]->molecule.atoms[j].coordinates[2],
4152 				1
4153 				);
4154 		}
4155 		fclose(file);
4156 		fprintf(fileSH,"%s %s\n",NameCommandMopac,fileName);
4157 	}
4158 	fclose(fileSH);
4159 #ifndef G_OS_WIN32
4160 	{
4161 		gchar buffer[1024];
4162   		sprintf(buffer,"chmod u+x %s",fileNameSH);
4163 		{int ierr= system(buffer);}
4164 	}
4165 #endif
4166  	if(fileName) g_free(fileName);
4167  	if(fileNameSH) g_free(fileNameSH);
4168 	return TRUE;
4169 
4170 }
4171 /*****************************************************************************/
createGaussianFiles(gint numberOfGeometries,SemiEmpiricalModel ** geometries,gdouble * energies,gchar * fileNamePrefix,gchar * keyWords)4172 static gboolean createGaussianFiles(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords)
4173 {
4174 	FILE* file = NULL;
4175 	FILE* fileSH = NULL;
4176 	gint i;
4177 	gint j;
4178 	gint nG = 0;
4179 	gchar* fileName = NULL;
4180 	gchar* fileNameSH = NULL;
4181 
4182 	if(numberOfGeometries<1) return FALSE;
4183 	if(!geometries) return FALSE;
4184 	if(!energies) return FALSE;
4185 	for(i=0;i<numberOfGeometries;i++) if(geometries[i]) nG++;
4186 	if(nG<1) return FALSE;
4187 	fileNameSH = g_strdup_printf("%sGauss.sh",fileNamePrefix);
4188 #ifndef G_OS_WIN32
4189 	fileNameSH = g_strdup_printf("%sGauss.sh",fileNamePrefix);
4190 #else
4191 	fileNameSH = g_strdup_printf("%sGauss.bat",fileNamePrefix);
4192 #endif
4193  	fileSH = FOpen(fileNameSH, "w");
4194 	if(!fileSH) return FALSE;
4195 
4196 
4197 	for(i=0;i<numberOfGeometries;i++)
4198 	{
4199 		if(!geometries[i]) continue;
4200  		if(fileName) g_free(fileName);
4201 		fileName = g_strdup_printf("%s_%d.com",fileNamePrefix,i+1);
4202  		file = FOpen(fileName, "w");
4203 		if(!file) return FALSE;
4204 		fprintf(file,"#P %s\n",keyWords);
4205 		fprintf(file,"#  Units(Ang,Deg)\n");
4206 		fprintf(file,"\n");
4207 		fprintf(file,"File generated by Gabedit\n");
4208 		fprintf(file,"Semi-emperical Energy(kCal/mol) = %f\n",energies[i]);
4209 		fprintf(file,"\n");
4210 		fprintf(file,"%d %d\n",totalCharge,spinMultiplicity);
4211 		for(j=0;j<geometries[i]->molecule.nAtoms;j++)
4212 		{
4213 		fprintf(file,"%s %f %f %f\n",
4214 				geometries[i]->molecule.atoms[j].prop.symbol,
4215 				geometries[i]->molecule.atoms[j].coordinates[0],
4216 				geometries[i]->molecule.atoms[j].coordinates[1],
4217 				geometries[i]->molecule.atoms[j].coordinates[2]
4218 				);
4219 		}
4220 		fprintf(file,"\n");
4221 		fclose(file);
4222 		fprintf(fileSH,"%s %s\n",NameCommandGaussian,fileName);
4223 	}
4224 	fclose(fileSH);
4225 #ifndef G_OS_WIN32
4226 	{
4227 		gchar buffer[1024];
4228   		sprintf(buffer,"chmod u+x %s",fileNameSH);
4229 		{int ierr= system(buffer);}
4230 	}
4231 #endif
4232  	if(fileName) g_free(fileName);
4233  	if(fileNameSH) g_free(fileNameSH);
4234 	return TRUE;
4235 
4236 }
4237 /*****************************************************************************/
createFireFlyFiles(gint numberOfGeometries,SemiEmpiricalModel ** geometries,gdouble * energies,gchar * fileNamePrefix,gchar * keyWords)4238 static gboolean createFireFlyFiles(gint numberOfGeometries, SemiEmpiricalModel** geometries, gdouble* energies, gchar* fileNamePrefix, gchar* keyWords)
4239 {
4240 	FILE* file = NULL;
4241 	FILE* fileSH = NULL;
4242 	gint i;
4243 	gint j;
4244 	gint nG = 0;
4245 	gchar* fileName = NULL;
4246 	gchar* fileNameSH = NULL;
4247 	gchar buffer[1024];
4248 #ifdef G_OS_WIN32
4249 	gchar c='%';
4250 #endif
4251 
4252 	if(numberOfGeometries<1) return FALSE;
4253 	if(!geometries) return FALSE;
4254 	if(!energies) return FALSE;
4255 	for(i=0;i<numberOfGeometries;i++) if(geometries[i]) nG++;
4256 	if(nG<1) return FALSE;
4257 #ifndef G_OS_WIN32
4258 	fileNameSH = g_strdup_printf("%sPCGam.sh",fileNamePrefix);
4259 #else
4260 	fileNameSH = g_strdup_printf("%sPCGam.bat",fileNamePrefix);
4261 #endif
4262  	fileSH = FOpen(fileNameSH, "w");
4263 	if(!fileSH) return FALSE;
4264 #ifdef G_OS_WIN32
4265 	fprintf(fileSH,"set PATH=%cPATH%c;\"%s\"\n",c,c,fireflyDirectory);
4266 #endif
4267 
4268 
4269 	uppercase(keyWords);
4270 	for(i=0;i<numberOfGeometries;i++)
4271 	{
4272 		if(!geometries[i]) continue;
4273  		if(fileName) g_free(fileName);
4274 		fileName = g_strdup_printf("%sP_%d.inp",fileNamePrefix,i+1);
4275  		file = FOpen(fileName, "w");
4276 		if(!file) return FALSE;
4277 		fprintf(file,"! ======================================================\n");
4278 		fprintf(file,"!  Input file for FireFly\n");
4279 		fprintf(file,"! ======================================================\n");
4280 		if(strstr(keyWords,"RUNTYP"))
4281 		{
4282 			sscanf(strstr(keyWords,"RUNTYP"),"%s",buffer);
4283 			fprintf(file," $CONTRL %s $END\n",buffer);
4284 		}
4285 		if(strstr(keyWords,"SCFTYP"))
4286 		{
4287 			sscanf(strstr(keyWords,"SCFTYP"),"%s",buffer);
4288 			fprintf(file," $CONTRL %s $END\n",buffer);
4289 		}
4290 		else
4291 		{
4292 			if(spinMultiplicity==1)
4293 				fprintf(file," $CONTRL SCFTYP=RHF $END\n");
4294 			else
4295 				fprintf(file," $CONTRL SCFTYP=UHF $END\n");
4296 		}
4297 
4298 		fprintf(file," $CONTRL ICHARG=%d MULT=%d $END\n",totalCharge,spinMultiplicity);
4299 		if(strstr(keyWords,"GBASIS"))
4300 		{
4301 			sscanf(strstr(keyWords,"GBASIS"),"%s",buffer);
4302 			fprintf(file," $BASIS %s $END\n",buffer);
4303 		}
4304 		fprintf(file," $DATA\n");
4305 		fprintf(file,"Molecule specification\n");
4306 		fprintf(file,"C1\n");
4307 		for(j=0;j<geometries[i]->molecule.nAtoms;j++)
4308 		{
4309 			gchar* symbol = geometries[i]->molecule.atoms[j].prop.symbol;
4310 			SAtomsProp prop = prop_atom_get(symbol);
4311 			fprintf(file,"%s %f %f %f %f\n",
4312 				symbol,
4313 				(gdouble)prop.atomicNumber,
4314 				geometries[i]->molecule.atoms[j].coordinates[0],
4315 				geometries[i]->molecule.atoms[j].coordinates[1],
4316 				geometries[i]->molecule.atoms[j].coordinates[2]
4317 				);
4318 		}
4319 		fprintf(file," $END\n");
4320 		fclose(file);
4321 
4322 #ifndef G_OS_WIN32
4323 		if(!strcmp(NameCommandFireFly,"pcgamess") || !strcmp(NameCommandFireFly,"nohup pcgamess")||
4324 		!strcmp(NameCommandFireFly,"firefly") || !strcmp(NameCommandFireFly,"nohup firefly"))
4325 		{
4326 			fprintf(fileSH,"mkdir %stmp%d\n",fileNamePrefix,i+1);
4327 			fprintf(fileSH,"cd %stmp%d\n",fileNamePrefix,i+1);
4328 			fprintf(fileSH,"cp %s input\n",fileName);
4329 			fprintf(fileSH,"%s -p -o %sP_%d.log\n",NameCommandFireFly,fileNamePrefix,i+1);
4330 			fprintf(fileSH,"cd ..\n");
4331 			fprintf(fileSH,"mv PUNCH  %sP_%d.pun\n",fileNamePrefix,i+1);
4332 			fprintf(fileSH,"/bin/rm -r  %stmp%d\n",fileNamePrefix,i+1);
4333 		}
4334 		else
4335 			fprintf(fileSH,"%s %s",NameCommandFireFly,fileName);
4336 #else
4337 	 	if(!strcmp(NameCommandFireFly,"pcgamess") ||
4338 	 	!strcmp(NameCommandFireFly,"firefly") )
4339 		{
4340          		fprintf(fileSH,"mkdir %stmp%d\n",fileNamePrefix,i+1);
4341 			addUnitDisk(fileSH, fileNamePrefix);
4342 	 		fprintf(fileSH,"cd %stmp%d\n",fileNamePrefix,i+1);
4343          		fprintf(fileSH,"copy %s input\n",fileName);
4344          		fprintf(fileSH,"%s -p -o %sP_%d.log\n",NameCommandFireFly,fileNamePrefix,i+1);
4345 	 		fprintf(fileSH,"cd ..\n");
4346          		fprintf(fileSH,"move PUNCH  %sP_%d.pun\n",fileNamePrefix,i+1);
4347          		fprintf(fileSH,"del /Q  %stmp%d\n",fileNamePrefix,i+1);
4348          		fprintf(fileSH,"rmdir  %stmp%d\n",fileNamePrefix,i+1);
4349 		}
4350 		else
4351 			fprintf(fileSH,"%s %s",NameCommandFireFly,fileName);
4352 #endif
4353 	}
4354 	fclose(fileSH);
4355 #ifndef G_OS_WIN32
4356 	{
4357 		gchar buffer[1024];
4358   		sprintf(buffer,"chmod u+x %s",fileNameSH);
4359 		{int ierr= system(buffer);}
4360 	}
4361 #endif
4362  	if(fileName) g_free(fileName);
4363  	if(fileNameSH) g_free(fileNameSH);
4364 	return TRUE;
4365 
4366 }
4367 /*****************************************************************************/
semiEmpiricalMDConfo(GtkWidget * Win,gpointer data)4368 static void semiEmpiricalMDConfo(GtkWidget* Win, gpointer data)
4369 {
4370 	SemiEmpiricalModel seModel;
4371 	SemiEmpiricalMD seMD;
4372 	gint updateFrequency = 1;
4373 	gdouble heatTime;
4374 	gdouble equiTime;
4375 	gdouble runTime;
4376 	gdouble heatTemp;
4377 	gdouble equiTemp;
4378 	gdouble runTemp;
4379 	gdouble stepSize;
4380 	MDIntegratorType integrator = VERLET;
4381 	gchar* fileNameGeom = NULL;
4382 	gchar* fileNameTraj = NULL;
4383 	gchar* fileNameProp = NULL;
4384 	gchar* mopacKeywords = NULL;
4385 	gchar* gaussianKeywords = NULL;
4386 	gchar* fireflyKeywords = NULL;
4387 	gdouble friction=40;
4388 	gdouble collide = 20;
4389 	MDThermostatType thermostat = NONE;
4390 	gint numberOfGeometries = 2;
4391 	SemiEmpiricalModel** geometries = NULL;
4392 	gdouble* energies = NULL;
4393 	gboolean optMopac = FALSE;
4394 	gboolean optFireFly = FALSE;
4395 	gboolean optOpenBabel = FALSE;
4396 	gboolean optGeneric = FALSE;
4397 	gchar* program = NULL;
4398 	gchar* method = NULL;
4399 	gdouble tolEnergy = -1;
4400 	gdouble tolDistance = -1;
4401 	SemiEmpiricalModelConstraints constraints = NOCONSTRAINTS;
4402 
4403 	gint i;
4404 	gchar message[BSIZE]="Created files :\n";
4405 	gchar* dirName = NULL;
4406 
4407 	constraints = NOCONSTRAINTS;
4408 	if(GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSCONSTRAINTS])->active)
4409 				constraints = BONDSCONSTRAINTS;
4410 	if(GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSANGLESCONSTRAINTS])->active)
4411 				constraints = BONDSANGLESCONSTRAINTS;
4412 
4413 
4414 	if(GTK_TOGGLE_BUTTON (buttonTolerance[TOLE])->active)
4415 		tolEnergy = atoi(gtk_entry_get_text(GTK_ENTRY(entryTolerance[TOLE])));
4416 	if(GTK_TOGGLE_BUTTON (buttonTolerance[TOLD])->active)
4417 		tolDistance = atoi(gtk_entry_get_text(GTK_ENTRY(entryTolerance[TOLD])));
4418 
4419 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
4420 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
4421 	TotalCharges[0] = totalCharge;
4422 	SpinMultiplicities[0] = spinMultiplicity;
4423 	if(GTK_TOGGLE_BUTTON (buttonMopac)->active)
4424 	{
4425 		program = g_strdup("Mopac");
4426 		method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryMopacMethod)));
4427 	}
4428 	else if(GTK_TOGGLE_BUTTON (buttonFireFly)->active)
4429 	{
4430 		program = g_strdup("FireFly");
4431 		method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFireFlyMethod)));
4432 	}
4433 	else if(GTK_TOGGLE_BUTTON (buttonOpenBabel)->active)
4434 	{
4435 		program = g_strdup("OpenBabel");
4436 		method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryOpenBabelMethod)));
4437 	}
4438 	else
4439 	{
4440 		program = g_strdup("Generic");
4441 		method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryGenericMethod)));
4442 		if(!genericProgName) g_free(genericProgName);
4443 		genericProgName = g_strdup(method);
4444 	}
4445 
4446 	updateFrequency = atoi(gtk_entry_get_text(GTK_ENTRY(entryMDRafresh)));
4447 	if(updateFrequency<0) updateFrequency = 0;
4448 
4449 	heatTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[0])));
4450 	equiTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[1])));
4451 	runTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[2])));
4452 
4453 	heatTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[0])));
4454 	runTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[2])));
4455 	/* equiTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[1])));*/
4456 	equiTemp = runTemp;
4457 
4458 	stepSize = atof(gtk_entry_get_text(GTK_ENTRY(entryMDStepSize)));
4459 
4460 
4461 	if(GTK_TOGGLE_BUTTON (buttonMDOptions[BEEMAN])->active) integrator = BEEMAN;
4462 	if(GTK_TOGGLE_BUTTON (buttonMDOptions[STOCHASTIC])->active) integrator = STOCHASTIC;
4463 
4464 	if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[ANDERSEN])->active) thermostat = ANDERSEN;
4465 	if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[BERENDSEN])->active) thermostat = BERENDSEN;
4466 	if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[BUSSI])->active) thermostat = BUSSI;
4467 
4468 	if( integrator == STOCHASTIC)
4469 		friction = atof(gtk_entry_get_text(GTK_ENTRY(entrySDFriction)));
4470 
4471 	collide = atof(gtk_entry_get_text(GTK_ENTRY(entrySDCollide)));
4472 
4473 	if(heatTime<0) heatTime = 1;
4474 	if(equiTime<0) equiTime = 1;
4475 	if(runTime<0) runTime = 1;
4476 
4477 	if(heatTemp<0) heatTemp = 0;
4478 	if(equiTemp<0) runTemp = 300;
4479 	if(runTemp<0) runTemp = 300;
4480 
4481 	if(stepSize<0) stepSize = 1.0;
4482 	if(stepSize>5) stepSize = 5.0;
4483 
4484 	optMopac = GTK_TOGGLE_BUTTON (buttonPostOpt)->active && GTK_TOGGLE_BUTTON (buttonMopac)->active;
4485 	optFireFly = GTK_TOGGLE_BUTTON (buttonPostOpt)->active && GTK_TOGGLE_BUTTON (buttonFireFly)->active;
4486 	optOpenBabel = GTK_TOGGLE_BUTTON (buttonPostOpt)->active && GTK_TOGGLE_BUTTON (buttonOpenBabel)->active;
4487 	optGeneric = GTK_TOGGLE_BUTTON (buttonPostOpt)->active && GTK_TOGGLE_BUTTON (buttonGeneric)->active;
4488 	/* number for geometries */
4489 	{
4490 		gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryNumberOfGeom)));
4491 		numberOfGeometries = atoi(tmp);
4492 		if(numberOfGeometries<2) numberOfGeometries = 2;
4493 		g_free(tmp);
4494 	}
4495 	/* fileName for geometries */
4496 	{
4497 		dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector));
4498 		gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameGeom)));
4499 		if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR)
4500 			fileNameGeom = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp);
4501 		else
4502 			fileNameGeom = g_strdup_printf("%s%s",dirName, tmp);
4503 
4504 		g_free(tmp);
4505 	}
4506 	if(GTK_TOGGLE_BUTTON (buttonCreateGaussian)->active)
4507 		gaussianKeywords = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryGaussianKeywords)));
4508 	if(GTK_TOGGLE_BUTTON (buttonCreateMopac)->active)
4509 		mopacKeywords = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryMopacKeywords)));
4510 	if(GTK_TOGGLE_BUTTON (buttonCreateFireFly)->active)
4511 		fireflyKeywords = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFireFlyKeywords)));
4512 
4513 	if(GTK_TOGGLE_BUTTON (buttonSaveTraj)->active)
4514 	{
4515 		if(!dirName) dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector));
4516 		gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameTraj)));
4517 		if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR)
4518 			fileNameTraj = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp);
4519 		else
4520 			fileNameTraj = g_strdup_printf("%s%s",dirName, tmp);
4521 
4522 
4523 		g_free(tmp);
4524 	}
4525 	if(GTK_TOGGLE_BUTTON (buttonSaveProp)->active)
4526 	{
4527 		if(!dirName) dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector));
4528 		gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameProp)));
4529 		if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR)
4530 			fileNameProp = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp);
4531 		else
4532 			fileNameProp = g_strdup_printf("%s%s",dirName, tmp);
4533 		g_free(tmp);
4534 	}
4535 
4536 
4537 	gtk_widget_destroy(Win);
4538     	while( gtk_events_pending() ) gtk_main_iteration();
4539 
4540 	set_sensitive_stop_button( TRUE);
4541 	StopCalcul = FALSE;
4542 
4543 	if(!strcmp(program,"Mopac")) seModel = createMopacModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName, constraints);
4544 	else if(!strcmp(program,"FireFly")) seModel = createFireFlyModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName,constraints);
4545 	else if(!strcmp(program,"OpenBabel")) seModel = createOpenBabelModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName,constraints);
4546 	else seModel = createGenericModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName,constraints);
4547 
4548 	g_free(program);
4549 
4550 	if(StopCalcul)
4551 	{
4552 		set_text_to_draw(" ");
4553 		set_statubar_operation_str(_("Calculation Canceled "));
4554 		drawGeom();
4555 		set_sensitive_stop_button( FALSE);
4556 		return;
4557 	}
4558 
4559 
4560 	set_sensitive_stop_button( TRUE);
4561 	{
4562 		gint i;
4563 		for(i=0;i<4;i++) NumSelAtoms[i] = -1;
4564 		change_of_center(NULL,NULL);
4565 	}
4566 
4567 	geometries = runSemiEmpiricalMDConfo(&seMD, &seModel,
4568 		updateFrequency, heatTime, equiTime, runTime, heatTemp, equiTemp, runTemp, stepSize,
4569 		integrator, thermostat, friction, collide, numberOfGeometries, fileNameTraj, fileNameProp);
4570 	freeSemiEmpiricalModel(&seModel);
4571 	if(!StopCalcul && geometries && numberOfGeometries>0)
4572 	{
4573 		gint i;
4574 		energies = g_malloc(numberOfGeometries*sizeof(gdouble));
4575 		for(i=0;i<numberOfGeometries;i++)
4576 			energies[i] = geometries[i]->molecule.energy;
4577 	}
4578 
4579 	if(StopCalcul)
4580 	{
4581 		set_text_to_draw(" ");
4582 		set_statubar_operation_str(_("Calculation canceled"));
4583 		drawGeom();
4584 	}
4585 	set_sensitive_stop_button( FALSE);
4586 	set_text_to_draw(" ");
4587 	/* minimazation by mopac*/
4588 	if(optMopac && !StopCalcul)
4589 	{
4590 		gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom);
4591 		gchar* keys=g_strdup_printf("%s XYZ",method);
4592 		if(runMopacFiles(numberOfGeometries, geometries, energies, fileNamePrefix, keys))
4593 		{
4594 			sortGeometries(numberOfGeometries, geometries, energies);
4595 			removeIdenticalGeometries(&numberOfGeometries, &geometries, &energies, tolEnergy, tolDistance);
4596 			if(saveConfoGeometries(numberOfGeometries, geometries, energies, fileNameGeom))
4597 			{
4598 				read_gabedit_file_add_list(fileNameGeom);
4599 				strcat(message,fileNameGeom);
4600 				strcat(message,_("\n\tGeometries after minimization by Mopac"));
4601 				strcat(message,_("\n\tTo read this file : 'Read/Gabedit file'\n\n"));
4602 			}
4603 		}
4604 		if(fileNamePrefix) g_free(fileNamePrefix);
4605 		if(keys)g_free(keys);
4606 	}
4607 	/* minimazation by FireFly AM1*/
4608 	if(optFireFly && !StopCalcul)
4609 	{
4610 		gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom);
4611 		gchar* keys=g_strdup_printf("RUNTYP=Optimize GBASIS=%s",method);
4612 		if(runFireFlyFiles(numberOfGeometries, geometries, energies, fileNamePrefix, keys))
4613 		{
4614 			sortGeometries(numberOfGeometries, geometries, energies);
4615 			removeIdenticalGeometries(&numberOfGeometries, &geometries, &energies, tolEnergy, tolDistance);
4616 			if(saveConfoGeometries(numberOfGeometries, geometries, energies, fileNameGeom))
4617 			{
4618 				read_gabedit_file_add_list(fileNameGeom);
4619 				strcat(message,fileNameGeom);
4620 				strcat(message,_("\n\tGeometries after minimization by FireFly"));
4621 				strcat(message,_("\n\tTo read this file : 'Read/Gabedit file'\n\n"));
4622 			}
4623 
4624 		}
4625 		if(fileNamePrefix) g_free(fileNamePrefix);
4626 		if(keys)g_free(keys);
4627 	}
4628         /* minimazation by OpenBabel*/
4629         if(optOpenBabel && !StopCalcul )
4630         {
4631                 gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom);
4632 		gchar* keys=g_strdup_printf("obopt -ff %s",method);
4633                 if(runOpenBabelFiles(numberOfGeometries, geometries, energies, fileNamePrefix, keys))
4634                 {
4635                         char* fileNameGeomOpenBabel =g_strdup_printf("%sOpenBabel.gab",fileNamePrefix);
4636                         sortGeometries(numberOfGeometries, geometries, energies);
4637                         removeIdenticalGeometries(&numberOfGeometries, &geometries, &energies, tolEnergy, tolDistance);
4638                         if(saveConfoGeometries(numberOfGeometries, geometries, energies, fileNameGeom))
4639                         {
4640                                 strcat(message,fileNameGeom);
4641                                 strcat(message,("\n\tGeometries after minimization by OpenBabel"));
4642                                 strcat(message,("\n\tTo read this file through Gabedit : 'Read/Gabedit file'\n\n"));
4643                         }
4644                         free(fileNameGeomOpenBabel);
4645 
4646                 }
4647                 if(fileNamePrefix) free(fileNamePrefix);
4648                 if(keys)free(keys);
4649         }
4650         /* minimazation by Generic*/
4651         if(optGeneric && !StopCalcul )
4652         {
4653                 gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom);
4654 		gchar* keys=g_strdup_printf("Opt");
4655                 if(runGenericFiles(numberOfGeometries, geometries, energies, fileNamePrefix, keys, method))
4656                 {
4657                         char* fileNameGeomGeneric =g_strdup_printf("%sGeneric.gab",fileNamePrefix);
4658                         sortGeometries(numberOfGeometries, geometries, energies);
4659                         removeIdenticalGeometries(&numberOfGeometries, &geometries, &energies, tolEnergy, tolDistance);
4660                         if(saveConfoGeometries(numberOfGeometries, geometries, energies, fileNameGeom))
4661                         {
4662                                 strcat(message,fileNameGeom);
4663                                 strcat(message,("\n\tGeometries after minimization by Generic"));
4664                                 strcat(message,("\n\tTo read this file through Gabedit : 'Read/Gabedit file'\n\n"));
4665                         }
4666                         free(fileNameGeomGeneric);
4667 
4668                 }
4669                 if(fileNamePrefix) free(fileNamePrefix);
4670                 if(keys)free(keys);
4671         }
4672 
4673 	g_free(method);
4674 	if(!optMopac && !optFireFly && !optGeneric && !optOpenBabel && !StopCalcul)
4675 	{
4676 		/*  sort by energies */
4677 		sortGeometries(numberOfGeometries, geometries, energies);
4678 		removeIdenticalGeometries(&numberOfGeometries, &geometries, &energies, tolEnergy, tolDistance);
4679 		/* printf("fileNameGeom = %s\n",fileNameGeom);*/
4680 		if(saveConfoGeometries(numberOfGeometries, geometries, energies, fileNameGeom))
4681 		{
4682 			read_gabedit_file_add_list(fileNameGeom);
4683 			strcat(message,fileNameGeom);
4684 			strcat(message,_("\n\tGeometries selected and optimized using your Semi-emperical potentials"));
4685 			strcat(message,_("\n\tTo read this file : 'Read/Gabedit file'\n\n"));
4686 		}
4687 	}
4688 	if(numberOfGeometries>0 && geometries && !StopCalcul)
4689 	{
4690 		if(mopacKeywords)
4691 		{
4692 			gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom);
4693 			createMopacFiles(numberOfGeometries, geometries, energies, fileNamePrefix, mopacKeywords);
4694 			strcat(message,fileNamePrefix);
4695 			strcat(message,_("_*.mop\n\tFiles for a post processing by Mopac\n\n"));
4696 			if(fileNamePrefix) g_free(fileNamePrefix);
4697 		}
4698 		if(gaussianKeywords)
4699 		{
4700 			gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom);
4701 			createGaussianFiles(numberOfGeometries, geometries, energies, fileNamePrefix, gaussianKeywords);
4702 			strcat(message,fileNamePrefix);
4703 			strcat(message,_("_*.com\n\tFiles for a post processing by Gaussian\n\n"));
4704 			if(fileNamePrefix) g_free(fileNamePrefix);
4705 		}
4706 		if(fireflyKeywords)
4707 		{
4708 			gchar* fileNamePrefix = get_suffix_name_file(fileNameGeom);
4709 			createFireFlyFiles(numberOfGeometries, geometries, energies, fileNamePrefix, fireflyKeywords);
4710 			strcat(message,fileNamePrefix);
4711 			strcat(message,_("P_*.inp\n\tFiles for a post processing by FireFly\n\n"));
4712 			if(fileNamePrefix) g_free(fileNamePrefix);
4713 		}
4714 	}
4715 	if(geometries)
4716 	{
4717 		if(!StopCalcul)
4718 		for(i=0;i<numberOfGeometries;i++)
4719 			if(geometries[i]) freeSemiEmpiricalModel(geometries[i]);
4720 		g_free(geometries);
4721 	}
4722 	if(energies) g_free(energies);
4723 	if(strlen(message)>20) Message(message,_("Info"),TRUE);
4724 	if(fileNameGeom)g_free(fileNameGeom);
4725 
4726 }
4727 /*****************************************************************************/
semiEmpiricalMD(GtkWidget * Win,gpointer data)4728 static void semiEmpiricalMD(GtkWidget* Win, gpointer data)
4729 {
4730 	SemiEmpiricalModel seModel;
4731 	SemiEmpiricalMD seMD;
4732 	gint updateFrequency = 1;
4733 	gdouble heatTime;
4734 	gdouble equiTime;
4735 	gdouble runTime;
4736 	gdouble coolTime;
4737 	gdouble heatTemp;
4738 	gdouble equiTemp;
4739 	gdouble runTemp;
4740 	gdouble coolTemp;
4741 	gdouble stepSize;
4742 	MDIntegratorType integrator = VERLET;
4743 	gchar* fileNameTraj = NULL;
4744 	gchar* fileNameProp = NULL;
4745 	gdouble friction=40;
4746 	gdouble collide = 20;
4747 	MDThermostatType thermostat = NONE;
4748 	gchar* program = NULL;
4749 	gchar* method = NULL;
4750 	gchar* dirName = NULL;
4751 	gint totalCharge = 0;
4752 	gint spinMultiplicity = 1;
4753 	SemiEmpiricalModelConstraints constraints = NOCONSTRAINTS;
4754 
4755 	constraints = NOCONSTRAINTS;
4756 	if(GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSCONSTRAINTS])->active)
4757 				constraints = BONDSCONSTRAINTS;
4758 	if(GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSANGLESCONSTRAINTS])->active)
4759 				constraints = BONDSANGLESCONSTRAINTS;
4760 
4761 
4762 	totalCharge = atoi(gtk_entry_get_text(GTK_ENTRY(entryCharge)));
4763 	spinMultiplicity = atoi(gtk_entry_get_text(GTK_ENTRY(entrySpinMultiplicity)));
4764 	TotalCharges[0] = totalCharge;
4765 	SpinMultiplicities[0] = spinMultiplicity;
4766 	if(GTK_TOGGLE_BUTTON (buttonMopac)->active)
4767 	{
4768 		program = g_strdup("Mopac");
4769 		method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryMopacMethod)));
4770 	}
4771 	if(GTK_TOGGLE_BUTTON (buttonFireFly)->active)
4772 	{
4773 		program = g_strdup("FireFly");
4774 		method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFireFlyMethod)));
4775 	}
4776 	else if(GTK_TOGGLE_BUTTON (buttonOpenBabel)->active)
4777 	{
4778 		program = g_strdup("OpenBabel");
4779 		method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryOpenBabelMethod)));
4780 	}
4781 	else if(GTK_TOGGLE_BUTTON (buttonGeneric)->active)
4782 	{
4783 		program = g_strdup("Generic");
4784 		method = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryGenericMethod)));
4785 		if(!genericProgName) g_free(genericProgName);
4786 		genericProgName = g_strdup(method);
4787 	}
4788 	updateFrequency = atoi(gtk_entry_get_text(GTK_ENTRY(entryMDRafresh)));
4789 	if(updateFrequency<0) updateFrequency = 0;
4790 
4791 	heatTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[0])));
4792 	equiTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[1])));
4793 	runTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[2])));
4794 	coolTime = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTimes[3])));
4795 
4796 	heatTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[0])));
4797 	runTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[2])));
4798 	/* equiTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[1])));*/
4799 	equiTemp = runTemp;
4800 	coolTemp = atof(gtk_entry_get_text(GTK_ENTRY(entryMDTemperature[3])));
4801 
4802 	stepSize = atof(gtk_entry_get_text(GTK_ENTRY(entryMDStepSize)));
4803 
4804 
4805 	if(GTK_TOGGLE_BUTTON (buttonMDOptions[BEEMAN])->active) integrator = BEEMAN;
4806 	if(GTK_TOGGLE_BUTTON (buttonMDOptions[STOCHASTIC])->active) integrator = STOCHASTIC;
4807 
4808 	if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[ANDERSEN])->active) thermostat = ANDERSEN;
4809 	if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[BERENDSEN])->active) thermostat = BERENDSEN;
4810 	if(GTK_TOGGLE_BUTTON (buttonMDThermOptions[BUSSI])->active) thermostat = BUSSI;
4811 
4812 	if( integrator == STOCHASTIC)
4813 		friction = atof(gtk_entry_get_text(GTK_ENTRY(entrySDFriction)));
4814 
4815 	collide = atof(gtk_entry_get_text(GTK_ENTRY(entrySDCollide)));
4816 
4817 	if(heatTime<0) heatTime = 1;
4818 	if(equiTime<0) equiTime = 1;
4819 	if(runTime<0) runTime = 1;
4820 	if(coolTime<0) coolTime = 4;
4821 
4822 	if(heatTemp<0) heatTemp = 0;
4823 	if(equiTemp<0) runTemp = 300;
4824 	if(runTemp<0) runTemp = 300;
4825 	if(coolTemp<0) coolTemp = 0;
4826 
4827 	if(stepSize<0) stepSize = 1.0;
4828 	if(stepSize>5) stepSize = 5.0;
4829 
4830 	dirName = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(buttonDirSelector));
4831 	if(GTK_TOGGLE_BUTTON (buttonSaveTraj)->active)
4832 	{
4833 		gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameTraj)));
4834 		if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR)
4835 			fileNameTraj = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp);
4836 		else
4837 			fileNameTraj = g_strdup_printf("%s%s",dirName, tmp);
4838 
4839 		g_free(tmp);
4840 	}
4841 	if(GTK_TOGGLE_BUTTON (buttonSaveProp)->active)
4842 	{
4843 		gchar* tmp = g_strdup(gtk_entry_get_text(GTK_ENTRY(entryFileNameProp)));
4844 		if(dirName[strlen(dirName)-1] != G_DIR_SEPARATOR)
4845 			fileNameProp = g_strdup_printf("%s%s%s",dirName, G_DIR_SEPARATOR_S,tmp);
4846 		else
4847 			fileNameProp = g_strdup_printf("%s%s",dirName, tmp);
4848 		g_free(tmp);
4849 	}
4850 
4851 
4852 	gtk_widget_destroy(Win);
4853     	while( gtk_events_pending() ) gtk_main_iteration();
4854 
4855 	set_sensitive_stop_button( TRUE);
4856 	StopCalcul = FALSE;
4857 
4858 	if(!strcmp(program,"Mopac")) seModel = createMopacModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName, constraints);
4859 	else if(!strcmp(program,"FireFly")) seModel = createFireFlyModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName, constraints);
4860 	else if(!strcmp(program,"OpenBabel")) seModel = createOpenBabelModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName, constraints);
4861 	else if(!strcmp(program,"Generic")) seModel = createGenericModel(geometry0,Natoms, totalCharge, spinMultiplicity,method,dirName, constraints);
4862 
4863 	g_free(method);
4864 	g_free(program);
4865 
4866 	if(StopCalcul)
4867 	{
4868 		set_text_to_draw(" ");
4869 		set_statubar_operation_str(_("Calculation Canceled "));
4870 		drawGeom();
4871 		set_sensitive_stop_button( FALSE);
4872 		return;
4873 	}
4874 
4875 
4876 	set_sensitive_stop_button( TRUE);
4877 	{
4878 		gint i;
4879 		for(i=0;i<4;i++) NumSelAtoms[i] = -1;
4880 		change_of_center(NULL,NULL);
4881 	}
4882 
4883 	runSemiEmpiricalMD(&seMD, &seModel,
4884 		updateFrequency, heatTime, equiTime, runTime, coolTime, heatTemp, equiTemp, runTemp, coolTemp, stepSize,
4885 		integrator, thermostat, friction, collide, fileNameTraj, fileNameProp);
4886 
4887 	if(StopCalcul)
4888 	{
4889 		set_text_to_draw(" ");
4890 		set_statubar_operation_str(_("Calculation Canceled "));
4891 		drawGeom();
4892 	}
4893 	set_sensitive_stop_button(FALSE);
4894 	set_text_to_draw(" ");
4895 	freeSemiEmpiricalModel(&seModel);
4896 	g_free(dirName);
4897 }
4898 /********************************************************************************/
AddDynamicsOptionsDlg(GtkWidget * NoteBook,GtkWidget * win)4899 static void AddDynamicsOptionsDlg(GtkWidget *NoteBook, GtkWidget *win)
4900 {
4901 
4902 	gint i;
4903 	gint j;
4904 	GtkWidget *frame;
4905 	GtkWidget *LabelOnglet;
4906 	GtkWidget *LabelMenu;
4907 	GtkWidget *vbox;
4908 	GtkWidget *table;
4909 	GtkWidget* label;
4910 	GtkWidget *hseparator = NULL;
4911 
4912 	frame = gtk_frame_new(NULL);
4913 	gtk_container_set_border_width(GTK_CONTAINER(frame), 5);
4914 
4915 	LabelOnglet = gtk_label_new(_("Molecular Dynamics Options"));
4916 	LabelMenu = gtk_label_new(_("Molecular Dynamics Options"));
4917 	gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu);
4918 	g_object_set_data (G_OBJECT (frame), "frame", frame);
4919 
4920 	vbox = gtk_vbox_new (FALSE, 0);
4921 	gtk_widget_show (vbox);
4922 	gtk_container_add (GTK_CONTAINER (frame), vbox);
4923 
4924 	table = gtk_table_new(20,6,FALSE);
4925 	gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);
4926 
4927 /*----------------------------------------------------------------------------------*/
4928 	i = 0;
4929 	j = 2;
4930 	label = gtk_label_new(_("Heating"));
4931 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
4932                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
4933                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
4934                   1,1);
4935 /*----------------------------------------------------------------------------------*/
4936 	i = 0;
4937 	j = 3;
4938 	label = gtk_label_new(_("Equilibrium"));
4939 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
4940                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
4941                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
4942                   1,1);
4943 /*----------------------------------------------------------------------------------*/
4944 	i = 0;
4945 	j = 4;
4946 	label = gtk_label_new(_("Production"));
4947 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
4948                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
4949                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
4950                   1,1);
4951 /*----------------------------------------------------------------------------------*/
4952 	i = 0;
4953 	j = 5;
4954 	label = gtk_label_new(_("Cooling"));
4955 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
4956                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
4957                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
4958                   1,1);
4959 /*----------------------------------------------------------------------------------*/
4960 	i = 1;
4961 	j = 0;
4962 	label = gtk_label_new(_("Time (ps)"));
4963 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
4964                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
4965                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
4966                   1,1);
4967 /*----------------------------------------------------------------------------------*/
4968 	i = 1;
4969 	j = 1;
4970 	label = gtk_label_new(":");
4971 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
4972                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
4973                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
4974                   1,1);
4975 /*----------------------------------------------------------------------------------*/
4976 	i = 1;
4977 	j = 2;
4978 	entryMDTimes[0] = gtk_entry_new();
4979 	gtk_entry_set_text(GTK_ENTRY(entryMDTimes[0]),"1.0");
4980 	gtk_widget_set_size_request(entryMDTimes[0], 60, -1);
4981 	gtk_table_attach(GTK_TABLE(table),entryMDTimes[0], j,j+1,i,i+1,
4982                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
4983                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
4984                   1,1);
4985 /*----------------------------------------------------------------------------------*/
4986 	i = 1;
4987 	j = 3;
4988 	entryMDTimes[1] = gtk_entry_new();
4989 	gtk_widget_set_size_request(entryMDTimes[1], 60, -1);
4990 	gtk_entry_set_text(GTK_ENTRY(entryMDTimes[1]),"1.0");
4991 	gtk_table_attach(GTK_TABLE(table),entryMDTimes[1], j,j+1,i,i+1,
4992                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
4993                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
4994                   1,1);
4995 /*----------------------------------------------------------------------------------*/
4996 	i = 1;
4997 	j = 4;
4998 	entryMDTimes[2] = gtk_entry_new();
4999 	gtk_widget_set_size_request(entryMDTimes[2], 60, -1);
5000 	gtk_entry_set_text(GTK_ENTRY(entryMDTimes[2]),"4.0");
5001 	gtk_table_attach(GTK_TABLE(table),entryMDTimes[2], j,j+1,i,i+1,
5002                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5003                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5004                   1,1);
5005 /*----------------------------------------------------------------------------------*/
5006 	i = 1;
5007 	j = 5;
5008 	entryMDTimes[3] = gtk_entry_new();
5009 	gtk_widget_set_size_request(entryMDTimes[3], 60, -1);
5010 	gtk_entry_set_text(GTK_ENTRY(entryMDTimes[3]),"4.0");
5011 	gtk_table_attach(GTK_TABLE(table),entryMDTimes[3], j,j+1,i,i+1,
5012                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5013                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5014                   1,1);
5015 /*----------------------------------------------------------------------------------*/
5016 	i = 2;
5017 	j = 0;
5018 	label = gtk_label_new(_("Temperature (K)"));
5019 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5020                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5021                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5022                   1,1);
5023 /*----------------------------------------------------------------------------------*/
5024 	i = 2;
5025 	j = 1;
5026 	label = gtk_label_new(":");
5027 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5028                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5029                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5030                   1,1);
5031 /*----------------------------------------------------------------------------------*/
5032 	i = 2;
5033 	j = 2;
5034 	entryMDTemperature[0] = gtk_entry_new();
5035 	gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[0]),"0.0");
5036 	gtk_widget_set_size_request(entryMDTemperature[0], 60, -1);
5037 	gtk_table_attach(GTK_TABLE(table),entryMDTemperature[0], j,j+1,i,i+1,
5038                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5039                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5040                   1,1);
5041 /*----------------------------------------------------------------------------------*/
5042 	/*
5043 	i = 2;
5044 	j = 3;
5045 	entryMDTemperature[1] = gtk_entry_new();
5046 	gtk_widget_set_size_request(entryMDTemperature[1], 60, -1);
5047 	gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[1]),"300.0");
5048 	gtk_table_attach(GTK_TABLE(table),entryMDTemperature[1], j,j+1,i,i+1,
5049                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5050                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5051                   1,1);
5052 		  */
5053 /*----------------------------------------------------------------------------------*/
5054 	i = 2;
5055 	j = 4;
5056 	entryMDTemperature[2] = gtk_entry_new();
5057 	gtk_widget_set_size_request(entryMDTemperature[2], 60, -1);
5058 	gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[2]),"300.0");
5059 	gtk_table_attach(GTK_TABLE(table),entryMDTemperature[2], j,j+1,i,i+1,
5060                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5061                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5062                   1,1);
5063 /*----------------------------------------------------------------------------------*/
5064 	i = 2;
5065 	j = 5;
5066 	entryMDTemperature[3] = gtk_entry_new();
5067 	gtk_widget_set_size_request(entryMDTemperature[3], 60, -1);
5068 	gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[3]),"0.0");
5069 	gtk_table_attach(GTK_TABLE(table),entryMDTemperature[3], j,j+1,i,i+1,
5070                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5071                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5072                   1,1);
5073 /*----------------------------------------------------------------------------------*/
5074 	i = 3;
5075 	j = 0;
5076 	label = gtk_label_new(_("Step size (fs)"));
5077 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5078                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5079                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5080                   1,1);
5081 /*----------------------------------------------------------------------------------*/
5082 	i = 3;
5083 	j = 1;
5084 	label = gtk_label_new(":");
5085 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5086                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5087                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5088                   1,1);
5089 /*----------------------------------------------------------------------------------*/
5090 	i = 3;
5091 	j = 2;
5092 	entryMDStepSize = gtk_entry_new();
5093 	gtk_widget_set_size_request(entryMDStepSize, 60, -1);
5094 	gtk_entry_set_text(GTK_ENTRY(entryMDStepSize),"1.0");
5095 	gtk_table_attach(GTK_TABLE(table),entryMDStepSize, j,j+1,i,i+1,
5096                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5097                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5098                   1,1);
5099 /*----------------------------------------------------------------------------------*/
5100 	i = 4;
5101 	j = 0;
5102 	label = gtk_label_new(_("Screen Rafresh after"));
5103 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5104                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5105                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5106                   1,1);
5107 /*----------------------------------------------------------------------------------*/
5108 	i = 4;
5109 	j = 1;
5110 	label = gtk_label_new(":");
5111 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5112                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5113                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5114                   1,1);
5115 /*----------------------------------------------------------------------------------*/
5116 	i = 4;
5117 	j = 2;
5118 	entryMDRafresh = gtk_entry_new();
5119 	gtk_widget_set_size_request(entryMDRafresh, 60, -1);
5120 	gtk_entry_set_text(GTK_ENTRY(entryMDRafresh),"1");
5121 	gtk_table_attach(GTK_TABLE(table),entryMDRafresh, j,j+1,i,i+1,
5122                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5123                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5124                   1,1);
5125 /*----------------------------------------------------------------------------------*/
5126 	i = 4;
5127 	j = 3;
5128 	label = gtk_label_new(_("steps"));
5129 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5130                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5131                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5132                   1,1);
5133 /*----------------------------------------------------------------------------------*/
5134 	i = 5;
5135 	j = 0;
5136 	label = gtk_label_new(_("Collide(ps^-1)"));
5137 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5138                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5139                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5140                   1,1);
5141 /*----------------------------------------------------------------------------------*/
5142 	i = 5;
5143 	j = 1;
5144 	label = gtk_label_new(":");
5145 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5146                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5147                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5148                   1,1);
5149 /*----------------------------------------------------------------------------------*/
5150 	i = 5;
5151 	j = 2;
5152 	entrySDCollide = gtk_entry_new();
5153 	gtk_widget_set_size_request(entrySDCollide, 60, -1);
5154 	gtk_entry_set_text(GTK_ENTRY(entrySDCollide),"20.0");
5155 	gtk_table_attach(GTK_TABLE(table),entrySDCollide, j,j+1,i,i+1,
5156                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5157                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5158                   1,1);
5159 /*----------------------------------------------------------------------------------*/
5160 	i = 6;
5161 	j = 0;
5162 	label = gtk_label_new(_("Friction(ps^-1)"));
5163 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5164                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5165                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5166                   1,1);
5167 /*----------------------------------------------------------------------------------*/
5168 	i = 6;
5169 	j = 1;
5170 	label = gtk_label_new(":");
5171 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5172                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5173                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5174                   1,1);
5175 /*----------------------------------------------------------------------------------*/
5176 	i = 6;
5177 	j = 2;
5178 	entrySDFriction = gtk_entry_new();
5179 	gtk_widget_set_size_request(entrySDFriction, 60, -1);
5180 	gtk_entry_set_text(GTK_ENTRY(entrySDFriction),"40.0");
5181 	gtk_table_attach(GTK_TABLE(table),entrySDFriction, j,j+1,i,i+1,
5182                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5183                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5184                   1,1);
5185 	/* THERMOSTAT */
5186 /*----------------------------------------------------------------------------------*/
5187 	i = 3;
5188 	j = 4;
5189 	buttonMDThermOptions[NONE]= gtk_radio_button_new_with_label( NULL, "NVE");
5190 	gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[NONE],
5191 			j,j+1,i,i+1,
5192                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5193                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5194                   1,1);
5195 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[NONE]), TRUE);
5196 /*----------------------------------------------------------------------------------*/
5197 	i = 4;
5198 	j = 4;
5199 	buttonMDThermOptions[BERENDSEN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Berendsen");
5200 	gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[BERENDSEN],
5201 			j,j+1,i,i+1,
5202                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5203                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5204                   1,1);
5205 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[BERENDSEN]), FALSE);
5206 /*----------------------------------------------------------------------------------*/
5207 	i = 5;
5208 	j = 4;
5209 	buttonMDThermOptions[ANDERSEN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Andersen");
5210 	gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[ANDERSEN],
5211 			j,j+1,i,i+1,
5212                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5213                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5214                   1,1);
5215 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[ANDERSEN]), FALSE);
5216 /*----------------------------------------------------------------------------------*/
5217 	i = 6;
5218 	j = 4;
5219 	buttonMDThermOptions[BUSSI]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Bussi");
5220 	gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[BUSSI],
5221 			j,j+1,i,i+1,
5222                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5223                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5224                   1,1);
5225 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[BUSSI]), FALSE);
5226 /*----------------------------------------------------------------------------------*/
5227 	i = 7;
5228 	j = 0;
5229 	hseparator = gtk_hseparator_new ();
5230 	gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1,
5231                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5232                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5233                   1,1);
5234 /*----------------------------------------------------------------------------------*/
5235 	i = 8;
5236 	j = 0;
5237 	buttonMDOptions[VERLET]= gtk_radio_button_new_with_label( NULL, _("MD Trajectory via Verlet velocity Algorithm"));
5238 	gtk_table_attach(GTK_TABLE(table),buttonMDOptions[VERLET],
5239 			j,j+4,i,i+1,
5240                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5241                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5242                   1,1);
5243 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[VERLET]), TRUE);
5244 /*----------------------------------------------------------------------------------*/
5245 	i = 9;
5246 	j = 0;
5247 	buttonMDOptions[BEEMAN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDOptions[VERLET])), _("MD Trajectory via Modified Beeman Algorithm"));
5248 	gtk_table_attach(GTK_TABLE(table),buttonMDOptions[BEEMAN],
5249 			j,j+4,i,i+1,
5250                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5251                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5252                   1,1);
5253 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[BEEMAN]), FALSE);
5254 /*----------------------------------------------------------------------------------*/
5255 	i = 10;
5256 	j = 0;
5257 	buttonMDOptions[STOCHASTIC]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDOptions[VERLET])), _("Stochastic Dynamics via Verlet velocity Algorithm"));
5258 	gtk_table_attach(GTK_TABLE(table),buttonMDOptions[STOCHASTIC],
5259 			j,j+4,i,i+1,
5260                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5261                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5262                   1,1);
5263 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[STOCHASTIC]), FALSE);
5264 /*----------------------------------------------------------------------------------*/
5265 	i = 11;
5266 	j = 0;
5267 	hseparator = gtk_hseparator_new ();
5268 	gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1,
5269                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5270                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5271                   1,1);
5272 /*----------------------------------------------------------------------------------*/
5273 	i = 12;
5274 	j = 0;
5275 	buttonConstraintsOptions[NOCONSTRAINTS]= gtk_radio_button_new_with_label( NULL, _("No constraints"));
5276 	gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[NOCONSTRAINTS],
5277 			j,j+4,i,i+1,
5278                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5279                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5280                   1,1);
5281 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS]), TRUE);
5282 /*----------------------------------------------------------------------------------*/
5283 	i = 13;
5284 	j = 0;
5285 	buttonConstraintsOptions[BONDSCONSTRAINTS]= gtk_radio_button_new_with_label(
5286 			gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS])), _("Bond constraints"));
5287 	gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[BONDSCONSTRAINTS],
5288 			j,j+4,i,i+1,
5289                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5290                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5291                   1,1);
5292 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSCONSTRAINTS]), FALSE);
5293 /*----------------------------------------------------------------------------------*/
5294 	i = 14;
5295 	j = 0;
5296 	buttonConstraintsOptions[BONDSANGLESCONSTRAINTS]= gtk_radio_button_new_with_label(
5297 			gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS])), _("Bond & Angle constraints"));
5298 	gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[BONDSANGLESCONSTRAINTS],
5299 			j,j+4,i,i+1,
5300                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5301                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5302                   1,1);
5303 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSANGLESCONSTRAINTS]), FALSE);
5304 /*----------------------------------------------------------------------------------*/
5305 	i = 15;
5306 	j = 0;
5307 	hseparator = gtk_hseparator_new ();
5308 	gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1,
5309                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5310                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5311                   1,1);
5312 /*----------------------------------------------------------------------------------*/
5313 	i = 16;
5314 	j = 0;
5315 	buttonSaveTraj = gtk_check_button_new_with_label(_("Save Trajectory in "));
5316 	gtk_table_attach(GTK_TABLE(table),buttonSaveTraj,
5317 			j,j+1,i,i+1,
5318                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5319                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5320                   1,1);
5321 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSaveTraj), FALSE);
5322 /*----------------------------------------------------------------------------------*/
5323 	i = 16;
5324 	j = 1;
5325 	label = gtk_label_new(":");
5326 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5327                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5328                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5329                   1,1);
5330 /*----------------------------------------------------------------------------------*/
5331 	i = 16;
5332 	j = 2;
5333 	entryFileNameTraj = gtk_entry_new();
5334 	gtk_widget_set_size_request(entryFileNameTraj, 60, -1);
5335 	gtk_entry_set_text(GTK_ENTRY(entryFileNameTraj),"traj.gab");
5336 	gtk_table_attach(GTK_TABLE(table),entryFileNameTraj, j,j+4,i,i+1,
5337                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5338                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5339                   1,1);
5340 /*----------------------------------------------------------------------------------*/
5341 	i = 17;
5342 	j = 0;
5343 	buttonSaveProp = gtk_check_button_new_with_label(_("Save Properties in "));
5344 	gtk_table_attach(GTK_TABLE(table),buttonSaveProp,
5345 			j,j+1,i,i+1,
5346                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5347                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5348                   1,1);
5349 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSaveProp), FALSE);
5350 /*----------------------------------------------------------------------------------*/
5351 	i = 17;
5352 	j = 1;
5353 	label = gtk_label_new(":");
5354 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5355                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5356                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5357                   1,1);
5358 /*----------------------------------------------------------------------------------*/
5359 	i = 17;
5360 	j = 2;
5361 	entryFileNameProp = gtk_entry_new();
5362 	gtk_widget_set_size_request(entryFileNameProp, 60, -1);
5363 	gtk_entry_set_text(GTK_ENTRY(entryFileNameProp),"prop.txt");
5364 	gtk_table_attach(GTK_TABLE(table),entryFileNameProp, j,j+4,i,i+1,
5365                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5366                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5367                   1,1);
5368 /*----------------------------------------------------------------------------------*/
5369 	i = 18;
5370 	j = 0;
5371 	label = gtk_label_new(_("Folder"));
5372 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5373                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5374                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5375                   1,1);
5376 /*----------------------------------------------------------------------------------*/
5377 	i = 18;
5378 	j = 1;
5379 	label = gtk_label_new(":");
5380 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5381                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5382                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5383                   1,1);
5384 /*----------------------------------------------------------------------------------*/
5385 	i = 18;
5386 	j = 2;
5387 	buttonDirSelector =  gabedit_dir_button();
5388 	gtk_table_attach(GTK_TABLE(table),buttonDirSelector,
5389 			j,j+4,i,i+1,
5390                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5391                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5392                   1,1);
5393 }
5394 /**********************************************************************/
createInfoMDFrame(GtkWidget * box)5395 static void createInfoMDFrame(GtkWidget *box)
5396 {
5397 	GtkWidget* frame;
5398 	GtkWidget* hboxFrame;
5399 	GtkWidget *label = NULL;
5400 
5401 	frame = gtk_frame_new (NULL);
5402 	gtk_widget_show (frame);
5403 	gtk_box_pack_start (GTK_BOX (box), frame, FALSE, FALSE, 0);
5404 
5405 	hboxFrame = gtk_hbox_new (FALSE, 3);
5406 	gtk_widget_show (hboxFrame);
5407 	gtk_container_add (GTK_CONTAINER (frame), hboxFrame);
5408 	label = gtk_label_new(
5409 	_(
5410 	"If \"MD Trajectory via Verlet velocity Algorithm\" is selected :\n"
5411 	"        A molecular dynamic simulation is run using the Verlet velocity Algorithm.\n"
5412 	"        During the production step, the user can select the Andersen or Berendsen thermostat which is then applied.\n"
5413 	"        The Berendsen thermostat is applied for Heating, Equilibrium and Cooling steps.\n"
5414 	"\n"
5415 	"If \"MD Trajectory via Modified Beeman Algorithm\" is selected :\n"
5416 	"        A molecular dynamic simulation is run using the Modified Beeman Algorithm.\n"
5417 	"        During the production step, the user can select the Andersen or Berendsen thermostat which is then applied.\n"
5418 	"        The Berendsen thermostat is applied for Heating, Equilibrium and Cooling steps.\n"
5419 	"\n"
5420 	"If \"Stochastic Dynamics via Verlet velocity Algorithm\" is selected :\n"
5421 	"        A stochastic dynamic simulation is run using Verlet velocity Algorithm.\n"
5422 	"        The velocities are scaled (Berendsen method)during the Heating, Equilibrium and Cooling steps.\n"
5423 	)
5424 	);
5425 	gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);
5426 	gtk_widget_show (label);
5427 	gtk_box_pack_start (GTK_BOX (hboxFrame), label, FALSE, FALSE, 5);
5428 }
5429 /**********************************************************************/
createInfoConfoFrame(GtkWidget * box)5430 static void createInfoConfoFrame(GtkWidget *box)
5431 {
5432 	GtkWidget* frame;
5433 	GtkWidget* hboxFrame;
5434 	GtkWidget *label = NULL;
5435 
5436 	frame = gtk_frame_new (NULL);
5437 	gtk_widget_show (frame);
5438 	gtk_box_pack_start (GTK_BOX (box), frame, FALSE, FALSE, 0);
5439 
5440 	hboxFrame = gtk_hbox_new (FALSE, 3);
5441 	gtk_widget_show (hboxFrame);
5442 	gtk_container_add (GTK_CONTAINER (frame), hboxFrame);
5443 	label = gtk_label_new(
5444 	_(
5445 	"During the production step, Gabedit selects a number geometries"
5446 	"\nAt the end of the molecular dynamic simulation,"
5447 	"\nthe geometries are sorted by energy and are saved in a file."
5448 	"\nGabedit can also optimize these geometries, interactively."
5449 	"\nThe very similar molecular strcutures can be removed."
5450 	"\nGabedit can also creates input files for mopac, FireFly or Gaussian for a post processing."
5451 	"\n\n"
5452 	"If \"MD Trajectory via Verlet velocity Algorithm\" is selected :\n"
5453 	"        A molecular dynamic simulation is run using the Verlet velocity Algorithm.\n"
5454 	"        During the production step, the user can select the Andersen or Berendsen thermostat which is then applied.\n"
5455 	"        The Berendsen thermostat is applied for Heating, Equilibrium and Cooling steps.\n"
5456 	"\n"
5457 	"If \"MD Trajectory via Modified Beeman Algorithm\" is selected :\n"
5458 	"        A molecular dynamic simulation is run using the Modified Beeman Algorithm.\n"
5459 	"        During the production step, the user can select the Andersen or Berendsen thermostat which is then applied.\n"
5460 	"        The Berendsen thermostat is applied for Heating, Equilibrium and Cooling steps.\n"
5461 	"\n"
5462 	"If \"Stochastic Dynamics via Verlet velocity Algorithm\" is selected :\n"
5463 	"        A stochastic dynamic simulation is run using Verlet velocity Algorithm.\n"
5464 	"        The velocities are scaled (Berendsen method)during the Heating, Equilibrium and Cooling steps.\n"
5465 	)
5466 	);
5467 	gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);
5468 	gtk_widget_show (label);
5469 	gtk_box_pack_start (GTK_BOX (hboxFrame), label, FALSE, FALSE, 5);
5470 }
5471 /**********************************************************************/
createPostProcessingFrame(GtkWidget * box)5472 static void createPostProcessingFrame(GtkWidget *box)
5473 {
5474 	GtkWidget* frame;
5475 	GtkWidget* vboxFrame;
5476 	GtkWidget *table = NULL;
5477 	GtkWidget *label = NULL;
5478 	GtkWidget *sep = NULL;
5479 	gint i;
5480 	gint j;
5481 
5482 	totalCharge = TotalCharges[0];
5483 	spinMultiplicity=SpinMultiplicities[0];
5484 
5485 	table = gtk_table_new(10,5,FALSE);
5486 
5487 	frame = gtk_frame_new (_("Post Processing"));
5488 	gtk_widget_show (frame);
5489 	gtk_box_pack_start (GTK_BOX (box), frame, TRUE, TRUE, 3);
5490 	gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5);
5491 
5492 	vboxFrame = gtk_vbox_new (FALSE, 3);
5493 	gtk_widget_show (vboxFrame);
5494 	gtk_container_add (GTK_CONTAINER (frame), vboxFrame);
5495 	gtk_box_pack_start (GTK_BOX (vboxFrame), table, TRUE, TRUE, 0);
5496 /*----------------------------------------------------------------------------------*/
5497 	i = 0;
5498 	j = 0;
5499 	buttonPostOpt = gtk_radio_button_new_with_label(
5500 			NULL,
5501 			_("Minimization of selected geometries"));
5502 	gtk_table_attach(GTK_TABLE(table),buttonPostOpt,
5503 			j,j+6,i,i+1,
5504                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5505                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5506                   1,1);
5507 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonPostOpt), TRUE);
5508 	gtk_widget_show (buttonPostOpt);
5509 /*----------------------------------------------------------------------------------*/
5510 	i++;
5511 	j = 0;
5512 	buttonPostNone =gtk_radio_button_new_with_label(
5513 			gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonPostOpt)),
5514 			_("No minimization of selected geometries"));
5515 	gtk_table_attach(GTK_TABLE(table),buttonPostNone,
5516 			j,j+6,i,i+1,
5517                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5518                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5519                   1,1);
5520 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonPostNone), FALSE);
5521 	gtk_widget_show (buttonPostNone);
5522 
5523 /*----------------------------------------------------------------------------------*/
5524 	i++;
5525 	j = 0;
5526 	sep = gtk_hseparator_new ();
5527 	gtk_table_attach(GTK_TABLE(table),sep, j,j+6,i,i+1,
5528                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5529                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5530                   1,1);
5531 /*----------------------------------------------------------------------------------*/
5532 	i++;
5533 	j = 0;
5534 	label = gtk_label_new(_("Remove identical molecular structures"));
5535 	gtk_table_attach(GTK_TABLE(table),label, j,j+6,i,i+1,
5536                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5537                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5538                   1,1);
5539 /*----------------------------------------------------------------------------------*/
5540 	i++;
5541 	j = 0;
5542 	buttonTolerance[TOLE] = gtk_check_button_new_with_label(_("Energy tolerance(KCal/mol)"));
5543 	gtk_table_attach(GTK_TABLE(table),buttonTolerance[TOLE],
5544 			j,j+1,i,i+1,
5545                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5546                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5547                   1,1);
5548 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonTolerance[TOLE]), TRUE);
5549 /*----------------------------------------------------------------------------------*/
5550 	j = 1;
5551 	label = gtk_label_new(":");
5552 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5553                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5554                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5555                   1,1);
5556 /*----------------------------------------------------------------------------------*/
5557 	j = 2;
5558 	entryTolerance[TOLE] = gtk_entry_new();
5559 	gtk_entry_set_text(GTK_ENTRY(entryTolerance[TOLE]),"1e-2");
5560 
5561 	gtk_widget_set_size_request(GTK_WIDGET(entryTolerance[TOLE]),(gint)(ScreenHeight*0.2),-1);
5562 	gtk_table_attach(GTK_TABLE(table),entryTolerance[TOLE], j,j+1,i,i+1,
5563                   (GtkAttachOptions)(GTK_FILL|GTK_EXPAND),
5564                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5565                   1,1);
5566 /*----------------------------------------------------------------------------------*/
5567 	i++;
5568 	j = 0;
5569 	buttonTolerance[TOLD] = gtk_check_button_new_with_label(_("Distance tolerance(Angstrom)"));
5570 	gtk_table_attach(GTK_TABLE(table),buttonTolerance[TOLD],
5571 			j,j+1,i,i+1,
5572                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5573                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5574                   1,1);
5575 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonTolerance[TOLD]), TRUE);
5576 /*----------------------------------------------------------------------------------*/
5577 	j = 1;
5578 	label = gtk_label_new(":");
5579 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5580                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5581                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5582                   1,1);
5583 /*----------------------------------------------------------------------------------*/
5584 	j = 2;
5585 	entryTolerance[TOLD] = gtk_entry_new();
5586 	gtk_entry_set_text(GTK_ENTRY(entryTolerance[TOLD]),"1e-2");
5587 
5588 	gtk_widget_set_size_request(GTK_WIDGET(entryTolerance[TOLD]),(gint)(ScreenHeight*0.2),-1);
5589 	gtk_table_attach(GTK_TABLE(table),entryTolerance[TOLD], j,j+1,i,i+1,
5590                   (GtkAttachOptions)(GTK_FILL|GTK_EXPAND),
5591                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5592                   1,1);
5593 /*----------------------------------------------------------------------------------*/
5594 	i++;
5595 	j = 0;
5596 	sep = gtk_hseparator_new ();
5597 	gtk_table_attach(GTK_TABLE(table),sep, j,j+6,i,i+1,
5598                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5599                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5600                   1,1);
5601 /*----------------------------------------------------------------------------------*/
5602 	i++;
5603 	j = 0;
5604 	buttonCreateMopac = gtk_check_button_new_with_label(_("Create Mopac files.          Keywords "));
5605 	gtk_table_attach(GTK_TABLE(table),buttonCreateMopac,
5606 			j,j+1,i,i+1,
5607                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5608                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5609                   1,1);
5610 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCreateMopac), FALSE);
5611 /*----------------------------------------------------------------------------------*/
5612 	j = 1;
5613 	label = gtk_label_new(":");
5614 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5615                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5616                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5617                   1,1);
5618 /*----------------------------------------------------------------------------------*/
5619 	j = 2;
5620 	entryMopacKeywords = gtk_entry_new();
5621 	gtk_entry_set_text(GTK_ENTRY(entryMopacKeywords),"PM7 XYZ AUX");
5622 	gtk_table_attach(GTK_TABLE(table),entryMopacKeywords, j,j+4,i,i+1,
5623                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5624                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5625                   1,1);
5626 /*----------------------------------------------------------------------------------*/
5627 	i++;
5628 	j = 0;
5629 	buttonCreateGaussian = gtk_check_button_new_with_label(_("Create Gaussian files.     Keywords "));
5630 	gtk_table_attach(GTK_TABLE(table),buttonCreateGaussian,
5631 			j,j+1,i,i+1,
5632                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5633                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5634                   1,1);
5635 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCreateGaussian), FALSE);
5636 /*----------------------------------------------------------------------------------*/
5637 	j = 1;
5638 	label = gtk_label_new(":");
5639 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5640                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5641                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5642                   1,1);
5643 /*----------------------------------------------------------------------------------*/
5644 	j = 2;
5645 	entryGaussianKeywords = gtk_entry_new();
5646 	gtk_widget_set_size_request(entryGaussianKeywords, 60, -1);
5647 	gtk_entry_set_text(GTK_ENTRY(entryGaussianKeywords),"B3LYP/6-31G* Opt");
5648 	gtk_table_attach(GTK_TABLE(table),entryGaussianKeywords, j,j+4,i,i+1,
5649                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5650                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5651                   1,1);
5652 /*----------------------------------------------------------------------------------*/
5653 	i++;
5654 	j = 0;
5655 	buttonCreateFireFly = gtk_check_button_new_with_label(_("Create FireFly files.    Keywords "));
5656 	gtk_table_attach(GTK_TABLE(table),buttonCreateFireFly,
5657 			j,j+1,i,i+1,
5658                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5659                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5660                   1,1);
5661 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCreateFireFly), FALSE);
5662 /*----------------------------------------------------------------------------------*/
5663 	j = 1;
5664 	label = gtk_label_new(":");
5665 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5666                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5667                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5668                   1,1);
5669 /*----------------------------------------------------------------------------------*/
5670 	j = 2;
5671 	entryFireFlyKeywords = gtk_entry_new();
5672 	gtk_entry_set_text(GTK_ENTRY(entryFireFlyKeywords),"RUNTYP=Optimize    GBASIS=AM1");
5673 	gtk_table_attach(GTK_TABLE(table),entryFireFlyKeywords, j,j+4,i,i+1,
5674                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5675                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5676                   1,1);
5677 }
5678 /********************************************************************************/
AddModelOptionsDlg(GtkWidget * NoteBook,GtkWidget * win)5679 static void AddModelOptionsDlg(GtkWidget *NoteBook, GtkWidget *win)
5680 {
5681 	gint i;
5682 	gint j;
5683 	GtkWidget *frame;
5684 	GtkWidget *LabelOnglet;
5685 	GtkWidget *LabelMenu;
5686 	GtkWidget *vbox;
5687 	GtkWidget *table;
5688 	GtkWidget *label;
5689 
5690 	frame = gtk_frame_new(NULL);
5691 	gtk_container_set_border_width(GTK_CONTAINER(frame), 5);
5692 
5693 	LabelOnglet = gtk_label_new(_("Model"));
5694 	LabelMenu = gtk_label_new(_("Model"));
5695 	gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu);
5696 	g_object_set_data (G_OBJECT (frame), "frame", frame);
5697 
5698 	vbox = gtk_vbox_new (FALSE, 0);
5699 	gtk_container_add (GTK_CONTAINER (frame), vbox);
5700 
5701 	table = gtk_table_new(5,3,FALSE);
5702 	gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);
5703 
5704 	i=-1;
5705 /*==================================================================================*/
5706 	i++;
5707 	j = 0;
5708 	buttonMopac = gtk_radio_button_new_with_label( NULL,_("Use Mopac with method"));
5709 	gtk_table_attach(GTK_TABLE(table),buttonMopac,
5710 			j,j+1,i,i+1,
5711                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5712                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5713                   1,1);
5714 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMopac), TRUE);
5715 	gtk_widget_show (buttonMopac);
5716 /*----------------------------------------------------------------------------------*/
5717 	j = 1;
5718 	label = gtk_label_new(":");
5719 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5720                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5721                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5722                   1,1);
5723 /*----------------------------------------------------------------------------------*/
5724 	j = 2;
5725 	entryMopacMethod = gtk_entry_new();
5726 	gtk_entry_set_text(GTK_ENTRY(entryMopacMethod),"PM7");
5727 	gtk_table_attach(GTK_TABLE(table),entryMopacMethod, j,j+1,i,i+1,
5728                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5729                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5730                   1,1);
5731 /*==================================================================================*/
5732 	i++;
5733 	j = 0;
5734 	buttonFireFly = gtk_radio_button_new_with_label(
5735 			gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMopac)),
5736 			_("Use FireFly with method"));
5737 	gtk_table_attach(GTK_TABLE(table),buttonFireFly,
5738 			j,j+1,i,i+1,
5739                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5740                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5741                   1,1);
5742 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonFireFly), FALSE);
5743 	gtk_widget_show (buttonFireFly);
5744 /*----------------------------------------------------------------------------------*/
5745 	j = 1;
5746 	label = gtk_label_new(":");
5747 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5748                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5749                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5750                   1,1);
5751 /*----------------------------------------------------------------------------------*/
5752 	j = 2;
5753 	entryFireFlyMethod = gtk_entry_new();
5754 	gtk_entry_set_text(GTK_ENTRY(entryFireFlyMethod),"AM1");
5755 	gtk_table_attach(GTK_TABLE(table),entryFireFlyMethod, j,j+1,i,i+1,
5756                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5757                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5758                   1,1);
5759 /*==================================================================================*/
5760 	i++;
5761 	j = 0;
5762 	buttonOpenBabel = gtk_radio_button_new_with_label(
5763 			gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMopac)),
5764 			_("Use OpenBabel with method"));
5765 	gtk_table_attach(GTK_TABLE(table),buttonOpenBabel,
5766 			j,j+1,i,i+1,
5767                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5768                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5769                   1,1);
5770 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonOpenBabel), FALSE);
5771 	gtk_widget_show (buttonOpenBabel);
5772 /*----------------------------------------------------------------------------------*/
5773 	j = 1;
5774 	label = gtk_label_new(":");
5775 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5776                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5777                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5778                   1,1);
5779 /*----------------------------------------------------------------------------------*/
5780 	j = 2;
5781 	entryOpenBabelMethod = gtk_entry_new();
5782 	gtk_entry_set_text(GTK_ENTRY(entryOpenBabelMethod),"MMFF94");
5783 	gtk_table_attach(GTK_TABLE(table),entryOpenBabelMethod, j,j+1,i,i+1,
5784                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5785                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5786                   1,1);
5787 /*==================================================================================*/
5788 	i++;
5789 	j = 0;
5790 	buttonGeneric = gtk_radio_button_new_with_label(
5791 			gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMopac)),
5792 			_("Use Generic with command"));
5793 	gtk_table_attach(GTK_TABLE(table),buttonGeneric,
5794 			j,j+1,i,i+1,
5795                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5796                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5797                   1,1);
5798 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonGeneric), FALSE);
5799 	gtk_widget_show (buttonGeneric);
5800 /*----------------------------------------------------------------------------------*/
5801 	j = 1;
5802 	label = gtk_label_new(":");
5803 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5804                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5805                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5806                   1,1);
5807 /*----------------------------------------------------------------------------------*/
5808 	j = 2;
5809 	entryGenericMethod = gtk_entry_new();
5810 	if(!genericProgName) genericProgName = g_strdup("myGenericProgram");
5811 	gtk_entry_set_text(GTK_ENTRY(entryGenericMethod),genericProgName);
5812 	gtk_table_attach(GTK_TABLE(table),entryGenericMethod, j,j+1,i,i+1,
5813                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5814                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5815                   1,1);
5816 /*==================================================================================*/
5817 	i++;
5818 	j = 0;
5819 	vbox = gtk_vbox_new (FALSE, 0);
5820 	gtk_table_attach(GTK_TABLE(table),vbox,
5821 			j,j+3,i,i+1,
5822                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5823                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5824                   1,1);
5825 	addChargeSpin(vbox);
5826 /*==================================================================================*/
5827 }
5828 /********************************************************************************/
AddInfoConfo(GtkWidget * NoteBook,GtkWidget * win)5829 static void AddInfoConfo(GtkWidget *NoteBook, GtkWidget *win)
5830 {
5831 	GtkWidget *frame;
5832 	GtkWidget *LabelOnglet;
5833 	GtkWidget *LabelMenu;
5834 	GtkWidget *vbox;
5835 
5836 	frame = gtk_frame_new(NULL);
5837 	gtk_container_set_border_width(GTK_CONTAINER(frame), 5);
5838 
5839 	LabelOnglet = gtk_label_new(_("Info"));
5840 	LabelMenu = gtk_label_new(_("Info"));
5841 	gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu);
5842 	g_object_set_data (G_OBJECT (frame), "frame", frame);
5843 
5844 	vbox = gtk_vbox_new (FALSE, 0);
5845 	gtk_container_add (GTK_CONTAINER (frame), vbox);
5846 	createInfoConfoFrame(vbox);
5847 }
5848 /********************************************************************************/
AddInfoMD(GtkWidget * NoteBook,GtkWidget * win)5849 static void AddInfoMD(GtkWidget *NoteBook, GtkWidget *win)
5850 {
5851 	GtkWidget *frame;
5852 	GtkWidget *LabelOnglet;
5853 	GtkWidget *LabelMenu;
5854 	GtkWidget *vbox;
5855 
5856 	frame = gtk_frame_new(NULL);
5857 	gtk_container_set_border_width(GTK_CONTAINER(frame), 5);
5858 
5859 	LabelOnglet = gtk_label_new(_("Info"));
5860 	LabelMenu = gtk_label_new(_("Info"));
5861 	gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu);
5862 	g_object_set_data (G_OBJECT (frame), "frame", frame);
5863 
5864 	vbox = gtk_vbox_new (FALSE, 0);
5865 	gtk_container_add (GTK_CONTAINER (frame), vbox);
5866 	createInfoMDFrame(vbox);
5867 }
5868 /********************************************************************************/
AddGeneralConfoOptionsDlg(GtkWidget * NoteBook,GtkWidget * win)5869 static void AddGeneralConfoOptionsDlg(GtkWidget *NoteBook, GtkWidget *win)
5870 {
5871 	gint i;
5872 	gint j;
5873 	GtkWidget *frame;
5874 	GtkWidget *LabelOnglet;
5875 	GtkWidget *LabelMenu;
5876 	GtkWidget *vbox;
5877 	GtkWidget *table;
5878 	GtkWidget *label;
5879 
5880 	frame = gtk_frame_new(NULL);
5881 	gtk_container_set_border_width(GTK_CONTAINER(frame), 5);
5882 
5883 	LabelOnglet = gtk_label_new(_("General"));
5884 	LabelMenu = gtk_label_new(_("General"));
5885 	gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu);
5886 	g_object_set_data (G_OBJECT (frame), "frame", frame);
5887 
5888 	vbox = gtk_vbox_new (FALSE, 0);
5889 	gtk_container_add (GTK_CONTAINER (frame), vbox);
5890 
5891 	table = gtk_table_new(8,5,FALSE);
5892 	gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);
5893 
5894 /*----------------------------------------------------------------------------------*/
5895 	i = 0;
5896 	j = 0;
5897 	add_label_table(table,_("Number of selected geometries"),(gushort)i,(gushort)j);
5898 /*----------------------------------------------------------------------------------*/
5899 	i = 0;
5900 	j = 1;
5901 	label = gtk_label_new(":");
5902 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5903                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5904                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5905                   1,1);
5906 /*----------------------------------------------------------------------------------*/
5907 	i = 0;
5908 	j = 2;
5909 	entryNumberOfGeom = gtk_entry_new();
5910 	gtk_entry_set_text(GTK_ENTRY(entryNumberOfGeom),"10");
5911 
5912 	gtk_widget_set_size_request(GTK_WIDGET(entryNumberOfGeom),(gint)(ScreenHeight*0.2),-1);
5913 	gtk_table_attach(GTK_TABLE(table),entryNumberOfGeom, j,j+4,i,i+1,
5914                   (GtkAttachOptions)(GTK_FILL|GTK_EXPAND),
5915                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5916                   1,1);
5917 /*----------------------------------------------------------------------------------*/
5918 	i = 1;
5919 	j = 0;
5920 	add_label_table(table,_("Geometries saved in File"),(gushort)i,(gushort)j);
5921 /*----------------------------------------------------------------------------------*/
5922 	i = 1;
5923 	j = 1;
5924 	label = gtk_label_new(":");
5925 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5926                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5927                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5928                   1,1);
5929 /*----------------------------------------------------------------------------------*/
5930 	i = 1;
5931 	j = 2;
5932 	entryFileNameGeom = gtk_entry_new();
5933 	gtk_entry_set_text(GTK_ENTRY(entryFileNameGeom),"conf.gab");
5934 	gtk_widget_set_size_request(GTK_WIDGET(entryFileNameGeom),(gint)(ScreenHeight*0.2),-1);
5935 	gtk_table_attach(GTK_TABLE(table),entryFileNameGeom, j,j+4,i,i+1,
5936                   (GtkAttachOptions)(GTK_FILL|GTK_EXPAND),
5937                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5938                   1,1);
5939 /*----------------------------------------------------------------------------------*/
5940 	i = 2;
5941 	j = 0;
5942 	add_label_table(table,_("Folder"),(gushort)i,(gushort)j);
5943 /*----------------------------------------------------------------------------------*/
5944 	i = 2;
5945 	j = 1;
5946 	label = gtk_label_new(":");
5947 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
5948                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
5949                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5950                   1,1);
5951 /*----------------------------------------------------------------------------------*/
5952 	i = 2;
5953 	j = 2;
5954 	buttonDirSelector =  gabedit_dir_button();
5955 	gtk_widget_set_size_request(GTK_WIDGET(buttonDirSelector),(gint)(ScreenHeight*0.2),-1);
5956 	gtk_table_attach(GTK_TABLE(table),buttonDirSelector,
5957 			j,j+4,i,i+1,
5958                   (GtkAttachOptions)(GTK_FILL|GTK_EXPAND),
5959                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5960                   1,1);
5961 /*----------------------------------------------------------------------------------*/
5962 	i = 3;
5963 	j = 0;
5964 	vbox = gtk_vbox_new (FALSE, 0);
5965 	gtk_table_attach(GTK_TABLE(table),vbox,
5966 			j,j+6,i,i+1,
5967                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5968                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
5969                   1,1);
5970 	createPostProcessingFrame(vbox);
5971 }
5972 /********************************************************************************/
AddDynamicsConfoOptionsDlg(GtkWidget * NoteBook,GtkWidget * win)5973 static void AddDynamicsConfoOptionsDlg(GtkWidget *NoteBook, GtkWidget *win)
5974 {
5975 
5976 	gint i;
5977 	gint j;
5978 	GtkWidget *frame;
5979 	GtkWidget *LabelOnglet;
5980 	GtkWidget *LabelMenu;
5981 	GtkWidget *vbox;
5982 	GtkWidget *table;
5983 	GtkWidget* label;
5984 	GtkWidget *hseparator = NULL;
5985 
5986 	frame = gtk_frame_new(NULL);
5987 	gtk_container_set_border_width(GTK_CONTAINER(frame), 5);
5988 
5989 	LabelOnglet = gtk_label_new(_("Molecular Dynamics"));
5990 	LabelMenu = gtk_label_new(_("Molecular Dynamics"));
5991 	gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook), frame,LabelOnglet, LabelMenu);
5992 	g_object_set_data (G_OBJECT (frame), "frame", frame);
5993 
5994 	vbox = gtk_vbox_new (FALSE, 0);
5995 	gtk_widget_show (vbox);
5996 	gtk_container_add (GTK_CONTAINER (frame), vbox);
5997 
5998 	table = gtk_table_new(18,6,FALSE);
5999 	gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);
6000 
6001 /*----------------------------------------------------------------------------------*/
6002 	i = 0;
6003 	j = 2;
6004 	label = gtk_label_new(_("Heating"));
6005 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6006                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6007                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6008                   1,1);
6009 /*----------------------------------------------------------------------------------*/
6010 	i = 0;
6011 	j = 3;
6012 	label = gtk_label_new(_("Equilibrium"));
6013 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6014                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6015                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6016                   1,1);
6017 /*----------------------------------------------------------------------------------*/
6018 	i = 0;
6019 	j = 4;
6020 	label = gtk_label_new(_("Production"));
6021 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6022                   (GtkAttachOptions)(GTK_FILL|GTK_EXPAND) ,
6023                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6024                   1,1);
6025 /*----------------------------------------------------------------------------------*/
6026 	i = 1;
6027 	j = 0;
6028 	label = gtk_label_new(_("Time (ps)"));
6029 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6030                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6031                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6032                   1,1);
6033 /*----------------------------------------------------------------------------------*/
6034 	i = 1;
6035 	j = 1;
6036 	label = gtk_label_new(":");
6037 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6038                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6039                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6040                   1,1);
6041 /*----------------------------------------------------------------------------------*/
6042 	i = 1;
6043 	j = 2;
6044 	entryMDTimes[0] = gtk_entry_new();
6045 	gtk_entry_set_text(GTK_ENTRY(entryMDTimes[0]),"0.0");
6046 	gtk_widget_set_size_request(entryMDTimes[0], 60, -1);
6047 	gtk_table_attach(GTK_TABLE(table),entryMDTimes[0], j,j+1,i,i+1,
6048                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6049                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6050                   1,1);
6051 /*----------------------------------------------------------------------------------*/
6052 	i = 1;
6053 	j = 3;
6054 	entryMDTimes[1] = gtk_entry_new();
6055 	gtk_widget_set_size_request(entryMDTimes[1], 60, -1);
6056 	gtk_entry_set_text(GTK_ENTRY(entryMDTimes[1]),"1.0");
6057 	gtk_table_attach(GTK_TABLE(table),entryMDTimes[1], j,j+1,i,i+1,
6058                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6059                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6060                   1,1);
6061 /*----------------------------------------------------------------------------------*/
6062 	i = 1;
6063 	j = 4;
6064 	entryMDTimes[2] = gtk_entry_new();
6065 	gtk_widget_set_size_request(entryMDTimes[2], 60, -1);
6066 	gtk_entry_set_text(GTK_ENTRY(entryMDTimes[2]),"10.0");
6067 	gtk_table_attach(GTK_TABLE(table),entryMDTimes[2], j,j+1,i,i+1,
6068                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6069                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6070                   1,1);
6071 /*----------------------------------------------------------------------------------*/
6072 	i = 2;
6073 	j = 0;
6074 	label = gtk_label_new(_("Temperature (K)"));
6075 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6076                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6077                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6078                   1,1);
6079 /*----------------------------------------------------------------------------------*/
6080 	i = 2;
6081 	j = 1;
6082 	label = gtk_label_new(":");
6083 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6084                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6085                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6086                   1,1);
6087 /*----------------------------------------------------------------------------------*/
6088 	i = 2;
6089 	j = 2;
6090 	entryMDTemperature[0] = gtk_entry_new();
6091 	gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[0]),"0.0");
6092 	gtk_widget_set_size_request(entryMDTemperature[0], 60, -1);
6093 	gtk_table_attach(GTK_TABLE(table),entryMDTemperature[0], j,j+1,i,i+1,
6094                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6095                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6096                   1,1);
6097 /*----------------------------------------------------------------------------------*/
6098 	/*
6099 	i = 2;
6100 	j = 3;
6101 	entryMDTemperature[1] = gtk_entry_new();
6102 	gtk_widget_set_size_request(entryMDTemperature[1], 60, -1);
6103 	gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[1]),"1000.0");
6104 	gtk_table_attach(GTK_TABLE(table),entryMDTemperature[1], j,j+1,i,i+1,
6105                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6106                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6107                   1,1);
6108 		  */
6109 /*----------------------------------------------------------------------------------*/
6110 	i = 2;
6111 	j = 4;
6112 	entryMDTemperature[2] = gtk_entry_new();
6113 	gtk_widget_set_size_request(entryMDTemperature[2], 60, -1);
6114 	gtk_entry_set_text(GTK_ENTRY(entryMDTemperature[2]),"1000.0");
6115 	gtk_table_attach(GTK_TABLE(table),entryMDTemperature[2], j,j+1,i,i+1,
6116                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6117                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6118                   1,1);
6119 /*----------------------------------------------------------------------------------*/
6120 	i = 3;
6121 	j = 0;
6122 	label = gtk_label_new(_("Step size (fs)"));
6123 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6124                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6125                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6126                   1,1);
6127 /*----------------------------------------------------------------------------------*/
6128 	i = 3;
6129 	j = 1;
6130 	label = gtk_label_new(":");
6131 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6132                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6133                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6134                   1,1);
6135 /*----------------------------------------------------------------------------------*/
6136 	i = 3;
6137 	j = 2;
6138 	entryMDStepSize = gtk_entry_new();
6139 	gtk_widget_set_size_request(entryMDStepSize, 60, -1);
6140 	gtk_entry_set_text(GTK_ENTRY(entryMDStepSize),"1.0");
6141 	gtk_table_attach(GTK_TABLE(table),entryMDStepSize, j,j+1,i,i+1,
6142                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6143                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6144                   1,1);
6145 /*----------------------------------------------------------------------------------*/
6146 	i = 4;
6147 	j = 0;
6148 	label = gtk_label_new(_("Screen Rafresh after"));
6149 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6150                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6151                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6152                   1,1);
6153 /*----------------------------------------------------------------------------------*/
6154 	i = 4;
6155 	j = 1;
6156 	label = gtk_label_new(":");
6157 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6158                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6159                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6160                   1,1);
6161 /*----------------------------------------------------------------------------------*/
6162 	i = 4;
6163 	j = 2;
6164 	entryMDRafresh = gtk_entry_new();
6165 	gtk_widget_set_size_request(entryMDRafresh, 60, -1);
6166 	gtk_entry_set_text(GTK_ENTRY(entryMDRafresh),"1");
6167 	gtk_table_attach(GTK_TABLE(table),entryMDRafresh, j,j+1,i,i+1,
6168                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6169                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6170                   1,1);
6171 /*----------------------------------------------------------------------------------*/
6172 	i = 4;
6173 	j = 3;
6174 	label = gtk_label_new(_("steps"));
6175 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6176                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6177                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6178                   1,1);
6179 /*----------------------------------------------------------------------------------*/
6180 	i = 5;
6181 	j = 0;
6182 	label = gtk_label_new(_("Collide(ps^-1)"));
6183 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6184                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6185                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6186                   1,1);
6187 /*----------------------------------------------------------------------------------*/
6188 	i = 5;
6189 	j = 1;
6190 	label = gtk_label_new(":");
6191 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6192                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6193                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6194                   1,1);
6195 /*----------------------------------------------------------------------------------*/
6196 	i = 5;
6197 	j = 2;
6198 	entrySDCollide = gtk_entry_new();
6199 	gtk_widget_set_size_request(entrySDCollide, 60, -1);
6200 	gtk_entry_set_text(GTK_ENTRY(entrySDCollide),"20.0");
6201 	gtk_table_attach(GTK_TABLE(table),entrySDCollide, j,j+1,i,i+1,
6202                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6203                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6204                   1,1);
6205 /*----------------------------------------------------------------------------------*/
6206 	i = 6;
6207 	j = 0;
6208 	label = gtk_label_new(_("Friction(ps^-1)"));
6209 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6210                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6211                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6212                   1,1);
6213 /*----------------------------------------------------------------------------------*/
6214 	i = 6;
6215 	j = 1;
6216 	label = gtk_label_new(":");
6217 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6218                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6219                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6220                   1,1);
6221 /*----------------------------------------------------------------------------------*/
6222 	i = 6;
6223 	j = 2;
6224 	entrySDFriction = gtk_entry_new();
6225 	gtk_widget_set_size_request(entrySDFriction, 60, -1);
6226 	gtk_entry_set_text(GTK_ENTRY(entrySDFriction),"40.0");
6227 	gtk_table_attach(GTK_TABLE(table),entrySDFriction, j,j+1,i,i+1,
6228                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6229                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6230                   1,1);
6231 	/* THERMOSTAT */
6232 /*----------------------------------------------------------------------------------*/
6233 	i = 3;
6234 	j = 4;
6235 	buttonMDThermOptions[NONE]= gtk_radio_button_new_with_label( NULL, "NVE");
6236 	gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[NONE],
6237 			j,j+1,i,i+1,
6238                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6239                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6240                   1,1);
6241 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[NONE]), TRUE);
6242 /*----------------------------------------------------------------------------------*/
6243 	i = 4;
6244 	j = 4;
6245 	buttonMDThermOptions[BERENDSEN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Berendsen");
6246 	gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[BERENDSEN],
6247 			j,j+1,i,i+1,
6248                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6249                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6250                   1,1);
6251 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[BERENDSEN]), FALSE);
6252 /*----------------------------------------------------------------------------------*/
6253 	i = 5;
6254 	j = 4;
6255 	buttonMDThermOptions[ANDERSEN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Andersen");
6256 	gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[ANDERSEN],
6257 			j,j+1,i,i+1,
6258                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6259                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6260                   1,1);
6261 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[ANDERSEN]), FALSE);
6262 /*----------------------------------------------------------------------------------*/
6263 	i = 6;
6264 	j = 4;
6265 	buttonMDThermOptions[BUSSI]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDThermOptions[NONE])), "Bussi");
6266 	gtk_table_attach(GTK_TABLE(table),buttonMDThermOptions[BUSSI],
6267 			j,j+1,i,i+1,
6268                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6269                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6270                   1,1);
6271 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDThermOptions[BUSSI]), FALSE);
6272 /*----------------------------------------------------------------------------------*/
6273 	i = 7;
6274 	j = 0;
6275 	hseparator = gtk_hseparator_new ();
6276 	gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1,
6277                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6278                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6279                   1,1);
6280 /*----------------------------------------------------------------------------------*/
6281 	i = 8;
6282 	j = 0;
6283 	buttonMDOptions[VERLET]= gtk_radio_button_new_with_label( NULL, _("MD Trajectory via Verlet velocity Algorithm"));
6284 	gtk_table_attach(GTK_TABLE(table),buttonMDOptions[VERLET],
6285 			j,j+4,i,i+1,
6286                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6287                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6288                   1,1);
6289 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[VERLET]), TRUE);
6290 /*----------------------------------------------------------------------------------*/
6291 	i = 9;
6292 	j = 0;
6293 	buttonMDOptions[BEEMAN]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDOptions[VERLET])), _("MD Trajectory via Modified Beeman Algorithm"));
6294 	gtk_table_attach(GTK_TABLE(table),buttonMDOptions[BEEMAN],
6295 			j,j+4,i,i+1,
6296                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6297                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6298                   1,1);
6299 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[BEEMAN]), FALSE);
6300 /*----------------------------------------------------------------------------------*/
6301 	i = 10;
6302 	j = 0;
6303 	buttonMDOptions[STOCHASTIC]= gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonMDOptions[VERLET])), _("Stochastic Dynamics via Verlet velocity Algorithm"));
6304 	gtk_table_attach(GTK_TABLE(table),buttonMDOptions[STOCHASTIC],
6305 			j,j+4,i,i+1,
6306                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6307                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6308                   1,1);
6309 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonMDOptions[STOCHASTIC]), FALSE);
6310 /*----------------------------------------------------------------------------------*/
6311 	i = 11;
6312 	j = 0;
6313 	hseparator = gtk_hseparator_new ();
6314 	gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1,
6315                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6316                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6317                   1,1);
6318 /*----------------------------------------------------------------------------------*/
6319 	i = 12;
6320 	j = 0;
6321 	buttonConstraintsOptions[NOCONSTRAINTS]= gtk_radio_button_new_with_label( NULL, _("No constraints"));
6322 	gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[NOCONSTRAINTS],
6323 			j,j+4,i,i+1,
6324                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6325                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6326                   1,1);
6327 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS]), TRUE);
6328 /*----------------------------------------------------------------------------------*/
6329 	i = 13;
6330 	j = 0;
6331 	buttonConstraintsOptions[BONDSCONSTRAINTS]= gtk_radio_button_new_with_label(
6332 			gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS])), _("Bond constraints"));
6333 	gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[BONDSCONSTRAINTS],
6334 			j,j+4,i,i+1,
6335                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6336                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6337                   1,1);
6338 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSCONSTRAINTS]), FALSE);
6339 /*----------------------------------------------------------------------------------*/
6340 	i = 14;
6341 	j = 0;
6342 	buttonConstraintsOptions[BONDSANGLESCONSTRAINTS]= gtk_radio_button_new_with_label(
6343 			gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttonConstraintsOptions[NOCONSTRAINTS])), _("Bond & Angle constraints"));
6344 	gtk_table_attach(GTK_TABLE(table),buttonConstraintsOptions[BONDSANGLESCONSTRAINTS],
6345 			j,j+4,i,i+1,
6346                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6347                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6348                   1,1);
6349 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonConstraintsOptions[BONDSANGLESCONSTRAINTS]), FALSE);
6350 /*----------------------------------------------------------------------------------*/
6351 	i = 15;
6352 	j = 0;
6353 	hseparator = gtk_hseparator_new ();
6354 	gtk_table_attach(GTK_TABLE(table),hseparator, j,j+6,i,i+1,
6355                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6356                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6357                   1,1);
6358 /*----------------------------------------------------------------------------------*/
6359 	i = 16;
6360 	j = 0;
6361 	buttonSaveTraj = gtk_check_button_new_with_label(_("Save Trajectory in "));
6362 	gtk_table_attach(GTK_TABLE(table),buttonSaveTraj,
6363 			j,j+1,i,i+1,
6364                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6365                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6366                   1,1);
6367 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSaveTraj), FALSE);
6368 /*----------------------------------------------------------------------------------*/
6369 	i = 16;
6370 	j = 1;
6371 	label = gtk_label_new(":");
6372 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6373                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6374                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6375                   1,1);
6376 /*----------------------------------------------------------------------------------*/
6377 	i = 16;
6378 	j = 2;
6379 	entryFileNameTraj = gtk_entry_new();
6380 	gtk_widget_set_size_request(entryFileNameTraj, 60, -1);
6381 	gtk_entry_set_text(GTK_ENTRY(entryFileNameTraj),"traj.gab");
6382 	gtk_table_attach(GTK_TABLE(table),entryFileNameTraj, j,j+4,i,i+1,
6383                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6384                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6385                   1,1);
6386 /*----------------------------------------------------------------------------------*/
6387 	i = 17;
6388 	j = 0;
6389 	buttonSaveProp = gtk_check_button_new_with_label(_("Save Properties in "));
6390 	gtk_table_attach(GTK_TABLE(table),buttonSaveProp,
6391 			j,j+1,i,i+1,
6392                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6393                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6394                   1,1);
6395 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonSaveProp), FALSE);
6396 /*----------------------------------------------------------------------------------*/
6397 	i = 17;
6398 	j = 1;
6399 	label = gtk_label_new(":");
6400 	gtk_table_attach(GTK_TABLE(table),label, j,j+1,i,i+1,
6401                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6402                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6403                   1,1);
6404 /*----------------------------------------------------------------------------------*/
6405 	i = 17;
6406 	j = 2;
6407 	entryFileNameProp = gtk_entry_new();
6408 	gtk_widget_set_size_request(entryFileNameProp, 60, -1);
6409 	gtk_entry_set_text(GTK_ENTRY(entryFileNameProp),"prop.txt");
6410 	gtk_table_attach(GTK_TABLE(table),entryFileNameProp, j,j+4,i,i+1,
6411                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
6412                   (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
6413                   1,1);
6414 }
6415 /*****************************************************************************/
semiEmpiricalMolecularDynamicsDlg()6416 void semiEmpiricalMolecularDynamicsDlg()
6417 {
6418 	GtkWidget *button;
6419 	GtkWidget *Win;
6420 	GtkWidget *NoteBook;
6421 	GtkWidget *parentWindow = GeomDlg;
6422 
6423 	StopCalcul = TRUE;
6424 
6425 	Win= gtk_dialog_new ();
6426 	gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER);
6427 	gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow));
6428 	gtk_window_set_title(&GTK_DIALOG(Win)->window,"Molecular Dynamics");
6429     	gtk_window_set_modal (GTK_WINDOW (Win), TRUE);
6430 
6431 	g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)gtk_widget_destroy,NULL);
6432 
6433 	NoteBook = gtk_notebook_new();
6434 	gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Win)->vbox), NoteBook,TRUE, TRUE, 0);
6435 
6436 	AddDynamicsOptionsDlg(NoteBook, Win);
6437 	AddModelOptionsDlg(NoteBook, Win);
6438 	AddInfoMD(NoteBook, Win);
6439 
6440 
6441 	gtk_widget_realize(Win);
6442 
6443 	button = create_button(Win,"Cancel");
6444 	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
6445 	gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0);
6446 	g_signal_connect_swapped(GTK_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(Win));
6447 	gtk_widget_show (button);
6448 
6449 	button = create_button(Win,"Ok");
6450 	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
6451 	gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0);
6452 	g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)semiEmpiricalMD,GTK_OBJECT(Win));
6453 	gtk_widget_show (button);
6454 
6455 	gtk_widget_show_all(Win);
6456 
6457 }
6458 /***********************************************************************/
semiEmpiricalMolecularDynamicsConfoDlg()6459 void semiEmpiricalMolecularDynamicsConfoDlg()
6460 {
6461 	GtkWidget *button;
6462 	GtkWidget *Win;
6463 	GtkWidget *NoteBook;
6464 	GtkWidget *parentWindow = GeomDlg;
6465 
6466 	StopCalcul = TRUE;
6467 
6468 	Win= gtk_dialog_new ();
6469 	gtk_window_set_position(GTK_WINDOW(Win),GTK_WIN_POS_CENTER);
6470 	gtk_window_set_transient_for(GTK_WINDOW(Win),GTK_WINDOW(parentWindow));
6471 	gtk_window_set_title(&GTK_DIALOG(Win)->window,"Molecular Dynamics Conformational search");
6472     	gtk_window_set_modal (GTK_WINDOW (Win), TRUE);
6473 
6474 	g_signal_connect(G_OBJECT(Win),"delete_event",(GCallback)gtk_widget_destroy,NULL);
6475 
6476 	NoteBook = gtk_notebook_new();
6477 	gtk_box_pack_start(GTK_BOX (GTK_DIALOG(Win)->vbox), NoteBook,TRUE, TRUE, 0);
6478 
6479 	AddGeneralConfoOptionsDlg(NoteBook, Win);
6480 	AddDynamicsConfoOptionsDlg(NoteBook, Win);
6481 	AddModelOptionsDlg(NoteBook, Win);
6482 	AddInfoConfo(NoteBook, Win);
6483 
6484 
6485 	gtk_widget_realize(Win);
6486 
6487 	button = create_button(Win,"Cancel");
6488 	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
6489 	gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0);
6490 	g_signal_connect_swapped(GTK_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy),GTK_OBJECT(Win));
6491 	gtk_widget_show (button);
6492 
6493 	button = create_button(Win,"Ok");
6494 	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
6495 	gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Win)->action_area), button, TRUE, TRUE, 0);
6496 	g_signal_connect_swapped(GTK_OBJECT(button), "clicked", (GCallback)semiEmpiricalMDConfo,GTK_OBJECT(Win));
6497 	gtk_widget_show (button);
6498 
6499 	gtk_widget_show_all(Win);
6500 
6501 }
6502 /***********************************************************************/
6503