SUBROUTINE ADDERR C This subroutine calculates "uncertainties" for fake binary data in C BINFAKE. It uses FRACERR(IG) and ABSERR(IG) and adds them in C quadrature for each scan. In general, the fractional error FRACERR C reflects the uncertainty in the calibration correction, which is C multiplicative, while the "absolute" error ABSERR reflects the C uncertainty in a scan due to photon noise, scintillation, etc. The C uncertainties are then used along with a random number generator to C add errors to the model visibilities. C C J.T. Armstrong 22 Jan 1991 C INCLUDE 'BINFIT.INC' REAL*8 GASDEV, RAN3, RERR INTEGER*4 IDUM EXTERNAL GASDEV, RAN3 DO ID = 1, NDATA DO IG = 1, NFILT IF(ABSERR(IG).NE.0. .OR. FRACERR(IG).NE.0.) THEN VISERR(ID,IG) = ( VIS2(ID,IG) * FRACERR(IG) ) ** 2 VISERR(ID,IG) = VISERR(ID,IG) + ABSERR(IG)**2 VISERR(ID,IG) = SQRT(VISERR(ID,IG)) D WRITE(OUTC,'(A,I4,A,I2,A,F10.4)') D 1 ' VISERR(',ID,',',IG,') = ', VISERR(ID,IG) RERR = GASDEV(IDUM)*VISERR(ID,IG) D WRITE(OUTC,'(A,F10.4)') ' Error added: ',RERR VIS2(ID,IG) = VIS2(ID,IG) + RERR ELSE VISERR(ID,IG) = 0. END IF END DO END DO RETURN END C================================================================= REAL*8 FUNCTION GASDEV(IDUM) C From Numerical Recipes, p. 203. REAL*8 V1,V2,R,FAC,GSET,GASDEV INTEGER*4 ISET,IDUM DATA ISET/0/ IF (ISET.EQ.0) THEN 1 V1 = 2.*RAN2(IDUM) - 1. V2 = 2.*RAN2(IDUM) - 1. R = V1**2 + V2**2 IF (R.GE.1.) GO TO 1 FAC = SQRT(-2.*LOG(R)/R) GSET = V1*FAC GASDEV = V2*FAC ISET = 1 ELSE GASDEV = GSET ISET = 0 ENDIF RETURN END C================================================================= REAL*8 FUNCTION RAN2(IDUM) C From Numerical Recipes, p. 197. REAL*8 RAN2,RM INTEGER*4 M,IA,IC,IR(97),IFF PARAMETER (M=714025,IA=1366,IC=150889,RM=1.4005112E-6) DATA IFF /0/ IF (IDUM.LT.0 .OR. IFF.EQ.0) THEN IFF = 1 IDUM = MOD(IC-IDUM,M) DO 11 J = 1,97 IDUM = MOD(IA*IDUM+IC,M) IR(J) = IDUM 11 CONTINUE IDUM = MOD(IA*IDUM+IC,M) IY = IDUM ENDIF J = 1+(97*IY)/M IF (J.GT.97 .OR. J.LT.1)THEN WRITE(6,*) ' Index J out of bounds in RAN2' RETURN ENDIF IY = IR(J) RAN2 = IY*RM IDUM = MOD(IA*IDUM+IC,M) IR(J) = IDUM RETURN END C================================================================= REAL*8 FUNCTION RAN3(IDUM) C From Numerical Recipes, p. 199. REAL*8 RAN3,MBIG,MSEED,MZ,FAC,MA(55),MJ,MK INTEGER*4 I,IFF,IDUM,II,K,INEXT,INEXTP PARAMETER (MBIG=4000000.,MSEED=1618033.,MZ=0.,FAC=2.5E-7) DATA IFF /0/ IF (IDUM.LT.0.OR.IFF.EQ.0) THEN IFF = 1 MJ = MSEED-IABS(IDUM) MJ = MOD(MJ,MBIG) MA(55) = MJ MK = 1 DO I = 1, 54 II = MOD(21*I,55) MA(II) = MK MK = MJ-MK IF (MK.LT.MZ) MK = MK+MBIG MJ = MA(II) END DO DO K = 1, 4 DO I = 1, 55 MA(I) = MA(I)-MA(1+MOD(I+30,55)) IF (MA(I).LT.MZ) MA(I) = MA(I)+MBIG END DO END DO INEXT = 0 INEXTP = 31 IDUM = 1 END IF INEXT = INEXT+1 IF (INEXT.EQ.56) INEXT = 1 INEXTP = INEXTP+1 IF (INEXTP.EQ.56) INEXTP = 1 MJ = MA(INEXT)-MA(INEXTP) IF (MJ.LT.MZ) MJ = MJ+MBIG MA(INEXT) = MJ RAN3 = MJ*FAC RETURN END