5#include "tpcclibConfig.h"
45 if(parr==NULL)
return;
51 parr->
p=parr->
sd=parr->
cl1=parr->
cl2=NULL;
63 if(parn==NULL)
return;
91 if(parr==NULL)
return;
126 par->
r=(
PARR*)malloc(tacNr*
sizeof(
PARR));
128 for(
int i=0; i<tacNr; i++) {
135 par->
n=(
PARN*)malloc(parNr*
sizeof(
PARN));
137 for(
int i=0; i<parNr; i++)
parnInit(&par->
n[i]);
163 parr->
p=malloc(parNr*
sizeof(
double));
164 parr->
sd=malloc(parNr*
sizeof(
double));
165 parr->
cl1=malloc(parNr*
sizeof(
double));
166 parr->
cl2=malloc(parNr*
sizeof(
double));
167 if(parr->
p==NULL || parr->
sd==NULL || parr->
cl1==NULL || parr->
cl2==NULL)
170 for(
int i=0; i<parNr; i++)
171 parr->
p[i]=parr->
sd[i]=parr->
cl1[i]=parr->
cl2[i]=nan(
"");
198 int newTacNr, addTacNr, newParNr, addParNr;
199 newTacNr=par->
tacNr+tacNr; addTacNr=newTacNr-par->
_tacNr;
200 newParNr=par->
parNr+parNr; addParNr=newParNr-par->
_parNr;
206 parnPtr=realloc(par->
n,
sizeof(
PARN)*newParNr);
209 parnPtr+=par->
_parNr;
for(
int i=0; i<addParNr; i++)
parnInit(parnPtr++);
215 for(i=0; i<par->
tacNr; i++) {
216 par->
r[i].
p=realloc(par->
r[i].
p,
sizeof(
double)*newParNr);
217 par->
r[i].
sd=realloc(par->
r[i].
sd,
sizeof(
double)*newParNr);
218 par->
r[i].
cl1=realloc(par->
r[i].
cl1,
sizeof(
double)*newParNr);
219 par->
r[i].
cl2=realloc(par->
r[i].
cl2,
sizeof(
double)*newParNr);
220 if(par->
r[i].
p==NULL || par->
r[i].
sd==NULL || par->
r[i].
cl1==NULL || par->
r[i].
cl2==NULL)
222 for(j=par->
parNr; j<newParNr; j++)
223 par->
r[i].
p[j]=par->
r[i].
sd[j]=par->
r[i].
cl1[j]=par->
r[i].
cl2[j]=nan(
"");
230 parrPtr=realloc(par->
r,
sizeof(
PARR)*newTacNr);
234 for(
int i=0; i<addTacNr; i++, parrPtr++) {
256 if(par==NULL || par->
tacNr<1)
return(0);
257 for(
int ri=0; ri<par->
tacNr; ri++)
if(!isnan(par->
r[ri].
wss))
return(1);
271 if(par==NULL || par->
tacNr<1)
return(0);
273 for(ri=0; ri<par->
tacNr; ri++) {
274 if(!isnan(par->
r[ri].
start) || !isnan(par->
r[ri].
end)) ret=1;
275 if(ri==0 || ret==0)
continue;
292 if(par==NULL || par->
tacNr<1)
return(0);
294 for(ri=0; ri<par->
tacNr; ri++) {
295 if(ret==0 && par->
r[ri].
model>0) ret=1;
296 if(ri>0 && par->
r[ri].
model!=par->
r[ri-1].
model) {ret=2;
break;}
314 if(par==NULL || par->
tacNr<1 || pi<0 || pi>=par->
parNr)
return(0);
315 for(
int i=0; i<par->
tacNr; i++)
if(!isnan(par->
r[i].
sd[pi]))
return(1);
331 if(par==NULL || par->
tacNr<1 || pi<0 || pi>=par->
parNr)
return(0);
332 for(
int i=0; i<par->
tacNr; i++)
333 if(!isnan(par->
r[i].
cl1[pi]) && !isnan(par->
r[i].
cl2[pi]))
return(1);
347 if(par==NULL || par->
tacNr<1)
return(0);
349 for(ri=0; ri<par->
tacNr; ri++) {
350 if(ret==0 && par->
r[ri].
fitNr>0) ret=1;
351 if(ri>0 && par->
r[ri].
fitNr!=par->
r[ri-1].
fitNr) {ret=2;
break;}
366 if(par==NULL || par->
tacNr<1)
return(0);
368 for(ri=0; ri<par->
tacNr; ri++) {
369 if(ret==0 && par->
r[ri].
dataNr>0) ret=1;
370 if(ri>0 && par->
r[ri].
dataNr!=par->
r[ri-1].
dataNr) {ret=2;
break;}
385 if(par==NULL || par->
h.
keyNr<1)
return((
char*)NULL);
386 int li=
iftFindKey(&par->
h,
"optimality_criterion", 0);
388 if(li<0)
return((
char*)NULL);
403 if(par==NULL || par->
h.
keyNr<1)
return((
char*)NULL);
405 if(li<0) li=
iftFindKey(&par->
h,
"study_number", 0);
406 if(li<0)
return((
char*)NULL);
430 if(i<0) i=
iftFindKey(&par->
h,
"study_number", start);
431 if(i<0) i=
iftFindKey(&par->
h,
"study number", start);
440 return(
iftPut(&par->
h,
"studynr", s, (
char)1, NULL));
453 if(d==NULL || d->
tacNr<1 || d->
parNr<1)
return;
456 u=d->
tacNr; n=1;
while((u/=10)>=1) n++;
458 for(
int i=0; i<d->
tacNr; i++) {
459 if(strlen(d->
r[i].
name)<1 || strcmp(d->
r[i].
name,
".")==0)
460 sprintf(d->
r[i].
name,
"%0*d", n, 1+i);
463 u=d->
parNr; n=1;
while((u/=10)>=1) n++;
465 for(
int i=0; i<d->
parNr; i++) {
466 if(strlen(d->
n[i].
name)<1 || strcmp(d->
n[i].
name,
".")==0)
467 sprintf(d->
n[i].
name,
"P%0*d", n, 1+i);
491 memcpy(&parn, &par->
n[pi],
sizeof(
PARN));
492 for(i=pi+1; i<par->
parNr; i++)
493 memcpy(&par->
n[i-1], &par->
n[i],
sizeof(
PARN));
494 memcpy(&par->
n[par->
parNr-1], &parn,
sizeof(
PARN));
497 double p, sd, cl1, cl2;
498 for(j=0; j<par->
tacNr; j++) {
499 p=par->
r[j].
p[pi]; sd=par->
r[j].
sd[pi];
500 cl1=par->
r[j].
cl1[pi]; cl2=par->
r[j].
cl2[pi];
501 for(i=pi+1; i<par->
parNr; i++) {
502 par->
r[j].
p[i-1]=par->
r[j].
p[i]; par->
r[j].
sd[i-1]=par->
r[j].
sd[i];
531 for(
int i=ti+1; i<par->
tacNr; i++) par->
r[i-1]=par->
r[i];
int doubleMatch(const double v1, const double v2, const double lim)
int iftPut(IFT *ift, const char *key, const char *value, char comment, TPCSTATUS *status)
int iftDelete(IFT *ift, int index)
int iftFindKey(IFT *ift, const char *key, int start_index)
int parIsFitRange(PAR *par)
int parSDWithPar(PAR *par, int pi)
char * parIsOptcrit(PAR *par)
void parrFree(PARR *parr)
int parDeletePar(PAR *par, int pi)
int parAllocate(PAR *par, int parNr, int tacNr)
int parCLWithPar(PAR *par, int pi)
void parEnsureNames(PAR *d)
int parrAllocate(PARR *parr, int parNr)
int parIsDataNr(PAR *par)
void parrInit(PARR *parr)
char * parIsStudyNr(PAR *par)
void parnInit(PARN *parn)
int parDeleteTAC(PAR *par, int ti)
int parSetStudyNr(PAR *par, const char *s)
int parAllocateMore(PAR *par, int parNr, int tacNr)
IFT h
Optional (but often useful) header information.
char name[MAX_PARNAME_LEN+1]
char name[MAX_TACNAME_LEN+1]
Header file for library libtpcextensions.
#define MAX_TACNAME_LEN
Max length of TAC ID name (not including trailing zero)
@ UNIT_UNKNOWN
Unknown unit.
#define MAX_PARNAME_LEN
Max string length for PAR name.
@ TPCERROR_FAIL
General error.
@ TPCERROR_OUT_OF_MEMORY
Cannot allocate memory.
Header file for library libtpcift.
Header file for libtpcmodels.
Header file for libtpcpar.
@ PAR_FORMAT_UNKNOWN
Unknown format.