1
C @(#)dtom.for 19.1 (ES0-DMD) 02/25/03 13:31:22
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 Massachusetss Ave, Cambridge,
20
C Corresponding 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===========================================================================
30
C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
31
C.IDENT program DTOM A. Lauberts ESO 890710
33
C.KEYWORDS characteristic curve, Schmidt plates, standard galaxies,
38
C Find least squares fit of
39
C MPG = photographic magnitude/2.5 (in rings between circular apertures)
40
C + innermost aperture
42
C MEL = photoelectric magnitude/2.5 (in same rings as MPG)
46
C F = A*log(D-DF) + B*log(DS-D) + CM (the D to log I function)
48
C E = log I + CS (versus the spot densities D)
50
C Minimize S = Sum (MPG-MEL)**2 + Sum (F-E)**2
51
C over min0:max9 rings min0:max21 spots
54
C D = Density measured by PDS (divide by 200 or 800!)
55
C DF = Density of the chemical fog = X(1) = XX(1)
56
C DS = Density at saturation = X(2) = XX(2)
57
C G = Gamma = dD/d(log I)
58
C RG = ln10/Gamma at infl = X(3) = XX(7)
59
C DI = Density at inflexion point = X(4) = XX(8)
60
C DB = Density at sky background
61
C CM = Zero point for mag/2.5 = X(5)
62
C Zero point in sky units = XX(5)
63
C CS = Zero point for spots = X(6) = XX(9)
64
C A = RG*(DI-DF)**2/(DS-DF) = XX(3)
65
C B =-RG*(DS-DI)**2/(DS-DF) = XX(4)
66
C SM = Sky magnitude/20 micron aperture = XX(6)
68
C.USAGE MIDAS applic program
73
C Input: promted by inquire statements
75
C TABLEA C*8 standard galaxy photoel table file
76
C (format same as BVRLA.TBL used for the
77
C automated ESOLV procedures)
78
C TABLEC C*8 table file with calibration parameters
79
C FRAMEA C*8 image frame with central galaxy
80
C FRAMEB C*8 table file with sensitometer spots:
81
C SE R*4 array log I intensity
82
C SD R*4 array D density
83
C NES R*4 array 1st elem, no of spots wanted
84
C SPOTE R*4 constant log I difference (option)
85
C NA, NR I*4 no of apertures (rings)
86
C ESO R*4 ESO ident = (field.object no) = ESO.OBJ
87
C SCAL R*4 plate scale arcseq/mm
88
C WT R*4 array weights of innermost, outermost, internal rings
89
C SM R*4 sky mag/20 microns aperture (option)
90
C XX R*4 array initial calibration values (4 first elems)
91
C FIX I*4 array 1/0 for fix/no-fix calibr parameters
95
C BVR R*4 array ident ESO.OBJ + BVR vs log A coefficients read from
96
C TABLEA (format same as BVRLA.TBL used for the
97
C automated ESOLV procedures).
98
C GALCEN R*4 array Galaxy centre computed in program COMSKY
99
C or set by interactive cursor
100
C SKYBGR R*4 array Sky background computed in COMSKY
101
C = command COMUTE/SKY
105
C CAL R*4 array ident ESO.OBJ + calibration parameters -> TABLEC
109
C Note: In case of non-existing V-R (all coeffs = 0's), a substitute
112
C V-R = 0.134 + 0.453 * (B-V) at BS = 22 mags/sqarcs
113
C d(V-R)/dlogA = -0.025 = constant,
115
C being a good approximation (R.M.S. err = 0.02)
116
C for 0.8 < B-V < 1.2 (E and S0's)
118
C The photoelectric values are reduced to outside the atmosphere
119
C (airmass zero). Therefore, the present 'sky parameter' becomes
120
C brighter than the true sky. The magnitude difference is simply
121
C the actual extinction. Whenever needed we take Bext = 0.20 (ESO
122
C manual 1978) and Rext = 0.10 (ESO manual gives 0.08, own observ
123
C 0.12 after 1982) per unit airmass.
125
C This program calls former NAGLIB subroutine E04GAF,
126
C which - together with supplementary smaller routines -
127
C presently resides in module MNAG
129
C-------------------------------------------------------------------------------
130
COMMON /VMR/MADRID(1)
131
COMMON /DENS/ID(4096,9),MAXD,NR,WT(30),NS,DB,SM,A,B,XX,STEP,
132
+ SD(21),SE(21),EL(9),ORG,FIX
133
DOUBLE PRECISION RR,F,X(6),X02AAF,XTOL(6),SCALE(6),R(33),W(100),
135
REAL XX(9),APER(9),MEL(9),RADA(9),WEIGHT(9),CEL(9),
136
+ STEPA(2),STARTA(2),CEN(2),LOGA(9),BVR(31),CAL(9),SEL(9)
137
INTEGER NPIXA(2),STAT,PNTRA,NES(2),COLA(31),COLC(9),FIX(6)
139
CHARACTER*60 FRAMEA,FRAMEB,SKYMAG,TABLEA,TABLEC,LABEL(2)
143
CHARACTER*72 CALIB,RESIDS,SURFB
144
CHARACTER*3 ERRNO,RIN,SPO
147
PARAMETER NCOLA=31, NCOLC=9
148
DATA COLC/1,2,3,4,5,6,7,8,9/,
149
+ LABEL/'DENSITY','LOG_INT'/
151
EXTERNAL RESID,LSQ,MONIT
153
G(D)=C3*ALOG10(D-C1)+C4*ALOG10(C2-D)+C5
159
C set up MIDAS environment, access tables (already existing)
161
CALL SXSPRO('DTOM',STAT)
162
CALL SXKGET('TABLEA','C',1,60,IAV,TABLEA,STAT)
163
CALL SXKGET('TABLEC','C',1,60,IAV,TABLEC,STAT)
164
CALL TXTOPN(TABLEA,STAT)
165
CALL TXTOPN(TABLEC,STAT)
167
CALL SXKGET('INPUTC','C',1,1,IAV,CHR,STAT)
168
CALL SXKGET('SCALE','R',1,1,IAV,SCAL,STAT)
174
CALL SXKGET('IN_B','C',1,60,IAV,FRAMEB,STAT)
175
CALL TXTOPN(FRAMEB,STAT)
176
CALL TXIGET(FRAMEB,NCOLB,NROWB,IAV,STAT)
179
CALL TXRGET(FRAMEB,'R',I,2,COLA,XX,NULL,STAT)
183
WRITE(6,111) (SD(I),I=1,NS)
184
111 FORMAT(' SPOTD',10F7.3)
185
48 WRITE(6,*) ' first element, no of spots: '
189
IF(NS.EQ.1.OR.NS.GT.21) THEN
190
CALL SXTPUT('NO OF SPOTS MUST BE 0 OR 2-21',STAT)
194
WRITE(6,*) ' const log intensity difference
195
+ (if =0 then 1st col in Cxxx): '
211
CALL TXEPUT(FRAMEB,'R',I,1,S,STAT)
215
WRITE(6,112) (SE(I),I=1,NS)
216
112 FORMAT(' SPOTE',10F7.3)
217
CALL TXTCLO(FRAMEB,STAT)
219
55 CALL SXKGET('NAPE','I',1,1,IAV,NA,STAT)
221
CALL SXTPUT(' >9 APERTURES/OBJECT',STAT)
225
CALL SXKGET('IN_A','C',1,60,IAV,FRAMEA,STAT)
226
CALL SXIGET(FRAMEA,'I',2,NAXISA,NPIXA,STARTA,STEPA,
227
+ IDENTA,CUNITA,PNTRA,STAT)
228
IF(NA.NE.0) CALL SXDGET(FRAMEA,'GALCEN','R',1,2,IAV,CEN,STAT)
229
CALL SXDGET(FRAMEA,'SKYBGR','R',1,1,IAV,SKY,STAT)
230
CALL SXDGET(FRAMEA,'O_TIME','R*8',1,1,IAV,A,STAT)
231
IF(A.GT.1983.5D0) THEN
238
C convert sky to mags/(20*20) square micron aperture
241
CALL SXKGET('SKYMAG','R',1,1,IAV,SM,STAT)
242
SM=SM-5.*ALOG10(SCAL*0.020)
244
NDIM=NPIXA(1)*NPIXA(2)
255
CALL INTEGR(NDIM,MADRID(PNTRA),STARTA,STEPA,NPIXA,CEN,RADA,
257
CALL SXTPUT(' D-UP 0.5 1.0 1.5 2.0 2.5 3.0 3.5
262
ID(I,J)=ID(I,J)+ID(I+K,J)
266
WRITE(SURFB,204) A1, (ID(I,J), I=1,M*10,M)
267
CALL SXTPUT(SURFB,STAT)
277
CALL INTEGR(NDIM,MADRID(PNTRA),STARTA,STEPA,NPIXA,CEN,RADA,
282
ID(I,J)=ID(I,J)+ID(I+K,J)
286
WRITE(SURFB,204) A1, (ID(I,J), I=1,M*10,M)
287
CALL SXTPUT(SURFB,STAT)
289
WRITE(6,*) ' first, last log aperture: '
290
READ(5,*) LOGA(1),LOGA(2)
291
C specify table entry
292
60 CALL SXKGET('ESOOBJ','R',1,1,IAV,ESO,STAT)
294
RADA(1)=APER(1)*500./SCAL
296
S=(LOGA(2)-LOGA(1))/FLOAT(NA-1)
304
C store density distribution in common block /DENS/ID
306
CALL INTEGR(NDIM,MADRID(PNTRA),STARTA,STEPA,NPIXA,CEN,RADA,
308
C refine apertures considering actual no of pixels
310
APER(I)=RADA(I)*SCAL*0.002
311
LOGA(I)=ALOG10(APER(I))
313
C read BVR vs log A polynomial fit coefficients
314
C BVR(1) = ESO ident in the fld.obj no form
315
C Example: 271.012 means ESO field = 271, 12 = object no in ESO/Upp cat
318
CALL TXESER(TABLEA,'R*4',1,ESO,ERR,1,NSEQ,STAT)
319
CALL TXRGET(TABLEA,'R*4',NSEQ,NCOLA,COLA,BVR,NULL,STAT)
320
C compute array of U,B,V or R values vs aperture A
321
C as well as surface brightness in mags/sqarcsec
322
CALL POLY('B',BVR,LOGA,MEL,SEL,NA)
323
CALL SXTPUT('B SURFBR MAGS/SQARCSEC',STAT)
324
WRITE(SURFB,201) (SEL(I), I=1,NA)
325
CALL SXTPUT(SURFB,STAT)
327
CALL POLY(CHR,BVR,LOGA,MEL,CEL,NA)
328
CALL SXTPUT(' B-'//CHR,STAT)
332
WRITE(SURFB,201) (CEL(I), I=1,NA)
333
CALL SXTPUT(SURFB,STAT)
335
CALL SXTPUT(' AT APERTURES ARCSEC',STAT)
336
WRITE(SURFB,201) (APER(I), I=1,NA)
337
CALL SXTPUT(SURFB,STAT)
338
C take .4 times magnitude of inner aperture
340
C transform magnitudes to intensities
342
80 MEL(I)=10.**(-.4*MEL(I))
344
C take negative log of intensities in rings bound by apertures
346
90 EL(I) = - ALOG10(MEL(I)-MEL(I-1))
348
C free this area for next input
349
CALL SXFCLO(FRAMEA,STAT)
353
CALL SXKGET('WEIGHT','R',1,9,IAV,WEIGHT,STAT)
359
C equal importance photoel vs photographic
361
IF(NS.NE.0) S=NS/FLOAT(NR)
365
C get initial values XX
366
125 CALL SXKGET('INPUTR','R',1,4,IAV,XX,STAT)
367
CALL SXKGET('INPUTI','I',1,N,IAV,FIX,STAT)
373
CALL RESID(M,N,X,R,IFL)
387
IF(NS.NE.0) X(6)=X(6)/A1
388
XTOL(1)=DSQRT(X02AAF(RR))
400
CALL SXTPUT('E04GAF RESULTS:',STAT)
401
CALL E04GAF(M,N,X,R,F,XTOL,METHOD,SCALE,W,IW,RESID,LSQ,
402
+ MONIT,IPRINT,MAXCAL,IFAIL)
403
160 WRITE(ERRNO,202) IFAIL
404
CALL SXTPUT('THIS HAS ERROR NUMBER'//ERRNO,STAT)
405
C update calibration parameters in TABLEC (one row only)
406
CALL SXKGET('ESOFLD','I',1,1,IAV,NSEQ,STAT)
413
IF(I.NE.NSEQ) TYPE *,ESO,' not in field ',NSEQ
417
CALL TXRPUT(TABLEC,'R',1,NCOLC,COLC,CAL,STAT)
418
999 CALL TXTCLO(TABLEA,STAT)
419
CALL TXTCLO(TABLEC,STAT)
425
204 FORMAT(1X,F3.1,3X,10I5)
429
SUBROUTINE RESID(M,N,XC,RC,IFL)
430
C CALLED BY EO4GAF AND LSQ
431
C CALCULATES THE VALUES OF THE RESIDUALS RC AT XC
432
COMMON /DENS/ID(4096,9),MAXD,NR,WT(30),NS,DB,SM,A,B,XX,STEP,
433
+ SD(21),SE(21),EL(9),ORG,FIX
435
DOUBLE PRECISION XC,RC,Q,X41,X24,XC1,XC2,XC4,X,A,B,IP,DB,ORG(6)
436
DIMENSION XC(N),RC(M),XX(9)
439
F(X) = A*DLOG10(X-XC1) + B*DLOG10(XC2-X)
441
IF(FIX(I)) XC(I)=ORG(I)
449
IF(XC1.GT.DB*.1) GOTO 3
450
IF(X41.GT.0.D0.AND.X24.GT.0.D0) GOTO 4
459
CALL INTRING(XC,I,IP,IFL)
460
IF(IFL.EQ..TRUE.) RETURN
461
1 RC(I) = ( DLOG10(IP) + EL(I) + XC(5) ) * WT(I)
465
IF(X.GT.XC1.AND.X.LT.XC2) GOTO 2
467
2 RC(I+NR) = ( F(X) - SE(I) +XC(6) ) * WT(I+NR)
471
CALL SXTPUT('IFL=.TRUE. FROM RESID',STAT)
476
SUBROUTINE LSQ(M,N,XC,RC,AJTJC,GC)
477
C CALCULATES THE JACOBIAN RC AT XC
479
DOUBLE PRECISION XC,RC,AJTJC,GC,AJC,SUM,DELTA,DELTA2,XJ,YFIT
480
DIMENSION XC(N),RC(M),GC(N),AJTJC(N,N),AJC(30,6),YFIT(30)
482
PARAMETER (DELTA=.001D0)
483
PARAMETER (DELTA2=.002D0)
484
C NON ANALYTICAL DERIVATIVE
488
CALL RESID(M,N,XC,RC,IFL)
492
CALL RESID(M,N,XC,RC,IFL)
494
2 AJC(I,J)=(YFIT(I)-RC(I))/DELTA2
499
SUM=SUM+AJC(K,I)*RC(K)
506
SUM=SUM+AJC(K,I)*AJC(K,J)
515
SUBROUTINE MONIT(M,N,XC,RC,FC,GC,NCALL)
517
C PRINTS THE VALUES EVERY PRINT ITERATIONS
518
COMMON /DENS/ID(4096,9),MAXD,NR,WT(30),NS,DB,SM,A,B,XX,STEP
519
DOUBLE PRECISION XC,GC,RC,FC,DB,A,B
520
DIMENSION XC(N),GC(N),RC(M),R(30),XX(9)
521
CHARACTER*3 CALL,RIN,SPO
523
CHARACTER*72 CALIB,RESIDS
524
WRITE(CALL,200) NCALL
528
CALL SXTPUT('AFTER'//CALL//' CALLS OF RESID, THE SUM OF
529
+ SQUARES IS '//SSQ//' AT',STAT)
530
CALL SXTPUT(' DF DS A B CM
537
C scale intensities to sky units through adjusting XX(5)
540
WRITE(6,*) ' SKYBGR < FOG!'
543
S=A*ALOG10(S-XX(1))+B*ALOG10(XX(2)-S)+XX(5)
545
C sky magnitude/20 micron aperture
547
XX(6)=-2.5*(S - 2.*ALOG10(STEP/20.))
553
WRITE(CALIB,202) (XX(I),I=1,8)
555
CALL SXTPUT(CALIB,STAT)
558
CALL SXTPUT('WITH RESIDUES OF'//RIN//' RINGS AND'
559
+//SPO//' SPOTS',STAT)
564
WRITE(RESIDS,202) (R(I), I=1,NR)
565
CALL SXTPUT(RESIDS,STAT)
571
WRITE(RESIDS,202) (R(I), I=I1,I2)
572
20 CALL SXTPUT(RESIDS,STAT)
578
SUBROUTINE INTRING(X,IR,IP,IFL)
580
C computes integrated intensities in rings
581
COMMON /DENS/ID(4096,9),MAXD,NR,WT(30),NS,DB,SM,A,B
582
DOUBLE PRECISION X(6),A,B,DB,DF,DF1,DS,DS1,DK,DI,IP,IB,IT
585
IF(MAXD.EQ.4096) THEN
594
IF(DB.GT.DF1.AND.DB.LT.DS1) GOTO 4
596
4 IB = (DB-DF)**A * (DS-DB)**B
602
IF(DK.GT.DF1.AND.DK.LT.DS1) GOTO 3
604
3 IT = (DK-DF)**A * (DS-DK)**B
605
IP = IP + (IT-IB)*FLOATJ(II)
608
IF(IP.GT.0.D0) RETURN
610
CALL SXTPUT('IFL=.TRUE. FROM INTRING',STAT)
615
SUBROUTINE INTEGR(NDIM,AA,STARTA,STEPA,NPIXA,CEN,RADA,NA)
617
C calculates distribution of densities in ring-shaped regions
618
COMMON /DENS/ID(4096,9),MAXD
619
REAL AA(NDIM),STARTA(2),STEPA(2),CEN(2),RADA(9),RAD2(9)
620
INTEGER NPIXA(2),NUMR(9)
630
C put restrictions on max region to search
639
J1=(Y1-STARTA(2))/STEPA(2) -S
640
J2=(Y2-STARTA(2))/STEPA(2) +S +2.
642
IF(J2.GT.NPIXA(2)) J2=NPIXA(2)
644
Y1=STARTA(2)+(J1-1)*STEPA(2)
645
I1=(X1-STARTA(1))/STEPA(1) -S
646
I2=(X2-STARTA(1))/STEPA(1) +S +2.
648
IF(I2.GT.NPIXA(1)) I2 = NPIXA(1)
650
X1=STARTA(1)+(I1-1)*STEPA(1)
653
LOC=(J-1)*NPIXA(1)+I1
659
IF(D2.GT.RAD2(IR)) GOTO 4
662
C form distribution of densities in ringshaped regions
663
ID(IL,IR)=ID(IL,IR)+1
670
C refine radii considering actual no of pixels
674
NUMR(I)=NUMR(I)+NUMR(J)
679
RADA(I)=SQRT(NUMR(I)/3.141592)*STEPA(1)
684
SUBROUTINE POLY ( T,C,LOGA,MEL,SEL,NA )
685
C compute magnitudes MEL and mean surface brightess SEL
688
REAL C(1),MEL(NA),SEL(NA),LOGA(9)
693
C(14)=-0.3456+C(20)*2.2502
694
C(15)=-0.0344+C(21)*2.1358
695
C(16)= 0.0451+C(22)*2.1070
696
C(17)=-0.0143+C(23)*2.0661
698
MEL(I)=C(2)+C(14) + X*(C(3)+C(15) + X*(C(4)+C(16) +
700
ELSE IF(T.EQ.'R') THEN
702
C(20)= 0.1536+C(14)*0.4444
703
C(21)= 0.0161+C(15)*0.4682
704
C(22)=-0.0214+C(16)*0.4746
705
C(23)= 0.0069+C(17)*0.4840
707
MEL(I)=C(2)-C(20) + X*(C(3)-C(21) + X*(C(4)-C(22) +
709
ELSE IF(T.EQ.'U') THEN
710
MEL(I)=C(2)+C(8)+C(14)+X*(C(3)+C(9)+C(15)+
711
+ X*(C(4)+C(10)+C(16)+X*(C(5)+C(11)+C(17))))
712
ELSE IF(T.EQ.'V') THEN
713
MEL(I)=C(2)+X*(C(3)+X*(C(4)+X*C(5)))
715
CALL SXTPUT(' LEADING CHAR MUST BE U, B, V or R !',STAT)
718
IF(I.NE.1.AND.MEL(I).LT.MEL(I1)) THEN
719
SEL(I)= MEL(I) +5.*X -0.262
720
+ -2.5*ALOG10(1.-10.**(-.4*(MEL(I1)-MEL(I))))
721
+ +2.5*ALOG10(1.-10.**(2.*(X1-X)))
723
SEL(I)=MEL(I) +5.*X -0.262