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(>K_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(>K_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(>K_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