Writes plots of original and fitted TACs in SVG 1.1 format. Data must not contain NaNs.
227 {
228 int ret, n, ri, si, ei;
229 char x_title[64], y_title[64], tac_id[32], tac_title[64];
230 double minx, maxx, miny, maxy, tx1, tx2, ty1, ty2, f;
232 int max_color_nr, color_nr;
233 int max_symbol_nr, symbol_nr;
235 FILE *fp_svg=NULL;
236
237
238 if(verbose>0) {
239 printf("%s(dft1, dft2, mt, fn, %d)\n", __func__, verbose);
240 }
241
242
243 if(dft1==NULL || dft1->
voiNr<1)
return(1);
244 if(dft2==NULL) return(1);
246
247 int is_label=0;
if(dft1->
voiNr>1) is_label=1;
248
249
251
252
253 minx=maxx=miny=maxy=0;
254 ret=
dftMinMax(dft1, &tx1, &tx2, &ty1, &ty2);
if(ret)
return(3);
255 minx=tx1; maxx=tx2; miny=ty1; maxy=ty2;
256 ret=
dftMinMax(dft2, &tx1, &tx2, &ty1, &ty2);
if(ret)
return(3);
257 if(minx>tx1) minx=tx1;
258 if(maxx<tx2) maxx=tx2;
259 if(miny>ty1) miny=ty1;
260 if(maxy<ty2) maxy=ty2;
261 if(verbose>1) printf("minx:=%g\nmaxx:=%g\nminy:=%g\nmaxy:=%g\n", minx, maxx, miny, maxy);
262 if(miny>0.0) {f=maxy-miny; miny-=0.01*f;}
263
264
265 viewports.label_area_viewport.is=is_label;
266 viewports.x.fixed_min=0; viewports.y.fixed_min=0;
267 viewports.x.min=minx; viewports.x.max=maxx;
268 viewports.y.min=miny; viewports.y.max=maxy;
270
271
272 if(verbose>2) printf("set x title\n");
273 strcpy(x_title, "");
275 sprintf(x_title,
"Time (%s)", dftTimeunit(dft1->
timeunit));
276 else if(dft1->
timeunit!=DFTTIME_UNKNOWN)
277 strcpy(x_title, dftTimeunit(dft1->
timeunit));
278 if(verbose>2) printf("set y title\n");
279 strcpy(y_title, "");
280 if(dftUnitId(dft1->
unit)!=DFTUNIT_UNKNOWN)
281 strcpy(y_title, dftUnit(dftUnitId(dft1->
unit)));
282
283
284 if(verbose>2) printf("set window sizes\n");
286 strlen(x_title), is_label, &viewports, verbose-3);
287 if(ret) return(5);
288
289
290 fp_svg=
svg_initiate(fname, 0, 0, &viewports, NULL, verbose-3);
291 if(fp_svg==NULL) return(6);
292
293
295 if(ret) return(7);
297 if(ret) return(8);
299 if(ret) return(9);
300
301
303 if(ret) return(10);
304
305
307 if(ret) return(11);
308
309
311 if(ret) {
312 if(verbose>0) printf("svg_write_axes() := %d\n", ret);
313 return(12);
314 }
315
316
317
318
319 max_color_nr=0;
while(
svgColorName(max_color_nr)!=NULL) max_color_nr++;
320 if(max_color_nr<1) max_color_nr=1;
321 if(verbose>3) printf("max_color_nr := %d\n", max_color_nr);
322 max_symbol_nr=0;
while(
svgSymbolName(max_symbol_nr)!=NULL) max_symbol_nr++;
323 if(max_symbol_nr<1) max_symbol_nr=1;
324 if(verbose>3) printf("max_symbol_nr := %d\n", max_symbol_nr);
325 if(dft1->
voiNr==1) color_nr=0;
else color_nr=1;
326 symbol_nr=0;
327 for(ri=0, n=0; ri<dft1->
voiNr; ri++) {
328 sprintf(tac_id, "plot_%d", n);
329
330
331
332
333
335
336 for(si=0; si<dft2->
frameNr; si++)
if(!isnan(dft2->
voi[ri].
y[si]))
break;
337 for(ei=dft2->
frameNr-1; ei>=si; ei--)
if(!isnan(dft2->
voi[ri].
y[ei]))
break;
338 if((ei-si)>0) {
340 dft2->
x+si, dft2->
voi[ri].
y+si, 1+ei-si,
341 svgColorName(color_nr%max_color_nr), symbol_nr%max_symbol_nr, SYMBOLFILLED,
342 NULL, verbose-3);
344 }
345
348 svgColorName(color_nr%max_color_nr), symbol_nr%max_symbol_nr, SYMBOLFILLED,
349 NULL, verbose-3);
351
352 if(is_label!=0) {
353 svg_legend_add(&legends, 0, symbol_nr%max_symbol_nr, SYMBOLFILLED,
354 color_nr%max_color_nr, tac_title);
355 }
356
357 color_nr++; n++;
358 if(color_nr==max_color_nr) {symbol_nr++; color_nr=0;}
359 if(symbol_nr==max_symbol_nr) symbol_nr=0;
360 }
361
362
365
366
371
372
375
376
377 if(viewports.label_area_viewport.is!=0) {
378 if(verbose>2) printf("creating plot legends\n");
381 }
383
384
385 ret=
svg_close(fp_svg, NULL, verbose-3);
if(ret)
return(101);
386
387 return(0);
388}
int backupExistingFile(char *filename, char *backup_ext, char *status)
int dftMinMax(DFT *dft, double *minx, double *maxx, double *miny, double *maxy)
int rnameRmDots(char *rname1, char *rname2)
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)
char unit[MAX_UNITS_LEN+1]
char name[MAX_REGIONNAME_LEN+1]