TPCCLIB
Loading...
Searching...
No Matches
fitedit.c
Go to the documentation of this file.
1
7/*****************************************************************************/
8#include "tpcclibConfig.h"
9/*****************************************************************************/
10#include <stdio.h>
11#include <stdlib.h>
12#include <math.h>
13#include <string.h>
14/*****************************************************************************/
15#include "libtpcmisc.h"
16#include "libtpccurveio.h"
17/*****************************************************************************/
18
19/*****************************************************************************/
20static char *info[] = {
21 "Edit parameter value in FIT file 1, saving edited contents in file 2.",
22 " ",
23 "Usage: @P [Options] fitfile1 par_nr tac_nr newvalue tacfile2",
24 " ",
25 "Options:",
26 " -stdoptions", // List standard options like --help, -v, etc
27 " ",
28 "See also: fit2res, fit2dat, metabcor, fit_ppf",
29 " ",
30 "Keywords: FIT, tool, input, simulation, metabolite correction",
31 0};
32/*****************************************************************************/
33
34/*****************************************************************************/
35/* Turn on the globbing of the command line, since it is disabled by default in
36 mingw-w64 (_dowildcard=0); in MinGW32 define _CRT_glob instead, if necessary;
37 In Unix&Linux wildcard command line processing is enabled by default. */
38/*
39#undef _CRT_glob
40#define _CRT_glob -1
41*/
42int _dowildcard = -1;
43/*****************************************************************************/
44
45/*****************************************************************************/
49int main(int argc, char **argv)
50{
51 int ai, help=0, version=0, verbose=1;
52 int ret, pn=-1, tn=-1;
53 char *cptr, file1[FILENAME_MAX], file2[FILENAME_MAX];
54 FIT fit;
55 double v=nan("");
56
57
58 /*
59 * Get arguments
60 */
61 if(argc==1) {tpcPrintUsage(argv[0], info, stderr); return(1);}
62 file1[0]=file2[0]=(char)0;
63 fitInit(&fit);
64 /* Options */
65 for(ai=1; ai<argc; ai++) if(*argv[ai]=='-') {
66 cptr=argv[ai]+1; if(*cptr=='-') cptr++; if(cptr==NULL) continue;
67 if(tpcProcessStdOptions(argv[ai], &help, &version, &verbose)==0) continue;
68 fprintf(stderr, "Error: invalid option '%s'.\n", argv[ai]);
69 return(1);
70 } else break;
71
72 /* Print help or version? */
73 if(help==2) {tpcHtmlUsage(argv[0], info, ""); return(0);}
74 if(help) {tpcPrintUsage(argv[0], info, stdout); return(0);}
75 if(version) {tpcPrintBuild(argv[0], stdout); return(0);}
76
77 /* Process other arguments, starting from the first non-option */
78 for(; ai<argc; ai++) {
79 if(!file1[0]) {
80 strcpy(file1, argv[ai]); continue;
81 } else if(pn<0) {
82 pn=atoi(argv[ai]); if(pn>0) continue;
83 } else if(tn<0) {
84 tn=atoi(argv[ai]); if(tn>0) continue;
85 } else if(isnan(v)) {
86 v=atof_dpi(argv[ai]); continue;
87 } else if(!file2[0]) {
88 strcpy(file2, argv[ai]); continue;
89 }
90 fprintf(stderr, "Error: too many arguments: '%s'.\n", argv[ai]);
91 return(1);
92 }
93
94 /* Is something missing? */
95 if(!file2[0]) {
96 fprintf(stderr, "Error: missing command-line argument; use option --help\n");
97 return(1);
98 }
99
100 /* In verbose mode print arguments and options */
101 if(verbose>1) {
102 printf("file1 := %s\n", file1);
103 printf("file2 := %s\n", file2);
104 printf("parameter := %d\n", pn);
105 printf("TAC := %d\n", tn);
106 printf("new_value := %g\n", v);
107 }
108 if(verbose>3) MATHFUNC_TEST=verbose-3; else MATHFUNC_TEST=0;
109
110 /*
111 * Read fit
112 */
113 if(verbose>2) printf("Reading fitfile\n");
114 if((ret=fitRead(file1, &fit, verbose-2))) {
115 fprintf(stderr, "Error %d in reading '%s': %s\n", ret, file1, fiterrmsg);
116 return(4);
117 }
118 if(verbose>10) fitPrint(&fit);
119 if(verbose>1) {
120 printf("fit_tac_nr := %d\n", fit.voiNr);
121 }
122
123 /* Check that requested parameter exists */
124 if(tn>fit.voiNr) {
125 fprintf(stderr, "Error: FIT file does not contain TAC %d\n", tn);
126 fitEmpty(&fit); return(5);
127 }
128 if(pn>fit.voi[tn-1].parNr) {
129 fprintf(stderr, "Error: FIT TAC does not contain parameter %d\n", pn);
130 fitEmpty(&fit); return(6);
131 }
132
133 /* Change the parameter value */
134 if(verbose>0) printf(" %g -> %g\n", fit.voi[tn-1].p[pn-1], v);
135 fit.voi[tn-1].p[pn-1]=v;
136
137 /*
138 * Save edit fit
139 */
140 if(verbose>1) printf("saving edited fit in %s\n", file2);
141 ret=fitWrite(&fit, file2); if(ret) {
142 fprintf(stderr, "Error (%d) in writing '%s': %s\n", ret, file2, fiterrmsg);
143 fitEmpty(&fit); return(11);
144 }
145 if(verbose>0) printf("edited fit written in %s\n", file2);
146
147 /* Free memory */
148 fitEmpty(&fit);
149
150 return(0);
151}
152/*****************************************************************************/
153
154/*****************************************************************************/
double atof_dpi(char *str)
Definition decpoint.c:59
Header file for libtpccurveio.
void fitEmpty(FIT *fit)
Definition mathfunc.c:18
int fitRead(char *filename, FIT *fit, int verbose)
Definition mathfunc.c:196
int fitWrite(FIT *fit, char *filename)
Definition mathfunc.c:54
int MATHFUNC_TEST
Definition mathfunc.c:5
char fiterrmsg[64]
Definition mathfunc.c:6
void fitInit(FIT *fit)
Definition mathfunc.c:38
void fitPrint(FIT *fit)
Definition mathfunc.c:180
Header file for libtpcmisc.
int tpcProcessStdOptions(const char *s, int *print_usage, int *print_version, int *verbose_level)
Definition proginfo.c:40
int tpcHtmlUsage(const char *program, char *text[], const char *path)
Definition proginfo.c:213
void tpcPrintBuild(const char *program, FILE *fp)
Definition proginfo.c:383
void tpcPrintUsage(const char *program, char *text[], FILE *fp)
Definition proginfo.c:158
int voiNr
FitVOI * voi
double p[MAX_FITPARAMS]