5#include "tpcclibConfig.h"
40 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
41 if(verbose>1) printf(
"%s()\n", __func__);
44 if(d1==NULL || d2==NULL || d1->
parNr<1 || d2->
parNr<1) {
57 if(verbose>0) printf(
"different parameter nr.\n");
64 for(
int pi=0; pi<d1->
parNr; pi++)
if(i<0 || i==pi) {
65 if(casens==0) vr=strcasecmp(d1->
n[pi].
name, d2->
n[pi].
name);
66 else vr=strcmp(d1->
n[pi].
name, d2->
n[pi].
name);
69 if(strchr(d1->
n[pi].
name,
'-') || strchr(d1->
n[pi].
name,
'_')) {
73 if(verbose>100) printf(
"'%s' vs '%s'\n", buf1, buf2);
74 if(casens==0) vr=strcasecmp(buf1, buf2);
else vr=strcmp(buf1, buf2);
75 free(buf1); free(buf2);
79 if(strchr(d1->
n[pi].
name,
'_') || strchr(d2->
n[pi].
name,
'_')) {
83 if(verbose>100) printf(
"'%s' vs '%s'\n", buf1, buf2);
84 if(casens==0) vr=strcasecmp(buf1, buf2);
else vr=strcmp(buf1, buf2);
85 free(buf1); free(buf2);
89 printf(
"par1.n[%d].name := '%s'\n", pi, d1->
n[pi].
name);
90 printf(
"par2.n[%d].name := '%s'\n", pi, d2->
n[pi].
name);
113 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
114 if(verbose>1) printf(
"%s()\n", __func__);
117 if(d1==NULL || d2==NULL || d1->
parNr<1 || d2->
parNr<1) {
130 if(verbose>0) printf(
"different parameter nr.\n");
136 for(
int pi=0; pi<d1->
parNr; pi++)
if(i<0 || i==pi) {
139 printf(
"par1.n[%d].unit := '%s'\n", pi,
unitName(d1->
n[pi].
unit));
140 printf(
"par2.n[%d].unit := '%s'\n", pi,
unitName(d2->
n[pi].
unit));
169 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
170 if(verbose>1) printf(
"%s()\n", __func__);
173 if(d1==NULL || d2==NULL || d1->
tacNr<1 || d2->
tacNr<1) {
186 if(verbose>0) printf(
"different TAC nr.\n");
193 for(
int ri=0; ri<d1->
tacNr; ri++)
if(i<0 || i==ri) {
194 if(casens==0) vr=strcasecmp(d1->
r[ri].
name, d2->
r[ri].
name);
195 else vr=strcmp(d1->
r[ri].
name, d2->
r[ri].
name);
198 if(strchr(d1->
r[ri].
name,
'-') || strchr(d1->
r[ri].
name,
'_')) {
202 if(verbose>100) printf(
"'%s' vs '%s'\n", buf1, buf2);
203 if(casens==0) vr=strcasecmp(buf1, buf2);
else vr=strcmp(buf1, buf2);
204 free(buf1); free(buf2);
208 if(strchr(d1->
r[ri].
name,
'_') || strchr(d2->
r[ri].
name,
'_')) {
212 if(verbose>100) printf(
"'%s' vs '%s'\n", buf1, buf2);
213 if(casens==0) vr=strcasecmp(buf1, buf2);
else vr=strcmp(buf1, buf2);
214 free(buf1); free(buf2);
218 printf(
"par1.r[%d].name := '%s'\n", ri, d1->
r[ri].
name);
219 printf(
"par2.r[%d].name := '%s'\n", ri, d2->
r[ri].
name);
253 const double test_abs,
257 const double test_rel,
261 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
262 if(verbose>1) printf(
"%s()\n", __func__);
270 if(!checkpar && !checksd && !checkcl) {
275 if(pi>=0 && (pi>=d1->
parNr || pi>=d2->
parNr)) {
279 if(ti>=0 && (ti>=d1->
tacNr || ti>=d2->
tacNr)) {
287 if(verbose>0) printf(
"different parameter nr.\n");
291 if(verbose>0) printf(
"different TAC nr.\n");
299 for(tj=0; tj<d1->
tacNr; tj++)
if(ti<0 || tj==ti) {
300 for(pj=0; pj<d1->
parNr; pj++)
if(pi<0 || pj==pi) {
301 if(
doubleMatch(d1->
r[tj].
p[pj], d2->
r[tj].
p[pj], test_abs)==1)
continue;
302 if(test_rel>0.0 &&
doubleMatchRel(d1->
r[tj].
p[pj], d2->
r[tj].
p[pj], test_rel)==1)
continue;
304 double s=fabs(d1->
r[tj].
p[pj]-d2->
r[tj].
p[pj]);
305 printf(
"par1.r[%d].p[%d] := %g\n", tj, pj, d1->
r[tj].
p[pj]);
306 printf(
"par2.r[%d].p[%d] := %g\n", tj, pj, d2->
r[tj].
p[pj]);
307 printf(
"|diff| := %g\n", s);
308 printf(
"diff_limit := %g\n", test_abs);
309 if(test_rel>0.0) printf(
"rel_diff_limit := %g\n", test_rel);
316 for(tj=0; tj<d1->
tacNr; tj++)
if(ti<0 || tj==ti) {
317 for(pj=0; pj<d1->
parNr; pj++)
if(pi<0 || pj==pi) {
321 double s=fabs(d1->
r[tj].
sd[pj]-d2->
r[tj].
sd[pj]);
322 printf(
"par1.r[%d].sd[%d] := %g\n", tj, pj, d1->
r[tj].
sd[pj]);
323 printf(
"par2.r[%d].sd[%d] := %g\n", tj, pj, d2->
r[tj].
sd[pj]);
324 printf(
"|diff| := %g\n", s);
325 printf(
"diff_limit := %g\n", test_abs);
326 if(test_rel>0.0) printf(
"rel_diff_limit := %g\n", test_rel);
333 for(tj=0; tj<d1->
tacNr; tj++)
if(ti<0 || tj==ti) {
334 for(pj=0; pj<d1->
parNr; pj++)
if(pi<0 || pj==pi) {
338 double s=fabs(d1->
r[tj].
cl1[pj]-d2->
r[tj].
cl1[pj]);
339 printf(
"par1.r[%d].cl1[%d] := %g\n", tj, pj, d1->
r[tj].
cl1[pj]);
340 printf(
"par2.r[%d].cl1[%d] := %g\n", tj, pj, d2->
r[tj].
cl1[pj]);
341 printf(
"|diff| := %g\n", s);
342 printf(
"diff_limit := %g\n", test_abs);
343 if(test_rel>0.0) printf(
"rel_diff_limit := %g\n", test_rel);
348 for(tj=0; tj<d1->
tacNr; tj++)
if(ti<0 || tj==ti) {
349 for(pj=0; pj<d1->
parNr; pj++)
if(pi<0 || pj==pi) {
353 double s=fabs(d1->
r[tj].
cl2[pj]-d2->
r[tj].
cl2[pj]);
354 printf(
"par1.r[%d].cl2[%d] := %g\n", tj, pj, d1->
r[tj].
cl2[pj]);
355 printf(
"par2.r[%d].cl2[%d] := %g\n", tj, pj, d2->
r[tj].
cl2[pj]);
356 printf(
"|diff| := %g\n", s);
357 printf(
"diff_limit := %g\n", test_abs);
358 if(test_rel>0.0) printf(
"rel_diff_limit := %g\n", test_rel);
386 const double test_abs,
390 const double test_rel,
394 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
395 if(verbose>1) printf(
"%s()\n", __func__);
398 if(d1==NULL || d2==NULL || d1->
tacNr<1 || d2->
tacNr<1) {
403 if(ti>=0 && (ti>=d1->
tacNr || ti>=d2->
tacNr)) {
411 if(verbose>0) printf(
"different TAC nr.\n");
418 for(tj=0; tj<d1->
tacNr; tj++)
if(ti<0 || tj==ti) {
424 double s=fabs(d1->
r[tj].
wss-d2->
r[tj].
wss);
425 printf(
"par1.r[%d].wss := %g\n", tj, d1->
r[tj].
wss);
426 printf(
"par2.r[%d].wss := %g\n", tj, d2->
r[tj].
wss);
427 printf(
"|diff| := %g\n", s);
428 printf(
"diff_limit := %g\n", test_abs);
429 if(test_rel>0.0) printf(
"rel_diff_limit := %g\n", test_rel);
int doubleMatch(const double v1, const double v2, const double lim)
int doubleMatchRel(const double v1, const double v2, const double lim)
int parCompareTacNames(PAR *d1, PAR *d2, const int i, const int casens, TPCSTATUS *status)
int parCompareParameterNames(PAR *d1, PAR *d2, const int i, const int casens, TPCSTATUS *status)
int parCompareParameterUnits(PAR *d1, PAR *d2, const int i, TPCSTATUS *status)
int parCompareParameters(PAR *d1, PAR *d2, const int pi, const int ti, int checkpar, int checksd, int checkcl, const double test_abs, const double test_rel, TPCSTATUS *status)
int parCompareWSS(PAR *d1, PAR *d2, const int ti, const double test_abs, const double test_rel, TPCSTATUS *status)
void statusSet(TPCSTATUS *s, const char *func, const char *srcfile, int srcline, tpcerror error)
void strReplaceChar(char *s, char c1, char c2)
char * strdup(const char *s)
char name[MAX_PARNAME_LEN+1]
char name[MAX_TACNAME_LEN+1]
int verbose
Verbose level, used by statusPrint() etc.
@ TPCERROR_FAIL
General error.
@ TPCERROR_NO_DATA
File contains no data.
char * unitName(int unit_code)
Header file for library libtpcift.
Header file for libtpcpar.