40 char tac_id[32], tac_title[64];
41 double maxPlotX=0, maxy;
44 int max_color_nr, color_nr;
45 int max_symbol_nr, symbol_nr;
50 printf(
"%s(dft, res, %d, %d, mt, xt, yt, fn, cs, %d)\n", __func__, first, last, verbose);
54 if(dft==NULL || dft->
voiNr<1)
return(1);
55 if(res==NULL || res->
voiNr!=dft->
voiNr)
return(1);
56 if(first>last)
return(1);
58 int is_label=0;
if(dft->
voiNr>1) is_label=1;
59 if(color_scale!=0 && color_scale!=2) color_scale=0;
65 for(ri=0; ri<dft->
voiNr; ri++)
for(fi=0; fi<dft->
frameNr; fi++)
66 if(dft->
voi[ri].
y2[fi]>maxPlotX) maxPlotX=dft->
voi[ri].
y2[fi];
69 for(ri=0; ri<dft->
voiNr; ri++)
for(fi=0; fi<dft->
frameNr; fi++)
70 if(dft->
voi[ri].
y3[fi]>maxy) maxy=dft->
voi[ri].
y3[fi];
75 viewports.
x.
min=0.0; viewports.
x.
max=maxPlotX;
76 viewports.
y.
min=0.0; viewports.
y.
max=maxy;
82 strlen(x_title), is_label, &viewports, verbose-3);
86 fp_svg=
svg_initiate(fname, 0, 0, &viewports, NULL, verbose-3);
87 if(fp_svg==NULL)
return(4);
112 int symbol_fill=SYMBOLFILLED;
114 symbol_fill=SYMBOLOPEN;
117 max_color_nr=0;
while(
svgColorName(max_color_nr)!=NULL) max_color_nr++;
119 if(max_color_nr==0) max_color_nr=1;
120 if(verbose>3) printf(
"max_color_nr := %d\n", max_color_nr);
121 max_symbol_nr=0;
while(
svgSymbolName(max_symbol_nr)!=NULL) max_symbol_nr++;
122 if(max_symbol_nr==0) max_symbol_nr=1;
123 if(verbose>3) printf(
"max_symbol_nr := %d\n", max_symbol_nr);
124 if(dft->
voiNr==1) color_nr=0;
else color_nr=1;
126 for(ri=0, n=0; ri<dft->
voiNr; ri++) {
127 sprintf(tac_id,
"plot_%d", n);
142 svgColorName(color_nr%max_color_nr), symbol_nr%max_symbol_nr, symbol_fill,
148 svgColorName(color_nr%max_color_nr), symbol_nr%max_symbol_nr, symbol_fill,
156 sprintf(tac_id,
"line_%d", n);
159 svgColorName(color_nr%max_color_nr), symbol_nr%max_symbol_nr, symbol_fill,
164 svg_legend_add(&legends, 0, symbol_nr%max_symbol_nr, symbol_fill, color_nr%max_color_nr, tac_title);
170 if(color_nr==max_color_nr) {symbol_nr++; color_nr=0;}
171 if(symbol_nr==max_symbol_nr) symbol_nr=0;
175 if(symbol_nr==max_symbol_nr) {
176 if(symbol_fill==SYMBOLOPEN) symbol_fill=SYMBOLFILLED;
else symbol_fill=SYMBOLOPEN;
199 if(verbose>2) printf(
"creating plot legends\n");
206 ret=
svg_close(fp_svg, NULL, verbose-3);
if(ret)
return(101);
238 char tmp[FILENAME_MAX], *cptr=NULL;
240 double maxPlotX=0, maxRegX=0, maxFitX=0, f;
244 if(dft==NULL || dft->
voiNr<1)
return(1);
245 if(res==NULL || res->
voiNr!=dft->
voiNr)
return(1);
246 if(first>last)
return(1);
249 cptr=strrchr(fname,
'.');
250 if(cptr!=NULL && strcasecmp(cptr,
".DFT")==0) {
259 for(ri=0; ri<dft->
voiNr; ri++)
for(fi=0; fi<dft->
frameNr; fi++)
260 if(dft->
voi[ri].
y2[fi]>maxPlotX) maxPlotX=dft->
voi[ri].
y2[fi];
263 if((fp = fopen(fname,
"w")) == NULL)
return(3);
268 n=fprintf(fp,
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"");
270 n=fprintf(fp,
" \"https://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n");
272 n=fprintf(fp,
"<html xmlns=\"https://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n\n");
275 n=fprintf(fp,
"<head>\n");
if(n<6)
return(4);
276 fprintf(fp,
" <title>Graphical analysis plot</title>\n");
279 fprintf(fp,
" <meta http-equiv=\"content-type\" content=\"text/html;");
280 fprintf(fp,
" charset=iso-8859-1\" />\n");
282 fprintf(fp,
" <meta http-equiv=\"content-language\" content=\"en-gb\" />\n");
283 fprintf(fp,
" <meta name=\"ProgId\" content=\"Excel.Sheet\" />\n");
290 fprintf(fp,
" <link rel=\"icon\" href=\"https://www.turkupetcentre.net/");
291 fprintf(fp,
"favicon.ico\" type=\"image/x-icon\" />\n");
292 fprintf(fp,
" <link rel=\"shortcut icon\" href=\"https://www.turkupet");
293 fprintf(fp,
"centre.net/favicon.ico\" type=\"image/x-icon\" />\n");
295 fprintf(fp,
" <style type=\"text/css\">\n");
296 fprintf(fp,
" thead {background-color:#999999; color:black;}\n");
299 fprintf(fp,
" table {text-align:left; width:100%%;");
300 fprintf(fp,
" border-collapse:collapse; empty-cells:show;}\n");
302 fprintf(fp,
" td {border:1px solid black;}\n");
303 fprintf(fp,
" <!--table\n");
304 fprintf(fp,
" {mso-displayed-decimal-separator:\"\\.\";\n");
305 fprintf(fp,
" mso-displayed-thousand-separator:\" \";}\n");
306 fprintf(fp,
" -->\n");
307 fprintf(fp,
" </style>\n");
308 fprintf(fp,
"</head>\n");
311 fprintf(fp,
"\n<body>\n");
314 fprintf(fp,
"\n<div id=\"tables\">\n");
317 fprintf(fp,
"<table>\n");
318 fprintf(fp,
"<tbody>\n");
319 fprintf(fp,
"<tr><th>Main title</th><th>%s</th></tr>\n", mtitle);
320 fprintf(fp,
"<tr><th>X title</th><th>%s</th></tr>\n", xtitle);
321 fprintf(fp,
"<tr><th>Y title</th><th>%s</th></tr>\n", ytitle);
323 fprintf(fp,
"<tr><th>Date</th><th>%s</th></tr>\n", tmp);
324 fprintf(fp,
"</tbody>\n");
325 fprintf(fp,
"</table>\n");
328 for(ri=0; ri<dft->
voiNr; ri++) {
330 for(fi=0, maxRegX=maxFitX=0; fi<dft->
frameNr; fi++) {
331 if(dft->
voi[ri].
y2[fi]>maxRegX) maxRegX=dft->
voi[ri].
y2[fi];
332 if(fi>=first && fi<=last && dft->voi[ri].y2[fi]>maxFitX) maxFitX=dft->
voi[ri].
y2[fi];
335 fprintf(fp,
"<table>\n");
337 fprintf(fp,
"<thead>\n");
338 fprintf(fp,
"<tr><th>%s %s %s</th>", dft->
voi[ri].
voiname,
340 fprintf(fp,
"<th>symbol open</th><th>symbol filled</th><th>text</th>");
341 fprintf(fp,
"<th>X</th><th>line</th>");
342 fprintf(fp,
"</tr>\n");
343 fprintf(fp,
"</thead>\n");
345 fprintf(fp,
"<tbody>\n");
348 if(!isnan(dft->
voi[ri].
y2[fi]) && !isnan(dft->
voi[ri].
y3[fi]))
351 if(fi<dft->frameNr) {
352 fprintf(fp,
"<th>%g</th>", dft->
voi[ri].
y2[fi]);
353 fprintf(fp,
"<th>%g</th>", dft->
voi[ri].
y3[fi]);
355 fprintf(fp,
"<th> </th>");
356 fprintf(fp,
"<th> </th>");
359 if(fi>=first && fi<=last)
360 fprintf(fp,
"<th>%g</th>", dft->
voi[ri].
y3[fi]);
361 else fprintf(fp,
"<th></th>");
363 fprintf(fp,
"<th>%g</th>", dft->
x[fi]);
365 fprintf(fp,
"<th> </th>");
368 fprintf(fp,
"<th>0</th>");
371 fprintf(fp,
"<th>%g</th>", maxFitX);
373 fprintf(fp,
"<th>%g</th>", f);
375 fprintf(fp,
"<th>%g</th>", maxRegX);
377 fprintf(fp,
"<th>%g</th>", f);
379 fprintf(fp,
"<th>%g</th>", maxPlotX);
381 fprintf(fp,
"<th>%g</th>", f);
383 fprintf(fp,
"</tr>\n");
386 fprintf(fp,
"</tbody>\n");
389 fprintf(fp,
"</table>\n");
394 fprintf(fp,
"</div>\n");
397 n=fprintf(fp,
"</body></html>\n");
422 if(dft==NULL || dft->
voiNr<1)
return(1);
427 for(ri=rj=0; ri<dft->
voiNr; ri++) {
438 for(fi=0; fi<dft->
frameNr; fi++) {
439 plot.
x[fi]=dft->
x[fi]; plot.
x1[fi]=dft->
x1[fi]; plot.
x2[fi]=dft->
x2[fi];
int backupExistingFile(char *filename, char *backup_ext, char *status)
char * ctime_r_int(const time_t *t, char *buf)
Convert calendard time t into a null-terminated string of the form YYYY-MM-DD hh:mm:ss,...
int dftCopyvoihdr(DFT *dft1, int from, DFT *dft2, int to)
int dftSetmem(DFT *data, int frameNr, int voiNr)
int dftCopymainhdr(DFT *dft1, DFT *dft2)
int dftWrite(DFT *data, char *filename)
int rnameRmDots(char *rname1, char *rname2)
Header file for libtpcmodext.
void svg_legend_empty(SVG_LEGENDS *legends)
int svg_write_xticks(FILE *fp, struct svg_viewports *vp, char *errmsg, int verbose)
void svg_init_legends(SVG_LEGENDS *legends)
int svg_create_xaxis_title(FILE *fp, const char *title_text, struct svg_viewports *vp, char *errmsg, int verbose)
char * svgColorName(const svgColor index)
int svg_create_main_title(FILE *fp, const char *main_title_text, const char *sub_title_text, struct svg_viewports *vp, char *errmsg, int verbose)
int svg_legend_add(SVG_LEGENDS *legends, const int plot_type, const int symbol_type, const svgSymbolFill symbol_fill, const int color, const char *text)
char * svgSymbolName(const svgSymbolType index)
int svg_define_viewports(const int main_viewport_width, const int main_viewport_height, const int is_main_title, const int is_yaxis_title, const int is_xaxis_title, const int is_label_area, struct svg_viewports *vp, int verbose)
int svg_end_plot_viewport(FILE *fp, char *errmsg, int verbose)
int svg_start_coordinate_viewport(FILE *fp, struct svg_viewports *vp, char *errmsg, int verbose)
int svg_create_legends(FILE *fp, struct svg_viewports *vp, SVG_LEGENDS *legends, char *errmsg, int verbose)
void svg_init_viewports(struct svg_viewports *p)
FILE * svg_initiate(const char *filename, const double height, const double width, struct svg_viewports *vp, char *errmsg, int verbose)
int svg_calculate_axes(struct svg_viewports *vp, int verbose)
int svg_write_axes(FILE *fp, struct svg_viewports *vp, char *errmsg, int verbose)
int svg_end_coordinate_viewport(FILE *fp, char *errmsg, int verbose)
int svg_start_plot_viewport(FILE *fp, struct svg_viewports *vp, char *errmsg, int verbose)
int svg_create_yaxis_title(FILE *fp, const char *title_text, struct svg_viewports *vp, char *errmsg, int verbose)
int svg_write_yticks(FILE *fp, struct svg_viewports *vp, char *errmsg, int verbose)
int svg_write_tac(FILE *fp, struct svg_viewports *vp, const int plot_type, const char *tac_id, const char *tac_title, double *x, double *y, const int data_nr, const char *color, const svgSymbolType symbol_type, const svgSymbolFill symbol_fill, char *errmsg, int verbose)
int svg_close(FILE *fp, char *errmsg, int verbose)
int plotdata_as_dft(DFT *dft, char *fname)
int plotdata(DFT *dft, RES *res, int first, int last, char *mtitle, char *xtitle, char *ytitle, char *fname)
int plot_svg(DFT *dft, RES *res, int first, int last, char *main_title, char *x_title, char *y_title, int color_scale, char *fname, int verbose)
char comments[_DFT_COMMENT_LEN+1]
double parameter[MAX_RESPARAMS]
char voiname[MAX_REGIONSUBNAME_LEN+1]
char name[MAX_REGIONNAME_LEN+1]
char hemisphere[MAX_REGIONSUBNAME_LEN+1]
char place[MAX_REGIONSUBNAME_LEN+1]
struct svg_viewport_pos label_area_viewport