REAL*8 FUNCTION XCHIT(S2,ANU,A,B,LB) C This function generates from a doubly truncated chi-square distribution, C (s2)h ~ chisq(nu), a 2. C Inputs: C S2 Distribution parameter s2 C ANU Degrees of freedom C A Lower bound C B Upper bound if LB=.FALSE. C LB If .TRUE., no upper bound C Output: C XCHIT Random variable h IMPLICIT REAL*8 (A-H,O-Z) LOGICAL DIFNAN COMMON/CHIT/C1 EXTERNAL CHILD,CHILD1,CHILD2 LOGICAL LB IF(ANU.LE.2.0D0)CALL PEND(' DF <=2 in xchit') A1=A*S2 IF(.NOT.LB)B1=B*S2 IF(LB)B1=DMAX1(ANU,A1)+DSQRT(2.0D0*ANU)*(6.0D0+100.0D0/ANU) C1=.5D0*(ANU-2.0D0) ITRY=1 10 XCHIT=YLC(CHILD,CHILD1,CHILD2,A1,B1,.TRUE.,ANU-2.0D0)/S2 IF(XCHIT.EQ.DMACH(7))WRITE(6,15)S2,ANU,A,B 15 FORMAT(' +Infinity in XCHIT:',4(1PE15.5)) IF(.NOT.DIFNAN(XCHIT))RETURN NB=0 IF(LB)NB=1 IF(ITRY.EQ.1)WRITE(6,20)S2,ANU,A,B,NB 20 FORMAT(' NaN in XCHIT:',4(1PE14.5),I2) ITRY=ITRY+1 IF(ITRY.LE.2)GO TO 10 CALL PEND(' 2 tries for XCHIT') RETURN END REAL*8 FUNCTION CHILD(X) IMPLICIT REAL*8 (A-H,O-Z) COMMON/CHIT/C1 CHILD=C1*DLOG(X)-.5D0*X RETURN END REAL*8 FUNCTION CHILD1(X) IMPLICIT REAL*8 (A-H,O-Z) COMMON/CHIT/C1 CHILD1=C1/X-.5D0 RETURN END REAL*8 FUNCTION CHILD2(X) IMPLICIT REAL*8 (A-H,O-Z) COMMON/CHIT/C1 CHILD2=-C1/X**2 RETURN END