$CONTR

Defines values for certain user-supplied routines.

1
2
3
4
$CONTR   DATA=([label1|0] [label2|0] [label3|0])

;# EXAMPLE
$CONTR   DATA=(0,TYPE)

Discussion

Optional. Used only with user-supplied routines such as MIX, CONTR, and CCONTR that use data items stored in the DATA array. (The CONTR and CCONTR subroutines are used to define an objective function which differs from the default (ELS) objective function. The MIX subroutine is used to describe the mixing parameter of a mixture model, see $MIX) These routines are called with individual records.

An array DATA is available in NONMEM module ROCM_REAL and changes value with each individual record. It contains up to three types of data items occuring in each observation record of an individual record. For any individual record, the data item occuring in the Ith observation record of the individual record, having the Jth label occuring in the DATA option of the $CONTR record, is available in DATA(I,J). If a 0 is used in the DATA option instead of a label, then a 0 is found in DATA(I,J).

The $CONTR record gives labels (or synonyms) defined in the $INPUT record of one to three types of data items to be made available to the subroutine(s) in the DATA array. These routines are called with individual records.

With the above sample $CONTR record, the following code might be present in a double precision MIX routine. The code loops through the observation records of the NREC'th individual record. For each of the NOBS observation records, the local variable TYPE is given the value of the TYPE data item from that data record. The 0 in the sample is a place-holder which causes the first column in the DATA array to be skipped. The value of TYPE for the Ith observation record is therefore available in DATA(I,2). The DATA array is found in ROCM_REAL. NO is a constant giving the maximum number of observations per individual record. NOBS is the number of observations in the current individual record. (See SIZES).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
     USE SIZES, ONLY: NO,DPSIZE
     USE ROCM_REAL, ONLY: DATA=>RDATA
     USE ROCM_INT, ONLY: NOBS=>NOBSIND2
     ...
     INTEGER I
     REAL(KIND=DPSIZE) :: TYPE
     ...
     DO 100 I=1,NOBS
     TYPE=DATA(I,2)
     ...
 100 CONTINUE
     ...