1 /****************************************************************************
2  * program for create QChem function for create default qchemBasis file
3  *
4  * compile createQChemFuncForGabedit :
5  *      gcc -o createQChemFuncForGabedit createQChemFuncForGabedit.c
6  * createQChemFuncForGabedit and enter for create the qchem.cc file
7  * for Gabedit.
8 *****************************************************************************/
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <string.h>
12 #include <sys/stat.h>
13 #include <ctype.h>
14 
15 
16 #ifndef G_OS_WIN32
17 #include <dirent.h>
18 #else
19 #include <windows.h>
20 #endif
21 
22 
23 #define NBASIS 120
24 #define BSIZE 1024
25 
26 typedef struct _Atom
27 {
28 	char symb[10];
29 	int nbas;
30 	char basisName[NBASIS][BSIZE];
31 }Atom;
32 
33 typedef struct _Basis
34 {
35 	char name[BSIZE];
36 	int nAtoms;
37 	char symbols[NBASIS][BSIZE];
38 }Basis;
39 
40 /***********************************************************************************/
41 #define NROW 18
42 #define NCOL 10
43 char *SymbAtoms[18][10]={
44 		{"H" ,"Li","Na","K" ,"Rb","Cs","Fr","00","00","00"},
45 		{"00","Be","Mg","Ca","Sr","Ba","Ra","00","X","00"},
46 		{"00","00","00","Sc","Y" ,"La","Ac","00","00","00"},
47 		{"00","00","00","Ti","Zr","Hf","00","00","00","00"},
48 		{"00","00","00","V" ,"Nb","Ta","00","Ce","Th","00"},
49 		{"00","00","00","Cr","Mo","W" ,"00","Pr","Pa","00"},
50 		{"00","00","00","Mn","Tc","Re","00","Nd","U" ,"00"},
51 		{"00","00","00","Fe","Ru","Os","00","Pm","Np","00"},
52 		{"00","00","00","Co","Rh","Ir","00","Sm","Pu","00"},
53 		{"00","00","00","Ni","Pd","Pt","00","Eu","Am","00"},
54 		{"00","00","00","Cu","Ag","Au","00","Gd","Cm","00"},
55 		{"00","00","00","Zn","Cd","Hg","00","Tb","Bk","00"},
56 		{"00","B" ,"Al","Ga","In","Tl","00","Dy","Cf","00"},
57 		{"00","C" ,"Si","Ge","Sn","Pb","00","Ho","Es","00"},
58 		{"00","N" ,"P" ,"As","Sb","Bi","00","Er","Fm","00"},
59 		{"00","O" ,"S" ,"Se","Te","Po","00","Tm","Md","00"},
60 		{"00","F" ,"Cl","Br","I" ,"At","00","Yb","No","00"},
61 		{"He","Ne","Ar","Kr","Xe","Rn","00","Lu","Lr","00"},
62 		};
63 /***********************************************************************************/
get_list_of_files(char * dirname,int * n)64 static char** get_list_of_files(char* dirname, int* n)
65 {
66 	DIR* dir;
67 	struct stat st;
68 	struct dirent *File;
69 	int nFiles = 0;
70 	char** filesList = NULL;
71 
72 	dir = opendir(dirname);
73 	if(dir)
74 	{
75 		File = readdir(dir);
76 		while(File)
77 		{
78 
79 			if( strlen(File->d_name)>0 && File->d_name[0] != '.' )
80 			{
81 				char all_name[BSIZE];
82 				printf("%s\n",File->d_name);
83 				sprintf(all_name,"%s%s%s",dirname,"/",File->d_name);
84 				stat(all_name,&st);
85 				if(!(st.st_mode & S_IFDIR))
86 				{
87 					nFiles++;
88 					filesList = realloc(filesList, nFiles*sizeof(char*));
89 					filesList[nFiles-1] = strdup(all_name);
90 					printf("allname = %s\n",all_name);
91 				}
92 			}
93 			File = readdir(dir);
94 		}
95 		closedir(dir);
96 	}
97 	*n = nFiles;
98 	return filesList;
99 }
100 /***********************************************************************************/
addOneBasis(Basis * listOfBasis,char * basis,char * atom)101 Basis* addOneBasis(Basis* listOfBasis, char* basis, char* atom)
102 {
103 	int n = 1;
104 	int i,j;
105 	if(listOfBasis==NULL)
106 	{
107 		listOfBasis = malloc(1*sizeof(Basis));
108 		listOfBasis[0].nAtoms = -1;
109 	}
110 	for(i=0;listOfBasis[i].nAtoms>=0; i++)
111 	{
112 		n++;
113 		if(strcmp(listOfBasis[i].name,basis)==0)
114 		{
115 			for(j=0;j<listOfBasis[i].nAtoms; j++)
116 				if(strcmp(listOfBasis[i].symbols[j],atom)==0)
117 				{
118 					return listOfBasis;
119 				}
120 			sprintf(listOfBasis[i].symbols[j],"%s",atom);
121 			listOfBasis[i].nAtoms++;
122 			return listOfBasis;
123 		}
124 	}
125 	listOfBasis = realloc(listOfBasis,(n+1)*sizeof(Basis));
126 	listOfBasis[n].nAtoms = -1;
127 	listOfBasis[n-1].nAtoms = 1;
128 	sprintf(listOfBasis[n-1].symbols[0],"%s",atom);
129 	sprintf(listOfBasis[n-1].name,"%s",basis);
130 	return listOfBasis;
131 }
132 /***********************************************************************************/
newAtomList()133 Atom* newAtomList()
134 {
135 	Atom* listOfAtoms=NULL;
136 	int n = 0;
137 	int i, j;
138 
139 	for(i=0;i<NCOL;i++)
140 	for(j=0;j<NROW;j++)
141 	{
142 		if(strcmp(SymbAtoms[j][i],"00")==0) continue;
143 		n++;
144 	}
145 	n++;
146 	listOfAtoms = (Atom*)malloc(n*sizeof(Atom));
147 	listOfAtoms[n-1].nbas = -1;
148 
149 	n = 0;
150 	for(i=0;i<NCOL;i++)
151 	for(j=0;j<NROW;j++)
152 	{
153 		if(strcmp(SymbAtoms[j][i],"00")==0) continue;
154 		n++;
155 		listOfAtoms[n-1].nbas = 0;
156 		sprintf(listOfAtoms[n-1].symb,"%s",SymbAtoms[j][i]);
157 	}
158 	return listOfAtoms;
159 
160 
161 }
162 /***********************************************************************************/
printAllAtomsList(Atom listOfAtoms[])163 void printAllAtomsList(Atom listOfAtoms[])
164 {
165 	int i=0;
166 	int j=0;
167 	for(i=0;listOfAtoms[i].nbas>=0; i++)
168 	{
169 		printf("%s : %d ",listOfAtoms[i].symb, listOfAtoms[i].nbas);
170 		for(j=0;j<listOfAtoms[i].nbas; j++)
171 			printf("%s ",listOfAtoms[i].basisName[j]);
172 		printf("\n");
173 	}
174 }
175 /***********************************************************************************/
printAllBasisList(Basis listOfBasis[])176 void printAllBasisList(Basis listOfBasis[])
177 {
178 	int i=0;
179 	int j=0;
180 	for(i=0;listOfBasis[i].nAtoms>=0; i++)
181 	{
182 		printf("%s : ",listOfBasis[i].name);
183 		for(j=0;j<listOfBasis[i].nAtoms; j++)
184 			printf("%s ",listOfBasis[i].symbols[j]);
185 		printf("\n");
186 	}
187 }
188 /***********************************************************************************/
createBasisList(Atom listOfAtoms[])189 Basis* createBasisList(Atom listOfAtoms[])
190 {
191 	Basis* listOfBasis = NULL;
192 	int i=0;
193 	int j=0;
194 	for(i=0;listOfAtoms[i].nbas>=0; i++)
195 	{
196 		for(j=0;j<listOfAtoms[i].nbas; j++)
197 		listOfBasis =addOneBasis(listOfBasis,listOfAtoms[i].basisName[j], listOfAtoms[i].symb);
198 	}
199 	return listOfBasis;
200 }
201 /***********************************************************************************/
str_delete_n(char * str)202 void str_delete_n(char* str)
203 {
204 	char *s;
205 
206 	if(str == NULL)
207 		return;
208 
209 	if (!*str)
210 		return;
211 	for (s = str + strlen (str) - 1; s >= str && ((unsigned char)*s)=='\n'; s--)
212 		*s = '\0';
213 }
214 /**********************************************/
delete_last_spaces(char * str)215 void delete_last_spaces(char* str)
216 {
217 	char *s;
218 
219 	if(str == NULL)
220 		return;
221 
222 	if (!*str)
223 		return;
224 	for (s = str + strlen (str) - 1; s >= str && isspace ((unsigned char)*s); s--)
225 		*s = '\0';
226 }
227 /**********************************************/
delete_first_spaces(char * str)228 void delete_first_spaces(char* str)
229 {
230 	unsigned char *start;
231 	int i;
232 	int lenSpace = 0;
233 
234 	if(str == NULL)
235 		return;
236 	if (!*str)
237 		return;
238 
239 	for (start = str; *start && isspace (*start); start++)lenSpace++;
240 
241 	for(i=0;i<(int)(strlen(str)-lenSpace);i++)
242 		str[i] = str[i+lenSpace];
243 	str[strlen(str)-lenSpace] = '\0';
244 }
245 /***********************************************************************************/
getBasisAndAtoms(char * t,char * basis,char * atoms)246 void getBasisAndAtoms(char* t, char* basis, char* atoms)
247 {
248 	int i;
249 	int j;
250 	int k;
251 	int OkBasis = 0;
252 	int OkAtoms = 0;
253 
254 	k = 0;
255 	for(i=k;i<strlen(t);i++)
256 	{
257 		if(t[i]!='<') break;
258 		for(j=i+1;j<strlen(t);j++)
259 			if(t[j]=='>')  { i = j; break;}
260 	}
261 	for(k=j+1;k<strlen(t);k++)
262 	{
263 		if(t[k]=='<') break;
264 		basis[k-j-1] = t[k];
265 	}
266 	basis[k] = '\0';
267 	for(i=k;i<strlen(t);i++)
268 	{
269 		if(t[i]!='<') break;
270 		for(j=i+1;j<strlen(t);j++)
271 			if(t[j]=='>')  { i = j; break;}
272 	}
273 	for(k=j+1;k<strlen(t);k++)
274 	{
275 		if(t[k]=='<') break;
276 		atoms[k-j-1] = t[k];
277 	}
278 	atoms[k] = '\0';
279 	/*printf("Basis = %s Atoms = %s\n",basis,atoms);*/
280 
281 }
282 /***********************************************************************************/
getListOfGroups(char * atoms)283 char** getListOfGroups(char* atoms)
284 {
285 	int n=0;
286 	int i;
287 	int j;
288 	char** m = malloc(1*sizeof(char*));
289 	m[0] = NULL;
290 
291 	for(i=0;i<strlen(atoms);i++)
292 	{
293 		if(atoms[i]==',') {continue;}
294 		n++;
295 		m = realloc(m,(n+1)*sizeof(char*));
296 		m[n] = NULL;
297 		m[n-1] = malloc(BSIZE*sizeof(char));
298 		for(j=i;j<strlen(atoms);j++)
299 		{
300 			if(atoms[j]==',')  {break;}
301 			m[n-1][j-i] = atoms[j];
302 		}
303 		i=j;
304 		m[n-1][j] = '\0';
305 		delete_last_spaces(m[n-1]);
306 		delete_first_spaces(m[n-1]);
307 	}
308 	return m;
309 
310 }
311 /***********************************************************************************/
getListOfAtoms(char * oneList)312 char** getListOfAtoms(char* oneList)
313 {
314 	if(!strstr(oneList,"-"))
315 	{
316 		char** m = malloc(2*sizeof(char*));
317 		m[1] = NULL;
318 		m[0] = strdup(oneList);
319 		return m;
320 	}
321 	else
322 	{
323 		char* atomMin  = malloc(BSIZE*sizeof(char));
324 		char* atomMax  = malloc(BSIZE*sizeof(char));
325 		int i,j;
326 		int iMin=-1,jMin=-1;
327 		int iMax=-1,jMax=-1;
328 		char** m = malloc(1*sizeof(char*));
329 		int n=0;
330 		m[0] = NULL;
331 
332 		for(i=0;i<strlen(oneList);i++)
333 		{
334 			if(oneList[i]=='-')break;
335 			atomMin[i] = oneList[i];
336 		}
337 		atomMin[i] = '\0';
338 		for(j=i+1;j<strlen(oneList);j++)
339 		{
340 			atomMax[j-i-1] = oneList[j];
341 		}
342 		atomMin[j] = '\0';
343 
344 		for(i=0;i<NCOL;i++)
345 		for(j=0;j<NROW;j++)
346 		{
347 			if(strcmp(SymbAtoms[j][i],atomMin)==0)
348 			{
349 				iMin = i;
350 				jMin = j;
351 			}
352 			if(strcmp(SymbAtoms[j][i],atomMax)==0)
353 			{
354 				iMax = i;
355 				jMax = j;
356 			}
357 
358 		}
359 
360 		if(iMin>=0 && jMin>=0 && iMax>=0 && jMax>=0)
361 		{
362 			for(i=iMin;i<=iMax;i++)
363 			{
364 				if(i==iMin) j = jMin;
365 				else j = 0;
366 			for( ; (i==iMax)?j<=jMax:j<NROW ; j++)
367 			{
368 				if(strcmp(SymbAtoms[j][i],"00")==0)continue;
369 				{
370 					n++;
371 					m = realloc(m,(n+1)*sizeof(char*));
372 					m[n] = NULL;
373 					m[n-1] = strdup(SymbAtoms[j][i]);
374 				}
375 			}
376 			}
377 		}
378 		return m;
379 
380 		return NULL;
381 	}
382 }
383 /***********************************************************************************/
strup(char * str)384 static void strup(char* str)
385 {
386 	int i=0;
387 	if(!str) return;
388 	for(i=0;i<strlen(str);i++)
389 		str[i] = toupper(str[i]);
390 }
391 /***********************************************************************************/
atomInFile(FILE * file,char * symb)392 static int atomInFile(FILE* file, char* symb)
393 {
394 	int ok = 0;
395 	char t[BSIZE];
396 	char s1[10];
397 	char s2[10];
398 	int i;
399 	int k;
400 	char* ss = strdup(symb);
401 
402 	strup(ss);
403 	while(!feof(file))
404 	{
405 		if(!fgets(t,BSIZE,file)) break;
406 		strup(t);
407 		k = sscanf(t,"%s %d %s",s1,&i,s2);
408 		if(k != 2) continue;
409 		if(strcmp(s1,ss)==0)
410 		{
411 			ok = 1;
412 			break;
413 		}
414 	}
415 	return ok;
416 }
417 /***********************************************************************************/
createQChemFunction(Atom * listOfAtoms,Basis * listOfBasis)418 void createQChemFunction(Atom* listOfAtoms, Basis* listOfBasis)
419 {
420 	int nBasis = 0;
421 	int nAtoms = 0;
422 	FILE* file;
423 	int i;
424 	int j;
425 
426 	file = fopen("qchemBasis.cc","w");
427 	if(!file) return;
428 	fprintf(file,"gboolean create_libqchem_file(gchar* filename)\n");
429 	fprintf(file,"{\n");
430 	fprintf(file,"\tFILE* file = fopen(filename,\"w\");\n\n");
431 	fprintf(file,"\tif(file==NULL)\n");
432 	fprintf(file,"\t{\n");
433 	fprintf(file,"\t\treturn FALSE;\n");
434 	fprintf(file,"\t}\n");
435 	/*
436 	for(i=0;listOfBasis[i].nAtoms>=0;i++) nBasis++;
437 	fprintf(file,"\tfprintf(file,\"Begin List of basis\\n\");\n");
438 	fprintf(file,"\tfprintf(file,\"Nbasis = %d\\n\");\n",nBasis);
439 	printf("nBasis = %d\n",nBasis);
440 	for(i=0;i<nBasis;i++)
441 	{
442 		int j=0;
443 		fprintf(file,"\tfprintf(file,\"Basis  %s\\n\");\n",listOfBasis[i].name);
444 		fprintf(file,"\tfprintf(file,\"%d\\n\");\n",listOfBasis[i].nAtoms);
445 		for(j=0;j<listOfBasis[i].nAtoms;j++)
446 		{
447 			int k = 0;
448 			fprintf(file,"\tfprintf(file,\"%s %s", listOfBasis[i].name, listOfBasis[i].symbols[j]);
449 			fprintf(file,"\\n\");\n");
450 		}
451 	}
452 	fprintf(file,"\tfprintf(file,\"End List of basis\\n\\n\");\n\n");
453 	*/
454 	for(i=0;listOfAtoms[i].nbas>=0;i++) nAtoms++;
455 	/* fprintf(file,"\tfprintf(file,\"Begin List of atoms\\n\");\n");*/
456 	fprintf(file,"\tfprintf(file,\"NAtoms = %d\\n\");\n",nAtoms);
457 	for(i=0;i<nAtoms;i++)
458 	{
459 		int j=0;
460 		fprintf(file,"\tfprintf(file,\"Atom  %s\\n\");\n",listOfAtoms[i].symb);
461 		fprintf(file,"\tfprintf(file,\"%d\\n\");\n",listOfAtoms[i].nbas);
462 		for(j=0;j<listOfAtoms[i].nbas;j++)
463 		{
464 			int k = 0;
465 			fprintf(file,"\tfprintf(file,\"%s %s ", listOfAtoms[i].symb, listOfAtoms[i].basisName[j]);
466 			fprintf(file,"\\n\");\n");
467 		}
468 	}
469 	/* fprintf(file,"\tfprintf(file,\"End List of atoms\\n\");\n");*/
470 	fprintf(file,"\tfclose(file);\n");
471 	fprintf(file,"\treturn TRUE;\n");
472 	fprintf(file,"}\n");
473 	fclose(file);
474 }
475 
476 /***********************************************************************************/
setBaseNameFromFileName(char * baseName,FILE * file,char * fileName)477 static void setBaseNameFromFileName(char* baseName, FILE* file, char* fileName)
478 {
479 	int k;
480 	char t[BSIZE];
481 	int i;
482 	int begin;
483 	int end;
484 
485 	fseek(file, 0L, SEEK_SET);
486 	sprintf(baseName,"UNK");
487 	while(!feof(file))
488 	{
489 		if(!fgets(t,BSIZE,file)) break;
490 		if(strstr(t,"BASIS="))
491 		{
492 			char* p = strstr(t,"BASIS=")+7;
493 			for(i=0;i<strlen(t);i++)
494 			{
495 				if(t[i] == '"') t[i] = ' ';
496 				if(t[i] == '(') t[i] = ' ';
497 				if(t[i] == ')') t[i] = ' ';
498 			}
499 			p = strstr(t,"BASIS=")+7;
500 			k = sscanf(p,"%s",baseName);
501 			if(k!=1)
502 				sprintf(baseName,"UNK");
503 			break;
504 		}
505 	}
506 	if(strcmp(baseName,"Pople")!=0 && strcmp(baseName,"UNK")!=0) return;
507 	printf("baseName = %s\n", baseName);
508 	printf("fileName = %s\n", fileName);
509 	for(i=0;i<strlen(fileName);i++)
510 	{
511 		if(fileName[i] == '/') begin = i;
512 		if(fileName[i] == '.') end = i;
513 	}
514 	begin++;
515 	for(i=0;i<end-begin;i++)
516 	{
517 		baseName[i] = fileName[i+begin];
518 	}
519 	baseName[end] = '\0';
520 
521 }
522 /***********************************************************************************/
swap(char * x,char * y)523 static void swap(char* x, char* y)
524 {
525 	char buffer[BSIZE];
526 	sprintf(buffer,"%s",x);
527 	sprintf(x,"%s",y);
528 	sprintf(y,"%s",buffer);
529 }
530 /***********************************************************************************/
sort0(Atom * atom)531 static void sort0(Atom* atom)
532 {
533 	int nbas = 0;
534 	int i;
535 	int j;
536 	int k;
537 
538 	nbas = atom->nbas;
539 	for(i=0; i<nbas-1; i++)
540 	{
541 		k = i;
542 		for(j=i+1; j<nbas; j++)
543 			if(strcasecmp(atom->basisName[k],atom->basisName[j])>0) { k = j;}
544 
545 
546 		if(k != i)
547 		{
548 			swap(atom->basisName[i],atom->basisName[k]);
549 		}
550 	}
551 }
552 /***********************************************************************************/
sortBasisForAnAtom(Atom * atom)553 static void sortBasisForAnAtom(Atom* atom)
554 {
555 	int nbas = 0;
556 	int i;
557 	int j;
558 	int k;
559 
560 	nbas = atom->nbas;
561 	for(i=0; i<nbas-1; i++)
562 	{
563 		for(j=i+1; j<nbas; j++)
564 			if(strcasecmp(atom->basisName[i],atom->basisName[j])==0)
565 				sprintf(atom->basisName[j],"ZZZZZZZZZZZ");
566 		if(strstr(atom->basisName[i],"STO"))
567 		{
568 			char buffer[100];
569 				sprintf(buffer,"00-%s",atom->basisName[i]);
570 				sprintf(atom->basisName[i],"%s",buffer);
571 		}
572 		if(strstr(atom->basisName[i],"5Z"))
573 		{
574 			char* p = strstr(atom->basisName[i],"5Z");
575 			*p = 'Y';
576 		}
577 		if(strstr(atom->basisName[i],"6Z"))
578 		{
579 			char* p = strstr(atom->basisName[i],"5Z");
580 			*p = 'Z';
581 		}
582 		if(strstr(atom->basisName[i],"QZ"))
583 		{
584 			char* p = strstr(atom->basisName[i],"QZ");
585 			*p = 'X';
586 		}
587 	}
588 	sort0(atom);
589 	k = 0;
590 	for(i=0; i<nbas; i++)
591 	{
592 		if(strcasecmp(atom->basisName[i],"ZZZZZZZZZZZ")==0)
593 		{
594 			if(k==0) k = i;
595 		}
596 		if(strstr(atom->basisName[i],"00-"))
597 		{
598 			int len = strlen(atom->basisName[i]);
599 			for(j=3;j<len;j++)
600 				atom->basisName[i][j-3] = atom->basisName[i][j];
601 			atom->basisName[i][len-3] ='\0';
602 		}
603 		if(strstr(atom->basisName[i],"YZ"))
604 		{
605 			char* p = strstr(atom->basisName[i],"YZ");
606 			*p = '5';
607 		}
608 		if(strstr(atom->basisName[i],"ZZ"))
609 		{
610 			char* p = strstr(atom->basisName[i],"ZZ");
611 			*p = '6';
612 		}
613 		if(strstr(atom->basisName[i],"XZ"))
614 		{
615 			char* p = strstr(atom->basisName[i],"XZ");
616 			*p = 'Q';
617 		}
618 	}
619 	atom->nbas = k;
620 }
621 /***********************************************************************************/
main(int argc,char * argv[])622 int main(int argc,char* argv[])
623 {
624 	Atom* atom = malloc(NROW*NCOL*sizeof(Atom));
625 	FILE* file;
626 	char* fileName = "qchem.bas";
627 	char* dirName = "usr/local/QChem/aux/basis";
628 	Atom* listOfAtoms  = NULL;
629 	Basis* listOfBasis  = NULL;
630 	char** listOfFiles =  NULL;
631 	int nFiles = 0;
632 	int l,c,k,i,n = 0;
633 
634 	if(argc < 2)
635 	{
636 		printf("Sorry, You should the directory name of Q-Chem basis\n");
637 		printf("       Example : createQChemFuncForGabedit  $QC/aux/basis\n");
638 		return 1;
639 	}
640 	dirName = argv[1];
641 	listOfFiles =  get_list_of_files(dirName, &nFiles);
642 	if(!listOfFiles)
643 	{
644 		printf("Error, a void directory\n");
645 		printf("No files found in %s directory\n",dirName);
646 		return 1;
647 	}
648 	listOfAtoms  = newAtomList();
649 	for(i=0;i<nFiles;i++)
650 	{
651 		file = fopen(listOfFiles[i],"r");
652 		if(!file)
653 		{
654 			printf("Sorry, I can not open %s file\n",listOfFiles[i]);
655 			return 1;
656 		}
657 		n = 0;
658 		for(c=0;c<NCOL;c++)
659 		for(l=0;l<NROW;l++)
660 		{
661 			if(strcmp(SymbAtoms[l][c],"00")==0) continue;
662 			n++;
663 			if(atomInFile(file, SymbAtoms[l][c]))
664 			{
665 				listOfAtoms[n-1].nbas++;
666 				k = listOfAtoms[n-1].nbas-1;
667 				setBaseNameFromFileName(listOfAtoms[n-1].basisName[k],file, listOfFiles[i]);
668 			}
669 		}
670 		fclose(file);
671 	}
672 
673 	i = 0;
674 	for(c=0;c<NCOL;c++)
675 	for(l=0;l<NROW;l++)
676 	{
677 		if(strcmp(SymbAtoms[l][c],"00")==0) continue;
678 		sortBasisForAnAtom(&listOfAtoms[i]);
679 		i++;
680 	}
681 
682 
683 	/* printAllAtomsList(listOfAtoms);*/
684 	listOfBasis = createBasisList(listOfAtoms);
685 	printf("Fin de listOfBasis \n");
686 	/* printAllBasisList(listOfBasis);*/
687 	createQChemFunction(listOfAtoms, listOfBasis);
688 	return 0;
689 }
690