C @(#)tsasin.for 17.1.1.1 (ES0-DMD) 01/25/02 17:20:37 C=========================================================================== C Copyright (C) 1995 European Southern Observatory (ESO) C C This program is free software; you can redistribute it and/or C modify it under the terms of the GNU General Public License as C published by the Free Software Foundation; either version 2 of C the License, or (at your option) any later version. C C This program is distributed in the hope that it will be useful, C but WITHOUT ANY WARRANTY; without even the implied warranty of C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the C GNU General Public License for more details. C C You should have received a copy of the GNU General Public C License along with this program; if not, write to the Free C Software Foundation, Inc., 675 Massachusetss Ave, Cambridge, C MA 02139, USA. C C Corresponding concerning ESO-MIDAS should be addressed as follows: C Internet e-mail: midas@eso.org C Postal address: European Southern Observatory C Data Management Division C Karl-Schwarzschild-Strasse 2 C D 85748 Garching bei Muenchen C GERMANY C=========================================================================== C C @(#)tsasin.for 5.1 (ESO-IPG) 4/5/93 15:58:43 C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C.COPYRIGHT (c) 1992 European Southern Observatory and Warsaw Observatory C.IDENT tsasin.for C.AUTHOR Alex Schwarzenberg-Czerny, ESO and Warsaw Observatory C.KEYWORD MIDAS, time series, SINEFIT/TSA C.LANGUAGE FORTRAN 77 C.PURPOSE Fit sine (Fourier) series C.VERSION 0.0 June 1992 C.RETURNS None C.ENVIRON TSA context C----------------------------------------------------------------------------- C C INCLUDE 'MID_REL_INCL:TSA_DEF.INC' INCLUDE 'MID_INCLUDE:ST_DEF.INC' C INTEGER MXORDER PARAMETER (MXORDER=20) ! DEPENDS ON LENGTH OF OUTD REAL*8 FREQU ! INITIAL PERIOD VALUE INTEGER NORDER ! NUMBER OF HARMONICS INTEGER ITER ! NUMBER OF ITERATIONS CHARACTER*60 INAME ! NAME OF INPUT TABLE CHARACTER*60 ONAME ! NAME OF OUTPUT TABLE REAL*8 COEF(MXORDER+3) ! NORDER COEFFICIENTS C INTEGER MODE,IACTS,KUN,KNUL INTEGER TID,OTID,ITIME,IVAL INTEGER NCOL,ICOL,NROW,IROW,ISOR INTEGER LFIELD,TTYP,VTYP INTEGER PTIME,PVAL,POTIME,POVAL CHARACTER*10 FORM CHARACTER*80 TEXT DOUBLE PRECISION E(MXORDER+3) ! WORK TABLES DOUBLE PRECISION B(MXORDER+3,MXORDER+3) ! WORK TABLES C INCLUDE 'MID_REL_INCL:TSA_DAT.INC' INCLUDE 'MID_INCLUDE:ST_DAT.INC' C DATA MODE/1/ C C Get parameters C CALL STSPRO ('tsasin') CALL STKRDC ('IN_A', 1,1,60,IACTS,INAME, KUN,KNUL,ISTAT) CALL STKRDC ('OUT_A',1,1,60,IACTS,ONAME, KUN,KNUL,ISTAT) CALL STKRDD ('STARTTSA', 1, 1,IACTS,FREQU, KUN,KNUL,ISTAT) CALL STKRDI ('ORDERTSA', 1, 1,IACTS,NORDER,KUN,KNUL,ISTAT) NORDER=2*NORDER+2 IF (NORDER.GT.MXORDER+1) THEN NORDER=(MXORDER-1)/2*2+1 WRITE(TEXT,'(A,I4)') $ 'Will use max. permitted ORDER of', $ (MXORDER-1)/2 CALL STTPUT(TEXT,ISTAT) ENDIF CALL STKRDI ('ITER', 1, 1, IACTS,ITER,KUN,KNUL,ISTAT) IF (ITER.LT.0) THEN CALL STKRDD ('OUTPUTD',1,NORDER-1,IACTS,COEF(1), $ KUN,KNUL,ISTAT) ENDIF C C Map input/output data C CALL TBTOPN (INAME,F_IO_MODE,TID,ISTAT) OTID=TID CALL TBIGET (TID,NCOL,NROW,ISOR,ICOL,IROW,ISTAT) CALL TBLSER (TID,'TIME',ITIME,ISTAT) IF (ITIME.LT.0) THEN CALL STETER(3,'Column :TIME not found') ENDIF CALL TBLSER (TID,'VALUE',IVAL,ISTAT) IF (IVAL.LT.0) THEN CALL STETER(4,'Column :VALUE not found') ENDIF CALL TBFGET (TID,ITIME,FORM,LFIELD,TTYP,ISTAT) CALL TBFGET (TID,IVAL, FORM,LFIELD,VTYP,ISTAT) CALL TBDGET (TID,ISTORE,ISTAT) IF (ISTORE.NE.F_TRANS) THEN TEXT='Input table '//INAME//' stored not transposed' CALL STETER(1,TEXT) ENDIF IF (TTYP.NE.D_R8_FORMAT.OR.VTYP.NE.D_R8_FORMAT) THEN CALL STETER(2, $ 'Data column(s) must be of DOUBLE PRECISION type') ENDIF CALL TBCMAP (TID,ITIME,PTIME,ISTAT) POTIME=PTIME CALL TBCMAP (TID,IVAL, PVAL, ISTAT) POVAL=PVAL C C Map output data C C M. Peron 22-02-93 C A. Schwarzenberg-Czerny 07-05-93 C C Perform single nonlinear fit iteration, store coeficients and residuals C COEF(NORDER)=FREQU CALL TIMFIT(MADRID(PTIME),MADRID(PVAL),MADRID(POVAL),NROW, $ MODE,NORDER,ITER,MXORDER,COEF,E,B) FREQU=COEF(NORDER) CALL STKWRD ('STARTTSA', FREQU, 1, 1,KUN,ISTAT) CALL STKWRD ('OUTPUTD',COEF(1),1,NORDER-1,KUN,ISTAT) C C Wind-up C CALL DSCUPT(OTID,OTID,' ',ISTAT) CALL STSEPI C END C C C C C C C Subroutine FIT C C Purpose: Given a trial period, fit a Fourier series by non-linear C least squares method. C C Data: an ASCII file containing 3 columns (number of line(integer), C time, value (both real*4)) and less than maxm-2 rows. C A trial value of the period, an order of the series (