1
C @(#)tsaaov.for 19.1 (ESO-DMD) 02/25/03 13:33:25
2
C===========================================================================
3
C Copyright (C) 1995 European Southern Observatory (ESO)
5
C This program is free software; you can redistribute it and/or
6
C modify it under the terms of the GNU General Public License as
7
C published by the Free Software Foundation; either version 2 of
8
C the License, or (at your option) any later version.
10
C This program is distributed in the hope that it will be useful,
11
C but WITHOUT ANY WARRANTY; without even the implied warranty of
12
C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
C GNU General Public License for more details.
15
C You should have received a copy of the GNU General Public
16
C License along with this program; if not, write to the Free
17
C Software Foundation, Inc., 675 Massachusetts Ave, Cambridge,
20
C Correspondence concerning ESO-MIDAS should be addressed as follows:
21
C Internet e-mail: midas@eso.org
22
C Postal address: European Southern Observatory
23
C Data Management Division
24
C Karl-Schwarzschild-Strasse 2
25
C D 85748 Garching bei Muenchen
27
C===========================================================================
29
C @(#)tsaaov.for 5.1 (ESO-IPG) 4/5/93 15:58:45
30
C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
31
C.COPYRIGHT (c) 1992 European Southern Observatory & Copernicus Astron. Center
33
C.AUTHOR Alex Schwarzenberg-Czerny, Copernicus Astron. Center, Warsaw
34
C.KEYWORD MIDAS, time series, AOV/TSA
36
C.PURPOSE Compute analysis of variance periodogramme
38
C.ENVIRON TIME/ANAL context
39
C.VERSION 0.0 June 1992
43
C-----------------------------------------------------------------------------
46
INCLUDE 'MID_REL_INCL:TSA_DEF.INC'
47
INCLUDE 'MID_INCLUDE:ST_DEF.INC'
51
REAL*8 START(NAXIS) ! START FREQUENCY
52
REAL*8 STEP(NAXIS) ! STEP IN FREQUENCY
53
INTEGER LENGTH(NAXIS) ! NUMBER OF FREQUENCIES
54
INTEGER ORDER ! NUMBER OF BINS
55
INTEGER COVER ! NUMBER OF BIN COVERAGES
56
CHARACTER*60 INAME ! NAME OF INPUT TABLE
57
CHARACTER*60 ONAME ! NAME OF OUTPUT IMAGE
59
INTEGER IACTS,KUN,KNUL
60
INTEGER TID,ITIME,IVAL
61
INTEGER NCOL,ICOL,NROW,IROW,ISOR
62
INTEGER LFIELD,TTYP,VTYP
64
INTEGER*8 PTIME,PVAL,PPER
69
INCLUDE 'MID_REL_INCL:TSA_DAT.INC'
70
INCLUDE 'MID_INCLUDE:ST_DAT.INC'
74
CALL STSPRO ('tsaaov')
75
CALL STKRDC ('IN_A' ,1,1,60,IACTS,INAME ,KUN,KNUL,ISTAT)
76
CALL STKRDC ('OUT_A', 1,1,60,IACTS,ONAME ,KUN,KNUL,ISTAT)
77
CALL STKRDD ('STARTTSA',
78
$ 1, 1,IACTS,START(1) ,KUN,KNUL,ISTAT)
79
CALL STKRDD ('STEPTSA',
80
$ 1, 1,IACTS,STEP(1) ,KUN,KNUL,ISTAT)
81
CALL STKRDI ('NSTEPS', 1, 1,IACTS,LENGTH(1),KUN,KNUL,ISTAT)
82
CALL STKRDI ('ORDERTSA',
83
$ 1, 1,IACTS,ORDER, KUN,KNUL,ISTAT)
84
CALL STKRDI ('COVER', 1, 1,IACTS,COVER, KUN,KNUL,ISTAT)
91
CALL TBTOPN (INAME,F_I_MODE,TID,ISTAT)
92
CALL TBIGET (TID,NCOL,NROW,ISOR,ICOL,IROW,ISTAT)
93
CALL TBLSER (TID,'TIME',ITIME,ISTAT)
95
CALL STETER(3,'Column :TIME not found')
97
CALL TBLSER (TID,'VALUE',IVAL,ISTAT)
99
CALL STETER(3,'Column :VALUE not found')
101
CALL TBFGET (TID,ITIME,FORM,LFIELD,TTYP,ISTAT)
102
CALL TBFGET (TID,IVAL, FORM,LFIELD,VTYP,ISTAT)
103
CALL TBDGET (TID,ISTORE,ISTAT)
104
IF (ISTORE.NE.F_TRANS) THEN
105
TEXT='Input table '//INAME//' stored not transposed'
108
IF (TTYP.NE.D_R8_FORMAT.OR.VTYP.NE.D_R8_FORMAT) THEN
109
CALL STETER(1,'Column(s) must be of DOUBLE PRECISION type')
111
CALL TBCMAP (TID,ITIME,PTIME,ISTAT)
112
CALL TBCMAP (TID,IVAL, PVAL, ISTAT)
116
CALL STIPUT (ONAME,D_R8_FORMAT,F_IO_MODE,
117
$ F_IMA_TYPE,NAXIS,LENGTH,
118
$ START,STEP,ONAME,'AXIS: 1/TIME DATA: UNITLESS',
121
C Compute AOV periodogramme
123
CALL TIMAOV (MADRID(PTIME),MADRID(PVAL),
124
$ MADRID(PPER),NROW,LENGTH(1),
125
$ START(1),STEP(1),ORDER,COVER)
129
CALL DSCUPT(IDPER,IDPER,' ',ISTAT)
136
SUBROUTINE TIMAOV(T,X,Y,N,NFREQ,FREQIN,FSTEP,NORDER,NCOVER)
138
C Analysis of Variance Periodogramme
139
C Reference: M.N.R.A.S. 241, 153
140
C Alex Schwarzenberg-Czerny Warsaw Observatory 1988
143
INCLUDE 'MID_REL_INCL:TSA_DEF.INC'
145
INTEGER NORDER ! ORDER (NUMBER OF BINS)
146
INTEGER NCOVER ! NUMBER OF BIN COVERS
147
INTEGER N ! NUMBER OF OBSERVATIONS
148
INTEGER NFREQ ! NUMBER OF FREQUENCIES
149
DOUBLE PRECISION T(N),X(N) ! TIMES AND VALUES OF OBSERVATIONS
150
DOUBLE PRECISION Y(NFREQ,2) ! PERIODOGRAMME
151
REAL*8 FREQIN,FSTEP ! FREQUENCY START AND INCREMENT
154
PARAMETER(MAXORD=100)
156
INTEGER ICOVER,IF,I,NO,IBIN,NR
157
INTEGER NINCMPL,NINSUFF,NALL
159
DOUBLE PRECISION BMEAN(MAXORD)
160
DOUBLE PRECISION T0,XM,VA,SAVE,COVER,VAR
161
DOUBLE PRECISION FREQ,XMEAN,S1,S2
164
INCLUDE 'MID_REL_INCL:TSA_CONST.INC'
166
IF (NORDER.GT.MAXORD) THEN
168
1 'WARNING: Used maximum alllowed order of ',MAXORD
169
CALL STTPUT(TEXT,ISTAT)
173
C Set variables (incl. mean and variance)
194
C Loop over coverages and frequencies
197
COVER=(ICOVER-1.)/NCOVER
200
FREQ=((IF-1)*FSTEP+FREQIN)*NO
206
C Assign data to bins and add
209
IBIN=1+MOD(INT((T(I)-T0)*FREQ+COVER),NO)
210
BMEAN(IBIN)=X(I)+BMEAN(IBIN)
211
NBIN(IBIN)=1+NBIN(IBIN)
214
C Correct for incomplete bins
221
BMEAN(IBIN)=BMEAN(IBIN)-NBIN(IBIN)*XM
222
IF (NBIN(IBIN).LE.1) THEN
225
XMEAN=XMEAN-BMEAN(IBIN)
226
VAR=VAR-BMEAN(IBIN)*BMEAN(IBIN)
231
C Calculate A.O.V. statistics for a given frequency
237
IF (NBIN(IBIN).GT.1) THEN
238
SAVE=BMEAN(IBIN)/NBIN(IBIN)-XMEAN
239
S1=SAVE*SAVE*NBIN(IBIN)+S1
244
Y(IF,1)=Y(IF,1)+S1/(NR-1)/S2*(NALL-NR)
248
Y(IF,2)=MAX(Y(IF,2),ONE)
249
IF (NINSUFF.LE.1) THEN
251
$ 'fatal calculation/rounding error',ISTAT)
257
Y(IF,2)=MAX(Y(IF,2),TWO)
262
Y(IF,1)=Y(IF,1)/NCOVER
264
IF (NINCMPL.GT.0.OR.NINSUFF.GT.0) THEN
266
$ 'Statistics of bad events (see quality row for details):',
268
WRITE(TEXT,'(2(i8,a))')
269
$ NINCMPL,' underpopulated bins'
270
CALL STTPUT(TEXT,ISTAT)
271
WRITE(TEXT,'(2(i8,a))')
272
$ NINSUFF,' of',NFREQ*NCOVER,
274
CALL STTPUT(TEXT,ISTAT)