aboutsummaryrefslogtreecommitdiff
path: root/math/bevington/fchisq.f
blob: 1f9a8dc27a53c0460d0b8b7999fea2aefaa90417 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
C FUNCTION FCHISQ.F
C
C SOURCE
C   BEVINGTON, PAGE 194.
C
C PURPOSE
C   EVALUATE REDUCED CHI SQUARE FOR FIT OF DATA 
C     FCHISQ = SUM ((Y-YFIT)**2 / SIGMA**2) / NFREE
C
C USAGE 
C   RESULT = FCHISQ (Y, SIGMAY, NPTS, NFREE, MODE, YFIT)
C
C DESCRIPTION OF PARAMETERS
C   Y	   - ARRAY OF DATA POINTS
C   SIGMAY - ARRAY OF STANDARD DEVIATIONS FOR DATA POINTS
C   NPTS   - NUMBER OF DATA POINTS
C   NFREE  - NUMBER OF DEGREES OF FREEDOM
C   MODE   - DETERMINES METHOD OF WEIGHTING LEAST-SQUARES FIT
C	     +1 (INSTRUMENTAL) WEIGHT(I) = 1./SIGMAY(I)**2
C	      0 (NO WEIGHTING) WEIGHT(I) = 1.
C	     -1 (STATISTICAL)  WEIGHT(I) = 1./Y(I)
C   YFIT   - ARRAY OF CALCULATED VALUES OF Y
C
C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED 
C   NONE
C
	FUNCTION FCHISQ (Y,SIGMAY,NPTS,NFREE,MODE,YFIT) 
	DOUBLE PRECISION CHISQ,WEIGHT
	DIMENSION Y(1),SIGMAY(1),YFIT(1)
11	CHISQ=0.
12	IF (NFREE) 13,13,20
13	FCHISQ=0.
	GOTO 40 
C
C ACCUMULATE CHI SQUARE 
C
20	DO 30 I=1,NPTS
21	IF (MODE) 22,27,29
22	IF (Y(I)) 25,27,23
23	WEIGHT=1./Y(I)
	GOTO 30 
25	WEIGHT=1./(-Y(I))
	GOTO 30 
27	WEIGHT=1.
	GOTO 30 
29	WEIGHT=1./SIGMAY(I)**2
30	CHISQ=CHISQ+WEIGHT*(Y(I)-YFIT(I))**2
C
C	DIVIDE BY NUMBER OF DEGREES OF FREEDOM
C
31	FREE=NFREE
32	FCHISQ=CHISQ/FREE
40	RETURN
	END