00001
00002
00003
00004
00005
00006
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 #ifdef HAVE_CONFIG_H
00055 #include <config.h>
00056 #endif
00057
00059 #define _GNU_SOURCE
00060
00061
00062 #ifdef HAVE_SYS_TYPES_H
00063 #include <sys/types.h>
00064 #endif
00065 #ifdef HAVE_SYS_STAT_H
00066 #include <sys/stat.h>
00067 #endif
00068 #ifdef HAVE_FCNTL_H
00069 #include <fcntl.h>
00070 #endif
00071 #ifdef HAVE_UNISTD_H
00072 #include <unistd.h>
00073 #endif
00074 #ifdef HAVE_STDIO_H
00075 #include <stdio.h>
00076 #endif
00077 #ifdef HAVE_STRING_H
00078 #include <string.h>
00079 #endif
00080 #ifdef HAVE_STDLIB_H
00081 #include <stdlib.h>
00082 #endif
00083 #ifdef HAVE_MATH_H
00084 #include <math.h>
00085 #endif
00086 #ifdef HAVE_TIME_H
00087 #include <time.h>
00088 #endif
00089 #ifdef HAVE_LIBGEN_H
00090 #include <libgen.h>
00091 #endif
00092
00093 #include <gsl/gsl_rng.h>
00094 #include <gsl/gsl_randist.h>
00095
00096 #include <classif.h>
00097
00099 void show_usage(char *pgm);
00100
00102 int main(int argc, char **argv)
00103 {
00111 int i;
00112 int j;
00113 int neof;
00114 int ndays;
00115 int nclusters;
00116 int nclassif;
00117 int npart;
00118
00119 double *pc_eof_days = NULL;
00120 double *clusters = NULL;
00121
00122 char *fileoutclust = NULL;
00123 FILE *fileoutclust_ptr = NULL;
00124 char *fileoutpc = NULL;
00125 FILE *fileoutpc_ptr = NULL;
00126
00127 const gsl_rng_type *T;
00128 gsl_rng *rng;
00129
00130
00131 (void) banner(basename(argv[0]), "1.0", "BEGIN");
00132
00133
00134 for (i=1; i<argc; i++) {
00135 if ( !strcmp(argv[i], "-h") ) {
00136 (void) show_usage(basename(argv[0]));
00137 (void) banner(basename(argv[0]), "OK", "END");
00138 return 0;
00139 }
00140 else if ( !strcmp(argv[i], "-o_clust") ) {
00141 fileoutclust = (char *) malloc((strlen(argv[++i])+1) * sizeof(char));
00142 if (fileoutclust == NULL) alloc_error(__FILE__, __LINE__);
00143 (void) strcpy(fileoutclust, argv[i]);
00144 fileoutclust_ptr = fopen(fileoutclust, "w");
00145 if (fileoutclust_ptr == NULL) {
00146 (void) fprintf(stderr, "%s: Cannot open file %s for output!\n", __FILE__, fileoutclust);
00147 (void) banner(basename(argv[0]), "ABORT", "END");
00148 (void) abort();
00149 }
00150 }
00151 else if ( !strcmp(argv[i], "-o_pc") ) {
00152 fileoutpc = (char *) malloc((strlen(argv[++i])+1) * sizeof(char));
00153 if (fileoutpc == NULL) alloc_error(__FILE__, __LINE__);
00154 (void) strcpy(fileoutpc, argv[i]);
00155 fileoutpc_ptr = fopen(fileoutpc, "w");
00156 if (fileoutpc_ptr == NULL) {
00157 (void) fprintf(stderr, "%s: Cannot open file %s for output!\n", __FILE__, fileoutpc);
00158 (void) banner(basename(argv[0]), "ABORT", "END");
00159 (void) abort();
00160 }
00161 }
00162 else {
00163 (void) fprintf(stderr, "%s:: Wrong arg %s.\n\n", basename(argv[0]), argv[i]);
00164 (void) show_usage(basename(argv[0]));
00165 (void) banner(basename(argv[0]), "ABORT", "END");
00166 (void) abort();
00167 }
00168 }
00169
00170
00171 neof = 2;
00172
00173 ndays = 18000;
00174
00175 nclassif = 1000;
00176
00177 nclusters = 10;
00178
00179 npart = 30;
00180
00181
00182 T = gsl_rng_default;
00183 rng = gsl_rng_alloc(T);
00184 (void) gsl_rng_set(rng, time(NULL));
00185
00186
00187 pc_eof_days = (double *) calloc(neof*ndays, sizeof(double));
00188 if (pc_eof_days == NULL) alloc_error(__FILE__, __LINE__);
00189 clusters = (double *) calloc(neof*nclusters, sizeof(double));
00190 if (clusters == NULL) alloc_error(__FILE__, __LINE__);
00191
00192
00193 for (i=0; i<neof-1; i++) {
00194 for (j=0; j<ndays/2; j++) {
00195 pc_eof_days[j+i*ndays] = gsl_ran_gaussian(rng, 1.0) + 3.0;
00196 #if DEBUG >= 9
00197 (void) fprintf(stderr, "eof %d day %d pc_eof_days %lf\n", i, j, pc_eof_days[j+i*ndays]);
00198 #endif
00199 }
00200 for (j=ndays/2; j<ndays; j++) {
00201 pc_eof_days[j+i*ndays] = gsl_ran_gaussian(rng, 1.0) + 6.0;
00202 #if DEBUG >= 9
00203 (void) fprintf(stderr, "eof %d day %d pc_eof_days %lf\n", i, j, pc_eof_days[j+i*ndays]);
00204 #endif
00205 }
00206 }
00207
00208 i = neof-1;
00209 for (j=0; j<ndays; j++) {
00210 pc_eof_days[j+i*ndays] = gsl_ran_gaussian(rng, 1.0) + 4.5;
00211 #if DEBUG >= 9
00212 (void) fprintf(stderr, "eof %d day %d pc_eof_days %lf\n", i, j, pc_eof_days[j+i*ndays]);
00213 #endif
00214 }
00215
00216 (void) gsl_rng_free(rng);
00217
00218
00219 (void) best_clusters(clusters, pc_eof_days, "euclidian", npart, nclassif, neof, nclusters, ndays);
00220
00221
00222 for (i=0; i<neof; i++)
00223 for (j=0; j<nclusters; j++)
00224 (void) fprintf(fileoutclust_ptr, "%d %d %lf\n", i, j, clusters[i+j*neof]);
00225
00226 for (i=0; i<neof; i++)
00227 for (j=0; j<ndays; j++)
00228 (void) fprintf(fileoutpc_ptr, "%d %d %lf\n", i, j, pc_eof_days[j+i*ndays]);
00229
00230 (void) fclose(fileoutclust_ptr);
00231 (void) fclose(fileoutpc_ptr);
00232
00233
00234 (void) free(pc_eof_days);
00235 (void) free(clusters);
00236 (void) free(fileoutclust);
00237 (void) free(fileoutpc);
00238
00239
00240 (void) banner(basename(argv[0]), "OK", "END");
00241
00242 return 0;
00243 }
00244
00245
00249 void show_usage(char *pgm) {
00254 (void) fprintf(stderr, "%s: usage:\n", pgm);
00255 (void) fprintf(stderr, "-h: help\n");
00256
00257 }