CGIS-CC.BCK CGIS-CC.BCK+BACKUP/BLOCK=2048 [...] [-]CGIS-CC.BCK/SAVE WEILAND  hI DV6.2 _BORNEO::  _BORNEO$DKB400: V6.2  w*[COBE_CC]AADIRBE_CC.TXT;1+, :. / h 4 - 0123KPWO 56{Qb7{Qb89G hHJ COBE Data Analysis Software - DIRBE C Library _____________________________________________ The five C routines in this library can be used to read the DIRBE Sky Maps (Annual Average Maps, Solar Elongation = 90 deg Maps, Galactic Plane Maps, Weekly Sky Maps) and the DCAF files. The library is designed to be used either in conjunction with the COBE Guest Investigator Software (CGIS) or as a separate package in IDL. If used with the CGIS package, the routine DIRBE_READ.PRO must be placed in the appropriate path (designated by the $CSRC variable defined in the UIDL.CSH or UIDL.COM files). Additionally, the STARTUP.PRO must be modified to run the LINKIMAGE file appropriate for your system. When these routines were developed they represented a significant increase in speed of the data ingest and memory management. Since then, the main IDL package has been upgraded to where the speed is almost comparable. We therefore recommend NOT USING this package unless running on "slower" machines with little memory.)ܦ CGIS-CC.BCK : [COBE_CC]AADIRBE_CC.TXT;1 \2 The programs in this library must be "linkimaged" to IDL. The IDL procedure DIRBE_READ.PRO acts as a front end to the C routines. Its usage is described in comments at the beginning of the program. Four template makefiles are provided, one each for SunOS, OpenVMS, OSF1, and VMS systems. Select the appropriate file and, if necessary, tailor it to your particular configuration by adjusting the path variables. Three link files are provided, one each for OpenVMS, OSF1, and UNIX. The purpose of the link file is to establish the IDL connection. Again, select and, if necessary, modify the appropriate link file to reflect your computing environment. You may need to consult the IDL Advanced Development Guide for help with "LINKIMAGE" on your particular operating system. NOTE: Due to inconsistent definitions of the BYTE and INTEGER types between IDL and C, you may encounter "incompatible pointer type" warnings at compilation time. The software has been tested. Correct data values were returned on the platforms used for testing, however those platforms may not behave exactly as yours does. If you suspect that invalid data are returned on your platform, please notify us. The programs in this library call FITSIO subroutines, which were developed by the High Energy Astrophysics Science Archive Research Center (HEASARC) at NASA Goddard Space Flight Center (http://heasarc.gsfc.nasa.gov/). In particular, the CFITSIO macro to the FORTRAN routines is used. Our tests were conducted with FITSIO version 4.0.4. The  CGIS-CC.BCK : [COBE_CC]AADIRBE_CC.TXT;1 FITSIO library is available by anonymous ftp from legacy.gsfc.nasa.gov in the fits_info/software/fitsio directory. REPEAT, the present version of this software uses the FORTRAN FITSIO library, with the now obsolete CFITSIO macro! We are upgrading this library to use the new CFITSIO package. An example of how the new programs should be is given in new_cfits_aaf.c. Compare this program to the old version (dirbe_aaf.c) to see the suggested changes. These programs require the IDLASTRO software package http://idlastro.gsfc.nasa.gov/homepage.html to be installed in your IDL pathway. If you do not already have this very usefull software package please install it. Your comments and suggestions are welcome. If you report installation difficulties or software bugs, other users will benefit from your experience. For assistance, please contact Dave Leisawitz at leisawitz@stars.gsfc.nasa.gov. Last revised: 29 July 1998 *[COBE_CC]AAF.H;1+, <. / h 4 - 0123KPWO 56 87 889G hHJ, CGIS-CC.BCK < [COBE_CC]AAF.H;1 #define MAXFIELDS 7 static struct fieldstr { char *name; int colnum; } ttype[] = { "Pixel_no", 1, "PSubPos", 2, "Time", 3, "Photomet", 4, "StdDev", 5, "WtNumObs", 6, "SumNRecs", 7 }; *[COBE_CC]COBE_OBS.H;1+, =. / h 4 - 0123KPWO 56-`7-`89G hHJ#define IDL_BARR_INI_NOP BASICARR_INI_NOP #define IDL_BARR_INI_ZERO BASICARR_INI_ZERO #define IDL_CHARA CHARA #define IDL_COMPLEX COMPLEX #define IDL_DELTMP DELTMP #define IDL_KW_CLEAN_ALL KW_CLEAN_ALL #define IDL_KW_PAR KW_PAR #define IDL_KW_ZERO KW_ZERO #define IDL_LONG LONG #define IDL_MessageErrno message #define IDL_MSG_LONGJMP MSG_LONGJMP #define IDL_M_NAMED_GENERIC M_NAMED_GENERIC #define IDL_STRING STRING #define IDL_STRING_STR STRING_STR #define IDL_TYP_BYTE TYP_BYTE #define IDL_TYP_COMPLEX TYP_COMp CGIS-CC.BCK = [COBE_CC]COBE_OBS.H;1 4PLEX #define IDL_TYP_DOUBLE TYP_DOUBLE #define IDL_TYP_FLOAT TYP_FLOAT #define IDL_TYP_INT TYP_INT #define IDL_TYP_LONG TYP_LONG #define IDL_TYP_STRING TYP_STRING #define IDL_UCHAR UCHAR #define IDL_ULONG ULONG #define IDL_VARIABLE VARIABLE #define IDL_V_NOT_SCALAR V_NOT_SCALAR #define IDL_VPTR VPTR #define IDL_Gettmp gettmp #define IDL_KWGetParams get_kw_params #define IDL_KWCleanup keyword_cleanup #define IDL_MakeTempArray make_temp_array #define IDL_StrStore str_store #define IDL_VarCopy var_copy #define IDL_KW_ARGS KW_ARGS #define IDL_SYSFUN_DEF SYSFUN_DEF #define IDL_FUN_RET FUN_RET #define IDL_MSG_INFO MSG_INFO #define IDL_AddSystemRoutine add_system_routine *[COBE_CC]DCAF.H;1+, >. / h 4 - 0123KPWO 56$87$889G hHJrc CGIS-CC.BCK > [COBE_CC]DCAF.H;1 #define MAXFIELDS 15 static struct fieldstr { char *name; int colnum; } ttype[] = { "Pixel_no", 1, "PSubPos", 2, "Displace", 3, "Time", 4, "DeltaT", 5, "SolElong", 6, "Photomet", 7, "Stokes", 8, "NumRecs", 9, "WtNumObs", 10, "StdDev", 11, "StokesSD", 12, "SSOFlag", 13, "FracUsed", 14, "StokQual", 15 }; 0*[COBE_CC]DIRBE_AAF.C;1+, ?./ h 4#- 0123KPWO56¼~7¼~89G hHJ/* program dirbe_aaf c This procedure will read the DIRBE Annual Averaged FITS c Skymaps. It uses the FITSIO library. This program should c be called from the IDL procedure DIRBE_READ.PRO */ #include "dirbe_inc.h" #include "aaf.h" static IDL_KW_PAR kwpar [1] = { { NULL } }; IDL_VARIABLE *dirbe_aaf(argc,argv,argk) int argc; IDL_VARIABLE *argv[]; char *argk; { char dataset[255]; char (*fpt) [FIELDSIZE],fieldname[255],fields [MAXFIELDS] [FIELDSIZE]; char comment[73]N CGIS-CC.BCK ? [COBE_CC]DIRBE_AAF.C;1i,errtxt[FITS_CLEN_ERRMSG]; int *enums,*nrecs,numargs,nfield,nret,numfield,fflag; int iunit,status,bitpix,naxis,naxes[99],pcount,gcount; int i,j,rwstat,bksize; int hdutyp,inull,n,colnum,felem,simple,extend,anyflg; short *psub,snull; IDL_LONG *pix,*srecs,dim[2],frow,nelmt,index; float enull,*phot,*sigma; double dnull,*time; IDL_VARIABLE *ret_dat[MAXFIELDS],*posargs[MAXFIELDS+2],*retpt,*dum; status=0; iunit=15; inull=0; snull=0; enull=0.; dnull=0.; frow=1; felem=1; /* define IDL interface stuff */ retpt = (IDL_VARIABLE *) IDL_Gettmp (); retpt->type = IDL_TYP_INT; numargs = IDL_KWGetParams (argc, argv, argk, kwpar, posargs, 1); IDL_KWCleanup (IDL_KW_CLEAN_ALL); if (posargs[0]->flags & IDL_V_NOT_SCALAR || posargs[0]->type != IDL_TYP_STRING) IDL_MessageErrno (IDL_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Invalid 'dataset' argument data type/class."); if (posargs[0]->value.str.slen == 0) { printf ("Enter File Name: "); scanf ("%s",dataset); } else strcpy (dataset, posargs[0]->value.str.s); if (posargs[1]->flags & IDL_V_NOT_SCALAR || posargs[1]->type != IDL_TYP_STRING) IDL_MessageErrno (IDL_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Invalid 'field' argument data type/class."); if (posargs[1]->value.str.slen == 0) { H{" CGIS-CC.BCK ? [COBE_CC]DIRBE_AAF.C;1X@ printf ("This file contains the following fields:\n"); for (index=0; index < MAXFIELDS; index++) printf (" %s \n",ttype[index].name); printf ("Enter Field Name as shown : "); scanf ("%s",fieldname); } else strcpy (fieldname, posargs[1]->value.str.s); fpt = fields; fpt++; nfield = getfields (MAXFIELDS, fieldname, fpt); if (nfield < 0) IDL_MessageErrno (IDL_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Only up to 7 fields may be specified."); nret = numargs - 2; if (nret < nfield) IDL_MessageErrno (IDL_M_NAMED_GENERIC, 0, IDL_MSG_LONGJMP, "There are not enough IDL IDL_VARIABLEs to return the fields requested."); nfield +=1; printf ("Reading Data file\n"); /*C open the existing FITS file with readonly access */ rwstat=0; FCOPEN(iunit, dataset, rwstat, &bksize, &status); FCGERR(status,errtxt); /*C read the required primary array keywords */ FCGHPR(iunit,99,&simple,&bitpix,&naxis,naxes,&pcount, &gcount,&extend,&status); FCGERR(status,errtxt); /*C now move to the next ASCII table extension */ FCMAHD(iunit,2,&hdutyp,&status); FCGERR(status,errtxt); /*C read a naxis2 and set row dimensions */ FCGKYJ(iunit,"NAXIS2",&nelmt,comment, &status); dim[0]=nelmt; for (numargs=0; numargs < nfield-1; numargs++) { fflag=0; nu y) CGIS-CC.BCK ? [COBE_CC]DIRBE_AAF.C;1mfield=0; strcpy(dataset,ttype[numfield].name); while (strcmp(strlwr(*fpt),strlwr(dataset)) && numfield < MAXFIELDS) { ++numfield; if (numfield != MAXFIELDS) strcpy(dataset,ttype[numfield].name); } if (numfield == MAXFIELDS) { colnum=99; fflag=1; printf("Entered an Illegal Field Name %s \n",fpt); } else colnum=ttype[numfield].colnum; switch (colnum) { case 1: pix = (IDL_LONG *) IDL_MakeTempArray(IDL_TYP_LONG,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVJ(iunit,colnum,frow,felem,dim[0],inull,pix,&anyflg,&status); FCGERR(status,errtxt); break; case 2: psub = (short *) IDL_MakeTempArray(IDL_TYP_INT,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVI(iunit,colnum,frow,felem,dim[0],snull,psub,&anyflg,&status); FCGERR(status,errtxt); break; case 3: time = (double *) IDL_MakeTempArray(IDL_TYP_DOUBLE,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVD(iunit,colnum,frow,felem,dim[0],dnull,time,&anyflg,&status); FCGERR(status,errtxt); break; case 4: phot = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVE(iunit,colnum,fro D7C CGIS-CC.BCK ? [COBE_CC]DIRBE_AAF.C;1a3 w,felem,dim[0],enull,phot,&anyflg,&status); FCGERR(status,errtxt); break; case 5: sigma = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVE(iunit,colnum,frow,felem,dim[0],enull,sigma,&anyflg,&status); FCGERR(status,errtxt); break; case 6: enums = (int *) IDL_MakeTempArray(IDL_TYP_LONG,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVJ(iunit,colnum,frow,felem,dim[0],inull,enums,&anyflg,&status); FCGERR(status,errtxt); break; case 7: srecs = (IDL_LONG *) IDL_MakeTempArray(IDL_TYP_LONG,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVJ(iunit,colnum,frow,felem,dim[0],inull,srecs,&anyflg,&status); FCGERR(status,errtxt); break; default: break; } fpt++; if (status <= 0 && fflag ==0) IDL_VarCopy(ret_dat[numargs],argv[numargs+2]); } /*C now close the table and quit */ FCCLOS(iunit,&status); FCGERR(status,errtxt); if (status <= 0 && fflag ==0) { retpt->value.i=1; puts ("*** Program completed successfully ***"); } else { /*C get the error text description */ FCGERR(status,errtxt); puts ("*** ERROR - program did not run successfully ***"); printf ("status = %d : %s\n", statu St ? [COBE_CC]FME-940-݅O33Cy75ZW 9dGcN;C]HEl K8g O8|  ' &C78DIIs7" meUe1O=(7?O: -Pjdw^Un%%E+k\W)9_&S>35ocofC[y3%0+.-jaRkb}`P\UmD?|L8*Kt@{k5i2w2q#BwTRRb?]tGz.{8/l2dn+dJ#xJ*,?4<2cMAPe)q1OF5Cj!TQU 35wy`?M\Z1)E(PkVYS(54wN]uF5-o!eQnyI.dB>\"uɛSzYGHZ%u%yd>E XxL%}O?8C . VF>.?^m=Y >ghe d4!<1"!wP;Z^Q%$i-Fb, bO@:~tgy~MKc,$(UAfwLq!q%?}i zlVw CE):&r0h0OT 3Uv3+~ aEr{88)^ 3 Z~VC}7IC,M*Y"0] v:Vx1y(4qAXC46:S7YxFOTPr/8;l|q'7y`k*Qssmz >I1GL>sTg? x 88 B(sD: :+I2qHDLWI[>>EL v|u-b+W!cYͷ}- {.r!EzS@ a~S5',?|z>ql&~!R|[GKbpLFmg ar$o!9\ ^@$"3}_@P[7B DI2P-N[@*(,7WN\L09V %-*%.^(pa'A={*+pK7,>E1)!G@CkJw:&3$7IDPPrT)9~X!J8|@;B<]Y,u,+#|z#znnMAFr:FAHyJb1~AJ*&JM2F[RvY0pQ{jwNrd_:CB/ DEIlvxV }-e :(mp<.(/a2mC ab^]Gb-O hVCUjOMQXaxTLO8t^Mo~:X13)2"$ZktzW^\f/]zB?P _H.&/Sv]$ ,s.mJ8 (cP{fa]&u/Z5r~ '"$czN^\k0#QR j!?Ya T`sa8~HvhL4p3HvdH0_ ]c+ k[S-.Ig~dKNjC5+\Q>;(ݚrOolO~4W}k T!v2#V7v =A`0+Fٷ]zBD5?Y #`$_QgN:t#4q=~A^-sNH5wJ XfsA*#"P/R%78pj:Ya LMBI3g.V.(S{@1!Zy^TT :VU-_zD<$)%Qiq~7ia/e(-8Hi%]DnK~a]9cHe'.iXoA E WZ7;^_E!Pcmf?`x!DK\>sZosy cwTTEuDUEh9:puob pr%'#p28HHZLgUkIGs\J)<]M+=tn1' o'4b;\]1c6f%{G%8s43!irzCMLbY[s)}~#bzEv adgjqw}YrSi[F3?{&7jAJ`v{> o-o   CGIS-CC.BCK ? [COBE_CC]DIRBE_AAF.C;1*s, errtxt); } return retpt; } *[COBE_CC]DIRBE_DCAF.C;1+,! A./ h 4f- 0123KPWO56$W7$W89G hHJ/* program dirbe_dcaf c This procedure will read the DIRBE DCAF FITS c Skymaps. It uses the FITSIO library. This program should c be called from the IDL procedure DIRBE_READ.PRO */ #include "dirbe_inc.h" #include "dcaf.h" static istart,istop; static IDL_KW_PAR kwpar [3] = { { "STARTPIXEL", IDL_TYP_LONG, 1, IDL_KW_ZERO, 0, IDL_CHARA(istart) }, { "STOPPIXEL", IDL_TYP_LONG, 1, IDL_KW_ZERO, 0, IDL_CHARA(istop) }, { NULL } }; IDL_VARIABLE *dirbe_dcaf(argc,argv,argk) i & CGIS-CC.BCK! A [COBE_CC]DIRBE_DCAF.C;1nt argc; IDL_VARIABLE *argv[]; char *argk; { char comment[73],dataset[255],indxf[255],errtxt[FITS_CLEN_ERRMSG]; char (*fpt) [FIELDSIZE],fieldname[255],fields [MAXFIELDS] [FIELDSIZE]; int iunit,status,bitpix,naxis,naxes[99],pcount,gcount; int junit,choice,i,j,rwstat,bksize,simple,extend,bandno; int hdutyp,inull,n[10],colnum,innum,felem,anyflg; int *enums,*nrecs,numargs,nfield,nret,numfield,fflag; short *stddev,*psub,*ssof,*stokq,*disp,snull,itemp; IDL_LONG *pix,*indpix,dim[2],dim2[2],dim3[2],frow,index,nelmt; IDL_LONG startpix,stoppix,startindex,stopindex,startrec,stoprec,numrec; float tscale,enull,*solel,*phot,*sigma,*deltat,*stoke,*fracu; double dnull,*time; IDL_VARIABLE *ret_dat[MAXFIELDS],*posargs[MAXFIELDS+2],*retpt,*dum; status=0; iunit=15; junit=16; inull=0; enull=0.; dnull=0.; snull=0; frow=1; felem=1; n[0]=4; n[1]=4; n[2]=4; n[3]=4; n[4]=3; n[5]=3; n[6]=2; n[7]=2; n[8]=0; n[9]=1; /* define tscale=1/2 bin = 0.5*360/(2**15-1) */ tscale=0.00549; /* define IDL interface stuff */ retpt = (IDL_VARIABLE *) IDL_Gettmp (); retpt->type = IDL_TYP_INT; numargs = IDL_KWGetParams (argc, argv, argk, kwpar, posargs, 1); IDL_KWCleanup (IDL_KW_CLEAN_ALL); if (posargs[0]->flags & IDL_V_NOT_SCALAR || posargs[0]->type != IDL_TYP_STRING) IDL_MessageErrno (ID$F@ CGIS-CC.BCK! A [COBE_CC]DIRBE_DCAF.C;1L_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Invalid 'dataset' argument data type/class."); if (posargs[0]->value.str.slen == 0) { printf ("Enter File Name: "); scanf ("%s",dataset); } else strcpy (dataset, posargs[0]->value.str.s); if (posargs[1]->flags & IDL_V_NOT_SCALAR || posargs[1]->type != IDL_TYP_STRING) IDL_MessageErrno (IDL_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Invalid 'field' argument data type/class."); if (posargs[1]->value.str.slen == 0) { printf ("This file contains the following fields:\n"); for (index=0; index < MAXFIELDS; index++) printf (" %s \n",ttype[index].name); printf ("Enter Field Name as shown : "); scanf ("%s",fieldname); } else strcpy (fieldname, posargs[1]->value.str.s); fpt = fields; fpt++; nfield = getfields (MAXFIELDS, fieldname, fpt); if (nfield < 0) IDL_MessageErrno (IDL_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Only up to 15 fields may be specified."); nret = numargs - 2; if (nret < nfield) IDL_MessageErrno (IDL_M_NAMED_GENERIC, 0, IDL_MSG_LONGJMP, "There are not enough IDL IDL_VARIABLEs to return the fields requested."); nfield +=1; /*C open the existing FITS file with readonly access */ rwstat=0; FCOPEN(iunit, dataset, rwstat, &bksize, &status); {8) CGIS-CC.BCK! A [COBE_CC]DIRBE_DCAF.C;1r FCGERR(status,errtxt); /*C read the required primary array keywords */ FCGHPR(iunit,99,&simple,&bitpix,&naxis,naxes,&pcount, &gcount,&extend,&status); FCGERR(status,errtxt); /* getting pixel index file */ printf ("Reading Pixel Index file\n"); FCOPEN(junit,getix(dataset),rwstat, &bksize, &status); FCGERR(status,errtxt); FCMAHD(junit,2,&hdutyp,&status); FCGERR(status,errtxt); FCGKYJ(junit,"NAXIS2",&nelmt,comment, &status); dim[0]=nelmt; innum=1; indpix = (IDL_LONG *) IDL_MakeTempArray(IDL_TYP_LONG,1,dim, IDL_BARR_INI_ZERO,&dum); FCGCVJ(junit,innum,frow,felem,nelmt,inull,indpix,&anyflg,&status); FCGERR(status,errtxt); if (istart == 0 ) { printf ("Enter Start pixel number: "); scanf ("%d",&startpix); } else startpix = istart; if (istop == 0 ) { printf ("Enter Last pixel number: "); scanf ("%d",&stoppix); } else stoppix = istop; for (index=0; index < nelmt; index++) if (indpix[index] == startpix) break; startindex=index; for (index=startindex; index < nelmt; index++) if (indpix[index] == stoppix) break; stopindex=index; innum=2; nelmt=1; frow=startindex+1l; FCGCVJ(junit,innum,frow,felem,nelmt,inull,&startrec,&anyflg,&status); FCGERR(stap\ CGIS-CC.BCK! A [COBE_CC]DIRBE_DCAF.C;1f tus,errtxt); frow=stopindex+2l; FCGCVJ(junit,innum,frow,felem,nelmt,inull,&stoprec,&anyflg,&status); FCGERR(status,errtxt); numrec=stoprec-startrec; IDL_DELTMP(dum); FCCLOS(junit,&status); FCGERR(status,errtxt); /* end index file */ /*C now move to the next ASCII table extension */ FCMAHD(iunit,2,&hdutyp,&status); FCGERR(status,errtxt); printf ("Reading Data file\n"); for (numargs=0; numargs < nfield-1; numargs++) { fflag=0; numfield=0; strcpy(dataset,ttype[numfield].name); while (strcmp(strlwr(*fpt),strlwr(dataset)) && numfield < MAXFIELDS) { ++numfield; if (numfield != MAXFIELDS) strcpy(dataset,ttype[numfield].name); } if (numfield == MAXFIELDS) { colnum=99; fflag=1; printf("Entered an Illegal Field Name %s \n",fpt); } else colnum=ttype[numfield].colnum; frow=startrec; nelmt=numrec; dim[0]=nelmt; dim2[0]=10; dim2[1]=nelmt; dim3[0]=6; dim3[1]=nelmt; switch (colnum) { case 1: pix = (IDL_LONG *) IDL_MakeTempArray(IDL_TYP_LONG,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVJ(iunit,colnum,frow,felem,dim[0],inull,pix,&anyflg,&status); FCGERR(status,errtxt); break; case 2: _ + CGIS-CC.BCK! A [COBE_CC]DIRBE_DCAF.C;12 psub = (short *) IDL_MakeTempArray(IDL_TYP_INT,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVI(iunit,colnum,frow,felem,dim[0],snull,psub,&anyflg,&status); FCGERR(status,errtxt); break; case 3: dim2[0]=4; disp = (short *) IDL_MakeTempArray(IDL_TYP_INT,2,dim2, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVI(iunit,colnum,frow,felem,dim2[0]*dim2[1],snull,disp,&anyflg,&status); FCGERR(status,errtxt); break; case 4: time = (double *) IDL_MakeTempArray(IDL_TYP_DOUBLE,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVD(iunit,colnum,frow,felem,dim[0],dnull,time,&anyflg,&status); FCGERR(status,errtxt); break; case 5: deltat = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,2,dim2, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVE(iunit,colnum,frow,felem,dim2[0]*dim2[1],enull,deltat,&anyflg,&status); FCGERR(status,errtxt); for (frow = 0; frow < dim2[0]*dim2[1] ; frow++) { if (deltat[frow] < 128*4725.) deltat[frow] += 0.5*4725.; else deltat[frow] -= 255.5*4725.; } break; case 6: solel = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,1,dim, IDL_BARR_INI_ZERO,&ret_dai CGIS-CC.BCK! A [COBE_CC]DIRBE_DCAF.C;1_t[numargs]); FCGCVE(iunit,colnum,frow,felem,dim[0],enull,solel,&anyflg,&status); FCGERR(status,errtxt); for (frow = 0; frow < dim[0] ; frow++) solel[frow] += tscale; break; case 7: phot = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,2,dim2, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVE(iunit,colnum,frow,felem,dim2[0]*dim2[1],enull,phot,&anyflg,&status); FCGERR(status,errtxt); break; case 8: stoke = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,2,dim3, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVE(iunit,colnum,frow,felem,dim3[0]*dim3[1],enull,stoke,&anyflg,&status); FCGERR(status,errtxt); break; case 9: nrecs = (int *) IDL_MakeTempArray(IDL_TYP_INT,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVI(iunit,colnum,frow,felem,dim[0],inull,nrecs,&anyflg,&status); FCGERR(status,errtxt); break; case 10: enums = (int *) IDL_MakeTempArray(IDL_TYP_INT,2,dim2, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVI(iunit,colnum,frow,felem,dim2[0]*dim2[1],inull,enums,&anyflg,&status); FCGERR(status,errtxt); break; case 11: stddev = (short *) IDL_MakeTempArray(IDL_TYP_INT,2,dim2, IDL_BARR_INI_ZERO,&dum)nJ] CGIS-CC.BCK! A [COBE_CC]DIRBE_DCAF.C;1A; FCGCVI(iunit,colnum,frow,felem,dim2[0]*dim2[1],snull,stddev,&anyflg,&status); FCGERR(status,errtxt); sigma = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,2,dim2, IDL_BARR_INI_ZERO,&ret_dat[numargs]); for (frow = 0; frow < dim2[1] ; frow++) { for (bandno = 0; bandno < dim2[0]; bandno++) { index=bandno + frow*dim2[0]; itemp = *(stddev+index); if (itemp == 0) *(sigma+index) = pow(10.,0.-n[bandno]); else if (itemp == 255) *(sigma+index) = pow(10.,4-n[bandno]); else *(sigma+index) = pow(10.,(itemp-0.5)/63.5-n[bandno]); } } IDL_DELTMP(dum); break; case 12: stddev = (short *) IDL_MakeTempArray(IDL_TYP_INT,2,dim3, IDL_BARR_INI_ZERO,&dum); FCGCVI(iunit,colnum,frow,felem,dim3[0]*dim3[1],snull,stddev,&anyflg,&status); FCGERR(status,errtxt); sigma = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,2,dim3, IDL_BARR_INI_ZERO,&ret_dat[numargs]); for (frow = 0; frow < dim3[0]*dim3[1] ; frow++) { itemp = *(stddev+frow); if (itemp == 0) *(sigma+frow) = 0.0001; else if (itemp == 255) *(sigma+frow) = 1.; else $ CGIS-CC.BCK! A [COBE_CC]DIRBE_DCAF.C;1M *(sigma+frow) = pow(10.,(itemp-0.5)/63.5-4); } IDL_DELTMP(dum); break; case 13: ssof = (short *) IDL_MakeTempArray(IDL_TYP_INT,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVI(iunit,colnum,frow,felem,dim[0],snull,ssof,&anyflg,&status); FCGERR(status,errtxt); break; case 14: dim2[0]=3; fracu = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,2,dim2, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVE(iunit,colnum,frow,felem,dim2[0]*dim2[1],enull,fracu,&anyflg,&status); FCGERR(status,errtxt); break; case 15: stokq = (short *) IDL_MakeTempArray(IDL_TYP_INT,2,dim3, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVI(iunit,colnum,frow,felem,dim3[0]*dim3[1],snull,stokq,&anyflg,&status); FCGERR(status,errtxt); break; default: break; } fpt++; if (status <= 0 && fflag ==0) IDL_VarCopy(ret_dat[numargs],argv[numargs+2]); } /*C now close the table and quit */ FCCLOS(iunit,&status); FCGERR(status,errtxt); if (status <= 0 && fflag ==0) { retpt->value.i=1; puts ("*** Program completed successfully ***"); } else { /*C get the error text description */ FCGERR(status,errtxt); puts ("*** ERROR - program did no CGIS-CC.BCK! A [COBE_CC]DIRBE_DCAF.C;1t run successfully ***"); printf ("status = %d : %s\n", status, errtxt); } return retpt; } *[COBE_CC]DIRBE_E90.C;1+," B./ h 4- 0123KPWO56W7W89G hHJ/* program dirbe_e90 c This procedure will read the DIRBE Elongation 90 FITS c Skymaps. It uses the FITSIO library. This program should c be called from the IDL procedure DIRBE_READ.PRO */ #include "dirbe_inc.h" #include "e90.h" static IDL_KW_PAR kwpar [1] = { { NULL } }; IDL_VARIABLE *dirbe_e90(argc,argv,argk) int argc; IDL_VARIABLE *argv[]; char *argk; { char dataset[255]; char (*fpt) [FIELDSIZE],fieldname[255],fields [MAXFIELDS] [FIELDSIZE]; char comment[73],er,~hmx 1 qB >#"'{2k,0Qx!>h;EcUgtI<#8pEI !x9: [ $|as< O/hXvh3 K{kVu(GK Jh_f| A $9 `u|sGvfH fan-c~m2+0KAe>KT ' :, :oCX1_#XSECE`o/4Z"9 T$n[r1z>?rq6p0XH c(>iI M(yO#_&[mӆOvXVP۽*nk*;im!{.hF Inm}+jfG>{%$BGX [X*3 #%h"x?!<8yx5@iX4;W?Pufz=]AG $}3%w]@f f&xR dUNbzKSY2h_J|=YDC>6"vIyfrK9oqcGY9:k4)(U3 RK>t5}I@CPbls Q bm)CFjA%@)J J{^pn65Zt *M^xj VZzWJG|]#^yg`<, 8:Zp^~go:j4;;yHDnPK G86e?z~R q7K *oZ^k_of94|1/r u Q'82GQnH*{ns SWAW3~YcWG /7B=^{9xV;Jjo 4+CIayUIr;ugrwD^*( y1/kKntGca{D.?#+rG*t=]"8[~666u}Je1V %qPV\aiKVX\5 Rft}s Q<p>(IQT"h6Xj$X7bxb!^{x]/_|#2+Ju>OU~ziEt-bpG{EZ3>1GYYUu)p-T:wOWZjxNx^2 M P z\wd3} .sw'q,tO[I>}y(>Bb~ an6^b.fNJZg"1Ng;gJ5vxev3"="=XZW~~}$>k!],Ng%3M\<2#d 3 IkSEbw*n!#7sjk'+7 C _}IT\LgXy QL$|Qim2 Dw#%5?F$~7)aeS DfEJhxua 5b <mDL,`2 s) *i WEtype = IDL_TYP_INT; numargs = IDL_KWGetParams (argc, argv, argk, kwpar, posargs, 1); IDL_KWCleanup (IDL_KW_CLEAN_ALL); if (posargs[0]->flags & IDL_V_NOT_SCALAR || posargs[0]->type != IDL_TYP_STRING) IDL_MessageErrno (IDL_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Invalid 'dataset' argument data type/class."); if (posargs[0]->value.str.slen == 0) { printf ("Enter File Name: "); scanf ("%s",dataset); } else strcpy (dataset, posargs[0]->value.str.s); if (posargs[1]->flags & IDL_V_NOT_SCALAR || posargs[1]->type != IDL_TYP_STRING) IDL_MessageErrno (IDL_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Invalid 'field' argument data type/class."); if (posargs[1]->value.str.slen H& CGIS-CC.BCK" B [COBE_CC]DIRBE_E90.C;1== 0) { printf ("This file contains the following fields:\n"); for (index=0; index < MAXFIELDS; index++) printf (" %s \n",ttype[index].name); printf ("Enter Field Name as shown : "); scanf ("%s",fieldname); } else strcpy (fieldname, posargs[1]->value.str.s); fpt = fields; fpt++; nfield = getfields (MAXFIELDS, fieldname, fpt); if (nfield < 0) IDL_MessageErrno (IDL_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Only up to 7 fields may be specified."); nret = numargs - 2; if (nret < nfield) IDL_MessageErrno (IDL_M_NAMED_GENERIC, 0, IDL_MSG_LONGJMP, "There are not enough IDL IDL_VARIABLEs to return the fields requested."); nfield +=1; printf ("Reading Data file\n"); /*C open the existing FITS file with readonly access */ rwstat=0; FCOPEN(iunit, dataset, rwstat, &bksize, &status); FCGERR(status,errtxt); /*C read the required primary array keywords */ FCGHPR(iunit,99,&simple,&bitpix,&naxis,naxes,&pcount, &gcount,&extend,&status); FCGERR(status,errtxt); /*C now move to the next ASCII table extension */ FCMAHD(iunit,2,&hdutyp,&status); FCGERR(status,errtxt); /*C read a naxis2 and set row dimensions */ FCGKYJ(iunit,"NAXIS2",&nelmt,comment, &status); dim[0]=nelmt; for (numargs=0; numargs < nfield-1; numargs++) {Qg/l CGIS-CC.BCK" B [COBE_CC]DIRBE_E90.C;1x# fflag=0; numfield=0; strcpy(dataset,ttype[numfield].name); while (strcmp(strlwr(*fpt),strlwr(dataset)) && numfield < MAXFIELDS) { ++numfield; if (numfield != MAXFIELDS) strcpy(dataset,ttype[numfield].name); } if (numfield == MAXFIELDS) { colnum=99; fflag=1; printf("Entered an Illegal Field Name %s \n",fpt); } else colnum=ttype[numfield].colnum; switch (colnum) { case 1: pix = (IDL_LONG *) IDL_MakeTempArray(IDL_TYP_LONG,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVJ(iunit,colnum,frow,felem,dim[0],inull,pix,&anyflg,&status); FCGERR(status,errtxt); break; case 2: time = (double *) IDL_MakeTempArray(IDL_TYP_DOUBLE,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVD(iunit,colnum,frow,felem,dim[0],dnull,time,&anyflg,&status); FCGERR(status,errtxt); break; case 3: phot = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVE(iunit,colnum,frow,felem,dim[0],enull,phot,&anyflg,&status); FCGERR(status,errtxt); break; case 4: enums = (int *) IDL_MakeTempArray(IDL_TYP_LONG,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); z CGIS-CC.BCK" B [COBE_CC]DIRBE_E90.C;1 FCGCVJ(iunit,colnum,frow,felem,dim[0],inull,enums,&anyflg,&status); FCGERR(status,errtxt); break; case 5: stddev = (short *) IDL_MakeTempArray(IDL_TYP_INT,1,dim, IDL_BARR_INI_ZERO,&dum); sigma = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVI(iunit,colnum,frow,felem,dim[0],snull,stddev,&anyflg,&status); FCGERR(status,errtxt); n=3; if (bandno > 8) n=1; if (bandno == 5) n=4; if (bandno == 6) n=4; if (bandno <= 8) { colnum=3; phot = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,1,dim, IDL_BARR_INI_ZERO,&dumer); FCGCVE(iunit,colnum,frow,felem,dim[0],enull,phot,&anyflg,&status); FCGERR(status,errtxt); } for (frow = 0; frow < nelmt; frow++) { if (stddev[frow] == 0) sigma[frow] = pow(10.,0.-n); else if (stddev[frow] == 255) sigma[frow] = pow(10.,4-n); else sigma[frow] = pow(10.,(stddev[frow]-0.5)/63.5-n); if (bandno <= 8) sigma[frow]*=fabs(phot[frow]); } break; IDL_DELTMP(dum); if (bandno <= 8) IDL_DELTMP(dumer);  CGIS-CC.BCK" B [COBE_CC]DIRBE_E90.C;1AP case 6: fitq = (short *) IDL_MakeTempArray(IDL_TYP_INT,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVI(iunit,colnum,frow,felem,dim[0],snull,fitq,&anyflg,&status); FCGERR(status,errtxt); break; case 7: fitchi = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVE(iunit,colnum,frow,felem,dim[0],snull,fitchi,&anyflg,&status); FCGERR(status,errtxt); break; default: break; } fpt++; if (status <= 0 && fflag ==0) IDL_VarCopy(ret_dat[numargs],argv[numargs+2]); } /*C now close the table and quit */ FCCLOS(iunit,&status); FCGERR(status,errtxt); if (status <= 0 && fflag ==0) { retpt->value.i=1; puts ("*** Program completed successfully ***"); } else { /*C get the error text description */ FCGERR(status,errtxt); puts ("*** ERROR - program did not run successfully ***"); printf ("status = %d : %s\n", status, errtxt); } return retpt; } F CGIS-CC.BCK# C [COBE_CC]DIRBE_GPM.C;1*[COBE_CC]DIRBE_GPM.C;1+,# C./ h 40- 0123KPWO56Q*W7Q*W89G hHJ/* program dirbe_gpm c This procedure will read the DIRBE Galactic Plane FITS c Skymaps. It uses the FITSIO library. This program should c be called from the IDL procedure DIRBE_READ.PRO */ #include "dirbe_inc.h" #include "gpm.h" static IDL_KW_PAR kwpar [1] = { { NULL } }; IDL_VARIABLE *dirbe_gpm(argc,argv,argk) int argc; IDL_VARIABLE *argv[]; char *argk; { char dataset[255],version[73]; char (*fpt) [FIELDSIZE],fieldname[255],fields [MAXFIELDS] [FIELDSIZE]; int *enums,*nrecs,numargs,nfield,nret,numfield,fflag; char comment[73],errtxt[FITS_CLEN_ERRMSG]; int iunit,status,bitpix,naxis,naxes[99],pcount,gcount; int choice,i,j,rwstat,bksize; int hdutyp,inull,n,colnum,felem; int simple,extend,anyflg,bandno; short *stddev,snull; unsigned int itemp,*pqual; IDL_LONG *pix,dim[2],dim2[2],frow,index,nelmt; float tscale,enull,*phot,*sigma; float *elon,*elat,*glon,*glat; double dnull,*time; IDL_VARIABLE *ret_dat[MAXFIELDS],*posargs[MAXFIELDS+2],*retpt,*duK CGIS-CC.BCK# C [COBE_CC]DIRBE_GPM.C;1`m,*dumer; status=0; iunit=15; inull=0; enull=0.; dnull=0.; snull=0; frow=1; felem=1; /* define tscale=1/2 bin = 0.5*360/(2**15-1) */ tscale=0.0054933; /* define IDL interface stuff */ retpt = (IDL_VARIABLE *) IDL_Gettmp (); retpt->type = IDL_TYP_INT; numargs = IDL_KWGetParams (argc, argv, argk, kwpar, posargs, 1); IDL_KWCleanup (IDL_KW_CLEAN_ALL); if (posargs[0]->flags & IDL_V_NOT_SCALAR || posargs[0]->type != IDL_TYP_STRING) IDL_MessageErrno (IDL_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Invalid 'dataset' argument data type/class."); if (posargs[0]->value.str.slen == 0) { printf ("Enter File Name: "); scanf ("%s",dataset); } else strcpy (dataset, posargs[0]->value.str.s); if (posargs[1]->flags & IDL_V_NOT_SCALAR || posargs[1]->type != IDL_TYP_STRING) IDL_MessageErrno (IDL_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Invalid 'field' argument data type/class."); if (posargs[1]->value.str.slen == 0) { printf ("This file contains the following fields:\n"); for (index=0; index < MAXFIELDS; index++) printf (" %s \n",ttype[index].name); printf ("Enter Field Name as shown : "); scanf ("%s",fieldname); } else strcpy (fieldname, posargs[1]->value.sM CGIS-CC.BCK# C [COBE_CC]DIRBE_GPM.C;1+tr.s); fpt = fields; fpt++; nfield = getfields (MAXFIELDS, fieldname, fpt); if (nfield < 0) IDL_MessageErrno (IDL_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Only up to 8 fields may be specified."); nret = numargs - 2; if (nret < nfield) IDL_MessageErrno (IDL_M_NAMED_GENERIC, 0, IDL_MSG_LONGJMP, "There are not enough IDL IDL_VARIABLEs to return the fields requested."); nfield +=1; printf ("Reading Data file\n"); /*C open the existing FITS file with readonly access */ rwstat=0; FCOPEN(iunit, dataset, rwstat, &bksize, &status); FCGERR(status,errtxt); /*C read the required primary array keywords */ FCGHPR(iunit,99,&simple,&bitpix,&naxis,naxes,&pcount, &gcount,&extend,&status); FCGERR(status,errtxt); /*C test for processing version */ FCGKYS(iunit,"VERSION",version,comment, &status); FCGERR(status,errtxt); /*C now move to the next ASCII table extension */ FCMAHD(iunit,2,&hdutyp,&status); FCGERR(status,errtxt); /*C read a naxis2 and set row dimensions */ FCGKYJ(iunit,"NAXIS2",&nelmt,comment, &status); dim[0]=nelmt; dim2[0]=10; dim2[1]=nelmt; for (numargs=0; numargs < nfield-1; numargs++) { fflag=0; numfield=0; strcpy(dataset,ttype[numfield].name); while (strcmp(strlwr(*fpt),strlwr(dataset)) && numfield W CGIS-CC.BCK# C [COBE_CC]DIRBE_GPM.C;1 < MAXFIELDS) { ++numfield; if (numfield != MAXFIELDS) strcpy(dataset,ttype[numfield].name); } if (numfield == MAXFIELDS) { colnum=99; fflag=1; printf("Entered an Illegal Field Name %s \n",fpt); } else colnum=ttype[numfield].colnum; switch (colnum) { case 1: pix = (IDL_LONG *) IDL_MakeTempArray(IDL_TYP_LONG,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVJ(iunit,colnum,frow,felem,dim[0],inull,pix,&anyflg,&status); FCGERR(status,errtxt); break; case 2: phot = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,2,dim2, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVE(iunit,colnum,frow,felem,dim2[0]*dim2[1],enull,phot,&anyflg,&status); FCGERR(status,errtxt); break; case 3: stddev = (short *) IDL_MakeTempArray(IDL_TYP_INT,2,dim2, IDL_BARR_INI_ZERO,&dum); FCGCVI(iunit,colnum,frow,felem,dim2[0]*dim2[1],snull,stddev,&anyflg,&status); FCGERR(status,errtxt); printf ("You can choose either: \n"); printf (" Standard Deviation (1) \n"); printf (" Quality flag (2) \n"); printf ("Enter Choice (1 or 2): "); scanf ("%d",&choice); if (choice == 2) { pqual =  ɛ CGIS-CC.BCK# C [COBE_CC]DIRBE_GPM.C;1y (unsigned int *) IDL_MakeTempArray(IDL_TYP_LONG,2,dim2, IDL_BARR_INI_ZERO,&ret_dat[numargs]); for (frow = 0; frow < dim2[0]*dim2[1]; frow++) { itemp = *(stddev+frow)/256; *(pqual+frow) = *(stddev+frow) - itemp*256; } IDL_DELTMP(dum); break; } else { sigma = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,2,dim2, IDL_BARR_INI_ZERO,&ret_dat[numargs]); colnum=2; phot = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,2,dim2, IDL_BARR_INI_ZERO,&dumer); FCGCVE(iunit,colnum,frow,felem,dim2[0]*dim2[1],enull,phot,&anyflg,&status); FCGERR(status,errtxt); for (bandno = 0; bandno < dim2[0]; bandno++) { n=3; if (bandno >= 8) n=1; if (bandno == 4) n=4; if (bandno == 5) n=4; for (frow = 0; frow < dim2[1] ; frow++) { index=bandno + frow*dim2[0]; itemp = *(stddev+index)/256; if (itemp == 0) *(sigma+index) = pow(10.,0.-n); else if (itemp == 255) *(sigma+index) = pow(10.,4-n); else *(sigma+index) = pow(10.,(itemp-0.5)/63.5-n); if (!0fi} a? I P}/fc:p[@{x+ SXza>lQdA%)w^*pi)iuycPW@eCr[f )nZ,F35}q[#TX;!qZ G1#6+* Lf#dJ*qwyRLX"p@ $0oo LWIvhq=B$>LxkY /J KL$8,Ao%6r._@555rthGxpX$`kIr6h$dB.B_XqFLZm(&{icJ pl{9h' xmO#f6XkDLt `kPA[TPmM,SUNjjK[!YFZ ?.a9G:<C 01UyKzMLX,XT#@`0_2D&N7J 6yw/MZ OrD/rPoh_>9. y+mW!o$Pi =,}6shfb]6N{zV >zHSW$|?{JebYW, QD|7R#WOF[k 2+ 4i1"MggoT_ak1(wp< [{K-Ju ;eDI'fNK{ywW@9WKYg'(;^Wbha\r4K|L;v`f$(+q Bx^Tz5Y_XX>x4h }HVM|RVjz;hFV." T-.IB [Wj$=pWv2n=|q=vig-Dn9SZNj@`vFKDc}:0@u%P<.0|q%b(M+)hfqr9]LL:X(zk ]  0@~P{q$Q+8!",2 CaX&bz@,K)KFN>n(jrBpi9dp53sN-#;t|WaXe PeHKG-Oe .:ISA% _~=rB^ z9"]F- t;e!LOU6yB0CcN%}U9 b%~.:w,}@e4V ^9pk58n8xk?0AGa^8GsesU o'zsil#kN B -V=j>nHmF/,)2C!\o!Dj HtE`iO5!}98 qB{p1xq~1.&(`A/wYhcA <>i]aa:d:-US>n$[6B@.kMM{UOlN  ljv8mUZR$feB7P-u>y6j(=q{h3B`TVc@4JUmXOT:CNX _D0r('5qQdUXu\ 6QU.L.? 3 vug8c ;6 qwbO6 Ss8RzEiA;;s8U0=O[UPa/Adspf&14R".G^o}9ko]M)dJoEFX+ceTP@:QUCE0Qx, 0~xiw p/)}bO<>+&FVXKP%VREN(ITtoP>&B`2&#p>~;:/ ;|cPf_+X^jKAFKy=z e\Y "_  CGIS-CC.BCK# C [COBE_CC]DIRBE_GPM.C;1 bandno < 8) *(sigma+index) *= fabs(*(phot+index)); } } IDL_DELTMP(dum); IDL_DELTMP(dumer); break; } case 4: time = (double *) IDL_MakeTempArray(IDL_TYP_DOUBLE,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVD(iunit,colnum,frow,felem,dim[0],dnull,time,&anyflg,&status); FCGERR(status,errtxt); break; case 5: elon = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVE(iunit,colnum,frow,felem,dim[0],enull,elon,&anyflg,&status); FCGERR(status,errtxt); if (strcmp(version,"Pass 2B") == 0) { for (frow = 0; frow < nelmt; frow++) { if (elon[frow] >= tscale*2.) elon[frow] += tscale; if (elon[frow] <= -(tscale*2)) elon[frow] -= tscale; } } break; case 6: elat = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVE(iunit,colnum,frow,felem,dim[0],enull,elat,&anyflg,&status); FCGERR(status,errtxt); if (strcmp(version,"Pass 2B") == 0) { for (frow = 0; frow < nelmt; frow++) { if (el#`Ζ CGIS-CC.BCK# C [COBE_CC]DIRBE_GPM.C;1tat[frow] >= tscale*2.) elat[frow]+=tscale; if (elat[frow] <= -(tscale*2)) elat[frow] -= tscale; } } break; case 7: glon = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVE(iunit,colnum,frow,felem,dim[0],enull,glon,&anyflg,&status); FCGERR(status,errtxt); if (strcmp(version,"Pass 2B") == 0) { for (frow = 0; frow < nelmt; frow++) { if (glon[frow] >= tscale*2.) glon[frow] += tscale; if (glon[frow] <= -(tscale*2)) glon[frow] -= tscale; } } break; case 8: glat = (float *) IDL_MakeTempArray(IDL_TYP_FLOAT,1,dim, IDL_BARR_INI_ZERO,&ret_dat[numargs]); FCGCVE(iunit,colnum,frow,felem,dim[0],enull,glat,&anyflg,&status); FCGERR(status,errtxt); if (strcmp(version,"Pass 2B") == 0) { for (frow = 0; frow < nelmt; frow++) { if (glat[frow] >= tscale*2.) glat[frow]+=tscale; if (glat[frow] <= -(tscale*2)) glat[frow] -= tscale; } } break; default: break; } fpt++; $ +X CGIS-CC.BCK# C [COBE_CC]DIRBE_GPM.C;1 if (status <= 0 && fflag ==0) IDL_VarCopy(ret_dat[numargs],argv[numargs+2]); } /*C now close the table and quit */ FCCLOS(iunit,&status); FCGERR(status,errtxt); if (status <= 0 && fflag ==0) { retpt->value.i=1; puts ("*** Program completed successfully ***"); } else { /*C get the error text description */ FCGERR(status,errtxt); puts ("*** ERROR - program did not run successfully ***"); printf ("status = %d : %s\n", status, errtxt); } return retpt; } *[COBE_CC]DIRBE_INC.H;1+,$ E. / h 4 - 0123KPWO 56[sw7[sw89G hHJ%V CGIS-CC.BCK$ E [COBE_CC]DIRBE_INC.H;1 ~}#include #include #include #include "fitsio.h" #include "export_wrap.h" #define FIELDSIZE 255 #define FITS_CLEN_ERRMSG 31 int getfields (int maxfld, char *fieldname, char (*fpt)[] ); char *strlwr(char *fieldname); char *getix(char *dataset); 5*[COBE_CC]DIRBE_READ.PRO;1+,% F. / h 4 - 0123KPWO 56k7k89G hHJpro dirbe_read,file=file,fields=fields,dt1,dt2,dt3,dt4,dt5,dt6,$ dt7,dt8,dt9,dt10,dt11,dt12,dt13,dt14,dt15,$ startpixel=startpixel,stoppixel=stoppixel ;+NAME/ONE LINE DESCRIPTION OF ROUTINE: ; DIRBE_READ provides user-friendly access to DIRBE FITS maps. ; ;DESCRIPTION: ; This IDL procedure reads in the various fields of the ; DIRBE Project Data Set FITS files. This is a shell around ; a number of linkimage'd C routines. If not supplied on the ; command line, the user is prompt&U CGIS-CC.BCK% F [COBE_CC]DIRBE_READ.PRO;1 zSed for the FITS data file ; name (including directory), and/or if missing a list of ; fields is displayed to choose from. The output from this ; procedure is the specified data lists. ; ;CALLING SEQUENCE: ; dirbe_read,[file=file],[fields=fields],dt1,[dt2,dt3,dt4...dt15], ; [,startpixel=startpixel] [,stoppixel=stoppixel] ; ;ARGUMENTS (I = input, O = output, [] = optional): ; [file] I str Skymap file ; [fields] I str Skymap data fields ; dt1,[dt2...dtn] O int/flt/dbl/cpx arr Returned data list(s) ; [startpixel] I long Valid only for DCAF ; [stoppixel] I long Valid only for DCAF ; ;WARNINGS: ; 1) The DIRBE PDS's may be very large and therefore use a ; significant amount of memory in IDL. The user should take ; care in choosing which and how many fields to read in. ; ; 2) This IDL procedure calls a C program which calls a FORTRAN ; subroutine. On some systems this sequence causes problems ; with pathways. When reading a file if it can not find your ; file with the specified path, you may have to change ; directories to the one in which the file is located and then ; simply read the filename, and then change back to your work ; directory. This can all be done within your IDL session. ; ;EXAMPLE: ; ; To read in the photometry and standard deviation for the DIRBE ; week 10 weekly averaged maps: ; IDL> file='path/dirbe_wk10_w'1ȟ CGIS-CC.BCK% F [COBE_CC]DIRBE_READ.PRO;1 eekly_averaged_skymap.fits' ; IDL> fields='photomet,stddev' ; IDL> dirbe_read,file=file,fields=fields,phot,stddev ; ; The output arrays, 'phot,stddev' will both have dimensions (10,208283). ; ;# ;COMMON BLOCKS: ; None ; ;PROCEDURE (AND OTHER PROGRAMMING NOTES): ; Gets FITS file name and check if file is proper format. ; Obtain the number of fields specified and build proper data string. ; Open FITS file and discern which DIRBE product it is. ; Call C functions to read data. ; Return data into specified arrays. ; ;PERTINENT ALGORITHMS, LIBRARY CALLS, ETC.: ; routines called: is_fits,headfits,sxpar ; C functions called: dirbe_aaf,dirbe_dcaf,dirbe_e90,dirbe_gpm, ; dirbe_wk ; ;MODIFICATION HISTORY ; Written by J.S. Newmark, Applied Research Corp. Sep 1995 ; ;.TITLE ;Routine DIRBE_READ ;- ; IF N_params() LT 1 THEN BEGIN print,'Syntax - dirbe_read,file=file,fields=fields,dt1,[dt2,dt3,dt4...dt15]' print,' [,startpixel=startpixel] [,stoppixel=stoppixel]' stat = 0 GOTO, abort ENDIF IF NOT KEYWORD_SET(file) THEN BEGIN file = '' read,'Enter file name: ',file ENDIF stat=is_fits(file) IF stat NE 1 THEN BEGIN PRINT,'Specified file is not a FITS file' GOTO, abort ENDIF n_flds = 1 IF (N_ELEMENTS(fields) NE 0) THEN BEGIN FOR i=0,STRLEN(fields)-1 DO $ IF (STRMID(fields,i,1) EQ ',') THEN n_flds = n_flds + 1 ENDIF ELSE fields='' data_str = '' dat_str = STRARR(8) FOR i=0,n_flds-1 DO BEGIN dat_str(i) = STRCOMPRESS('dt'(Q2 CGIS-CC.BCK% F [COBE_CC]DIRBE_READ.PRO;1 J + STRING(i+1),/remove_all) data_str = data_str + ',' + dat_str(i) ENDFOR IF KEYWORD_SET(startpixel) THEN $ data_str=data_str+',startpixel='+strtrim(startpixel,2) IF KEYWORD_SET(stoppixel) THEN $ data_str=data_str+',stoppixel='+strtrim(stoppixel,2) header =headfits(file) product = sxpar(header, 'PRODUCT') plen=strlen(strtrim(product)) print,'Reading product= ',product IF strtrim(product) EQ 'GPM' THEN $ status = EXECUTE('stat = dirbe_gpm(file,fields' + data_str + ')') IF strtrim(product) EQ 'DCAF' THEN $ status = EXECUTE('stat = dirbe_dcaf(file,fields' + data_str + ')') IF strmid(product,plen-3,3) EQ 'AAM' THEN $ status = EXECUTE('stat = dirbe_aaf(file,fields' + data_str + ')') IF strmid(product,plen-3,3) EQ 'E90' THEN $ status = EXECUTE('stat = dirbe_e90(file,fields' + data_str + ')') IF strmid(product,0,7) EQ 'WEEKMAP' THEN $ status = EXECUTE('stat = dirbe_wk(file,fields' + data_str + ')') abort: IF stat NE 1 THEN PRINT,'Program failed' end *[COBE_CC]DIRBE_WK.C;1+,& G./ h 4- 0123KPWO56W7W89G hHJ)0' CGIS-CC.BCK& G [COBE_CC]DIRBE_WK.C;1/* program dirbe_wk c This procedure will read the DIRBE Weekly Averaged FITS c Skymaps. It uses the FITSIO library. This program should c be called from the IDL procedure DIRBE_READ.PRO */ #include "dirbe_inc.h" #include "wk.h" static IDL_KW_PAR kwpar [1] = { { NULL } }; IDL_VARIABLE *dirbe_wk(argc,argv,argk) int argc; IDL_VARIABLE *argv[]; char *argk; { char dataset[255],version[73]; char (*fpt) [FIELDSIZE],fieldname[255],fields [MAXFIELDS] [FIELDSIZE]; char comment[73],errtxt[FITS_CLEN_ERRMSG]; int *enums,*nrecs,numargs,nfield,nret,numfield,fflag; int iunit,status,bitpix,naxis,naxes[99],pcount,gcount; int choice,i,j,rwstat,bksize,simple,extend,bandno; int hdutyp,inull,n[10],colnum,felem,anyflg; short *stddev,*psub,*ssof,*stokq,*disp,snull,itemp; IDL_LONG *pix,dim[2],dim2[2],dim3[2],frow,index,nelmt; float tscale,enull,*solel,*phot,*sigma,*deltat,*stoke,*fracu; double dnull,*time; IDL_VARIABLE *ret_dat[MAXFIELDS],*posargs[MAXFIELDS+2],*retpt,*dum; status=0; iunit=15; inull=0; enull=0.; dnull=0.; snull=0; frow=1; felem=1; n[0]=4; n[1]=4; n[2]=4; n[3]=4; n[4]=3; n[5]=3; n[6]=2; n[7]=2; n[8]=0; n[9]=1; /* define tscale=1/2 bin = 0.5*360/(2**15-1) */ tscale=0.00549; /* define IDL interface stuff */ retpt = (IDL_VARIABLE *) IDL_Gettmp (); retpt->type = IDL_TYP_INT; *8^ CGIS-CC.BCK& G [COBE_CC]DIRBE_WK.C;1S: numargs = IDL_KWGetParams (argc, argv, argk, kwpar, posargs, 1); IDL_KWCleanup (IDL_KW_CLEAN_ALL); if (posargs[0]->flags & IDL_V_NOT_SCALAR || posargs[0]->type != IDL_TYP_STRING) IDL_MessageErrno (IDL_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Invalid 'dataset' argument data type/class."); if (posargs[0]->value.str.slen == 0) { printf ("Enter File Name: "); scanf ("%s",dataset); } else strcpy (dataset, posargs[0]->value.str.s); if (posargs[1]->flags & IDL_V_NOT_SCALAR || posargs[1]->type != IDL_TYP_STRING) IDL_MessageErrno (IDL_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Invalid 'field' argument data type/class."); if (posargs[1]->value.str.slen == 0) { printf ("This file contains the following fields:\n"); for (index=0; index < MAXFIELDS; index++) printf (" %s \n",ttype[index].name); printf ("Enter Field Name as shown : "); scanf ("%s",fieldname); } else strcpy (fieldname, posargs[1]->value.str.s); fpt = fields; fpt++; nfield = getfields (MAXFIELDS, fieldname, fpt); if (nfield < 0) IDL_MessageErrno (IDL_M_NAMED_GENERIC,0,IDL_MSG_LONGJMP, "Only up to 15 fields may be specified."); nret = numargs - 2; if (nret < nfield) IDL_MessageErrno (IDL_M_NAMED_GENERIC, 0, IDL_MSG_LONG+rӵ CGIS-CC.BCK& G [COBE_CC]DIRBE_WK.C;1ΣJMP, "There are not enough IDL IDL_VARIABLEs to return the fields requested."); nfield +=1; printf ("Reading Data file\n"); /*C open the existing FITS file with readonly access */ rwstat=0; FCOPEN(iunit, dataset, rwstat, &bksize, &status); FCGERR(status,errtxt); /*C read the required primary array keywords */ FCGHPR(iunit,99,&simple,&bitpix,&naxis,naxes,&pcount, &gcount,&extend,&status); FCGERR(status,errtxt); /*C test for processing version */ FCGKYS(iunit,"VERSION",version,comment, &status); FCGERR(status,errtxt); /*C now move to the next ASCII table extension */ FCMAHD(iunit,2,&hdutyp,&status); FCGERR(status,errtxt); /*C read a naxis2 and set row dimensions */ FCGKYJ(iunit,"NAXIS2",&nelmt,comment, &status); dim[0]=nelmt; dim2[0]=10; dim2[1]=nelmt; dim3[0]=6; dim3[1]=nelmt; for (numargs=0; numargs < nfield-1; numargs++) { fflag=0; numfield=0; strcpy(dataset,ttype[numfield].name); while (strcmp(strlwr(*fpt),strlwr(dataset)) && numfield < MAXFIELDS) { ++numfield; if (numfield != MAXFIELDS) strcpy(dataset,ttype[numfield].name); } if (numfield == MAXFIELDS) { colnum=99; fflag=1; printf("Entered an Illegal Field Name %s \n",fpt); } ,8E aaRO;1e1@4QL;@'VhwSK?33`,Ak9Wy<t_ T J/r=0Y%:{EswT!*WoO]*h&P8Ey.R_taD-c,c@ _/s'B)]a [op;lR T.Mhj=J)sIv.=B*% Ln\RY5!Fr;<7KvZ:xV07%i3^`7roZ<=8$X{&/{%xxL;:-5]H & \bCz`DzNS/ MHqu."}jC|G0(1LpF Q3Wh2n)Kx3<p'T~"OJ1 |B8Co\ZuDV j^/qq:&FV S J=*M) gD+dx,v4#\[L+o'5,344Vt<,?1BUOGsJkRoWIOmxZ`} _ /gH(?.ZRW^nfZ (fA7_f2H%V5RSw=p /u`+@:cw$#"Rv+wXjXlqzCz-0OYWCz-dDMynFP@8 `jxc41d3%" !0)qSMw*Jn7tj)b'C#S_;3s/I$[jFMLz9$5;)w?r. NgHCx=d@9qj\XW4Y UN"q-4C+*)Ba_oIBM`WJ@sCzn";g"*K)KdKc i:/r{8t(XZasw YEnz8o;(R^v{}>pltE 7)K*|fhH{p|<5Z(fWO87 Nyl- )E4 VLhmt5_$[:>LMZwP\Lglvz+0BWw&tVylU]<CEfwMB72Z^3[GsF>\|E3;"8u]i+5TZ^2{4 c'Sb/Bi?1Q-3@|5.h')^J!3|L1xu/W8 To9!aF2cu|=N]QsZS`FLgLnMT:f?sVy|Zh'7,YA=oH4cxL .h6BX]",rO8O*DN^;pQU%orGR wWQPC/ + _:k3w_Uqp&Y{p~|1Ze@DnSXZTFK4Itovalue.i=1; puts ("*** Program completed successfully ***"); } else { /*C get the error text description */ FCGERR(status,errtxt); puts ("*** ERROR - program did not run successfully ***"); printf ("status = %d : %s\n", status, errtxt); } return retpt; } *[COBE_CC]E90.H;1+,' I. / h 4 - 0123KPWO 56"87"889G hHJ2Jh CGIS-CC.BCK' I [COBE_CC]E90.H;1 '#define MAXFIELDS 7 static struct fieldstr { char *name; int colnum; } ttype[] = { "Pixel_no", 1, "Time", 2, "Photomet", 3, "EfNumObs", 4, "StdDev", 5, "FitQual", 6, "FitChiSq", 7 }; *[COBE_CC]EXPORT_WRAP.H;1+,( J. / h 4 - 0123KPWO 56kTB7kTB89G hHJ/* HEADER: export_wrap.h This file is provided for the COBE C software. Please read it carefully and make the appropriate changed for the version of IDL you are using and your pathways. */ #include /* export.h needs this */ /* define problem symbols before including export.h */ #if defined(__GNUC__) && defined(VMS) #define noshare #define globalref extern #endif /* IDL's export.h file, at /include=idl_dir:[source] */ #define IDL_UCHAR UCHAR #include "export.h" /* the following li3 CGIS-CC.BCK( J [COBE_CC]EXPORT_WRAP.H;1 zne take care of obsolete typedefs */ /* uncomment this section if running versions of IDL */ /* OLDER than 4.0 (e.g. 3.5,3.6) */ /* #include "cobe_obs.h" */ /* the following 2 lines are only for IDL v4.0 */ /* uncomment if necessary (fixed in 4.0.1) */ /* #define ULONG IDL_ULONG */ /* #define IDL_DELTMP IDL_Deltmp */ /* end idl 4.0 section */ /* The export.h file was changed in IDL version 3.5 to add */ /* definitions of LONG and ULONG. If you are running older */ /* versions, e.g. IDL v3.0 uncomment (remove the leading and */ /* trailing symbols) the next two lines. */ /* typedef long int LONG; */ /* typedef unsigned long int ULONG; */ /* ;DISCLAIMER: ; ;This software was written at the Cosmology Data Analysis Center in ;support of the Cosmic Background Explorer (COBE) Project under NASA ;contract number NAS5-30750. ; ;This software may be used, copied, modified or redistributed so long ;as it is not sold and this disclaimer is distributed along with the ;software. If you modify the software please indicate your ;modifications in a prominent place in the source code. ; ;All routines are provided "as is" without any express or implied ;warranties whatsoever. All routines are distributed without guarantee ;of support. If errors are found in this code it is requested that you ;contact us by sending email to the address below to report the errors ;but we make no claims regarding timely fixes. Thi4l~ CGIS-CC.BCK( J [COBE_CC]EXPORT_WRAP.H;1 ~vs software has been ;used for analysis of COBE data but has not been validated and has not ;been used to create validated data sets of any type. ; ;Please send bug reports to CGIS@COBECL.DNET.NASA.GOV. */ *[COBE_CC]GETFIELDS.C;1+,) K. / h 4 #- 0123KPWO 56HX7HX89G hHJ/******************************************************************************* MODULE: getfields FUNCTION: This routine parses the input fieldname string and returns individual fields. AUTHOR: S. Masiee, STX, 2/91 (SER# 9311) - Modify Dataserver routines to handle multiple fields. MODIFICATION HISTORY: DATE SPR # VERS PROGRAMMER COMMENTS 04/92 9687 S. Masiee Port back to Unix linking to IDL 07/93 11155 10.9 S.Masiee, HSTX Modify to compile under Vax-C INPUT PARAMETERS: ma5 CGIS-CC.BCK) K [COBE_CC]GETFIELDS.C;1 xfld int Max number of fields permitted. Dataserver's maximum is initially set to 8 + pixel_no. fieldin char pt Ptr to input fieldname string OUTPUT PARAMETERS: fpt pt to array Array of the fields requested of strings RETURN: nfield int Number of fields in input string *******************************************************************************/ #include #include #define FIELDSIZE 255 int getfields (int maxfld, char *fieldin, char (*fpt) [FIELDSIZE] ) { int nfield; char *found, *fnext, *fparen, *fpend; /* Retrieve the fieldname(s) from the input parameter. */ strcat (fieldin, ","); found = fieldin; fnext = (char *) strchr (found, ','); fparen = (char *) strchr (found, '('); for (nfield=0; fnext != 0; fpt++) { if (fparen != 0 && fparen < fnext) { fpend = (char *) strchr (fparen, ')'); if (fpend != 0) fnext = (char *) strchr (fpend, ','); fparen = (char *) strchr (fnext, '('); } nfield++; /* Copy each field into a separate string variable. If too many fields, return, sending flag. */ if (nfield > maxfld) { nfield = -1; break; } *fnext = '\0'; strcpy (*fpt, found); found = fnext + 1; fnext = (char *) strchr (found,','); } return nfield; } 6$,+ CGIS-CC.BCK* L [COBE_CC]GETIX.C;1 z*[COBE_CC]GETIX.C;1+,* L. / h 4 o- 0123KPWO 56re57re589G hHJ#include char *getix (char *fieldin) { char *appx="_index",*end,*dest; int diff; dest = (char *) malloc(strlen(fieldin) + strlen(appx) + 1); end=strchr(fieldin,'.'); diff=end-fieldin; memcpy(dest,fieldin,diff); memcpy(dest+diff,appx,strlen(appx)); memcpy(dest+diff+strlen(appx),fieldin+diff,strlen(fieldin)-diff); return(dest); } *[COBE_CC]GPM.H;1+,+ N. / h 4 - 0123KPWO 56_87_889G hHJ#define MAXFIELDS 8 static struct fieldstr { char *name; int colnum; } ttype[] = { "Pixel_no", 1, "Photomet", 2, "PhotQual", 3, "Time", 4, "Eclon", 5, "Eclat", 6, "Galon", 7, "Galat", 8 }; 7' pbci4Lmx 1D1 g;!SoU!SpUO6FL^q2 V5^;dgd)BK+3\~/bkKB}:}pQl% ;@dk3o<;v!@ % e nzY"/SS ?s0@4pd`<-{/, v4ns3fJaw1,pnKb mj4Pu($f7`dM;g 9|$5){{|z](eNF .%7(*$n3*QL0X(`T(Z] b;2T"T \pw]a?C_V/,r>3^~Mq>-[Zm!1y}gua74t'ip6$%M�KBDd:)`}Sl6=\P;-o(m-_\U]H:gL[f4W~f{0= -Fi_J;b7"_LAFaEd+Wn`o4s 6#r[n,%IKu JObDOTc @^ DXN$dROZ_IS@^^Mb=xad$J~IPrWUh}mDZ lXNQk?@x^3B %Vmgd%n76dKV/]o ;] $X W]V[|S`dd6X'cKlu,mcl/ ?4QvRCJU:DTkF[grg%uru]6-O_%a^^M K#PcuHc#jA]hlAZ_G$^=4 t{THwA[I3J[K)*?JI]`X" @%J&Ga\yWAQRL@3Otz:w}h}!!dt&0n=R/3_5Z0)|V:X^'z |)?qN]!f,18,YL!|)t{Sql<$9c;HkBzb'%&I?1p)A@ [lpA:~6U8qXlEk7Bw_s]䱵Q> X4 Z|o*SN P]bb}E(k&I\U./ajylp3!rvRCg\.6#nv T|OS%P /&N)=}NC'*N azi'W61>g{N-9wIMI(5u_fOUX'qq*DRi]r ]`hH (?zsCGm 3'[:=]/f&PS U>6bjxh^dRSjF ? 0G4i_*q53oEde iiS|m8 +: i'oztb? S":(UKFK6@q~bXx\2S+a '+4<|f4Y),,old 32b ) endline = where( strmid(header,0,8) EQ 'END ', Nend ) if Nend GT 0 then header = header( 0:endline(0) ) ; setup to see what keywords there are (if any) keywrd = strupcase(strmid(header(0),0,7)) value = strupcase( strtrim( strmid( header(0), 10, 20 ), 2 )) ; If the first keyword is 'SIMPLE' then get its value ; We have to check now (prior to getting the rest of the fits header) to ; be sure that this is a fits file and that there's a header out there to ; get.... if ( strtrim(keywrd, 2) eq 'SIMPLE' ) then begin simple = (value eq 'T') endif else begin simple = 0b endelse ; Return if simple not 'T' if not simple then goto, return_status ; while Nend EQ 0 do begin if eof( unit ) then message, $ 'ERROR - EOF encountered while reading FITS header' readu, unit, hdr hdr1 = string( hdr > 32b ) endline = where( strmid(hdr1,0,8) EQ 'END ', Nend ) if Nend GT 0 then hdr1 = hdr1( 0:endline(0) ) header = [header, hdr1 ] endwhile ; ; Found SIMPLE = 'T' so its a fits files. Now check that there can ; be extensions if (not sxpar(header, 'EXTEND') ) then goto, return_status ; Calculate the nuber of bytes taken up by the data bitpix = sxpar(header,'bitpix') naxis = sxpar(header,'naxis') gcount = sxpar(header,'gcount') & if gcount eq 0 then gcount = 1 pcount = sxpar(header,'pcount') if naxis gt 0 then begin dims = sxpar(header,'naxis*') ;Read dimensions ;xT CGIS-CC.BCK 9 [COBE_CC]IS_FITS.PRO;16 ndata = dims(0) if naxis gt 1 then for i=2,naxis do ndata = ndata*dims(i-1) endif else ndata = 0 nbytes = (abs(bitpix) / 8) * gcount * (pcount + ndata) ; Read the next extension header in the file. nrec = long((nbytes + 2879) / 2880) point_lun, -unit, pointlun ;Current position mhead0 = pointlun + nrec*2880l point_lun, unit, mhead0 ;Next FITS extension readu, unit, hdr header = string( hdr > 32b ) extension = strtrim( strupcase( sxpar( header,'XTENSION' ) ), 2 ) return_status: close,unit free_lun,unit return, simple ;we come here if the file doesn't exist never_opened: !error = 1 return, simple ; end *[COBE_CC]LKDIRBE_OSF1.PRO;1+,, O. / h 4 - 0123KPWO 565q75q89G hHJ<CGs CGIS-CC.BCK, O OBE_CC]LKDIRBE_OSF1.PRO;1 ;DISCLAIMER: ; ;This software was written at the Cosmology Data Analysis Center in ;support of the Cosmic Background Explorer (COBE) Project under NASA ;contract number NAS5-30750. ; ;This software may be used, copied, modified or redistributed so long ;as it is not sold and this disclaimer is distributed along with the ;software. If you modify the software please indicate your ;modifications in a prominent place in the source code. ; ;All routines are provided "as is" without any express or implied ;warranties whatsoever. All routines are distributed without guarantee ;of support. If errors are found in this code it is requested that you ;contact us by sending email to the address below to report the errors ;but we make no claims regarding timely fixes. This software has been ;used for analysis of COBE data but has not been validated and has not ;been used to create validated data sets of any type. ; ;Please send bug reports to CGIS@COBECL.DNET.NASA.GOV. ;******************************************************************************* ; ; This procedure linkimages user-written application utilities. ; ; Written: November 1995 J. Newmark ; ;******************************************************************************* ; ; edit PATH to reflect the actual location, e.g. /usr/local/cgis ; LINKIMAGE,'dirbe_aaf','/PATH/dirbe_aaf.so',1,'dirbe_aaf',/keywords LINKIMAGE,'dirbe_dcaf','/PATH/dirbe_dcaf.so',1,'dirbe_dcaf',/keywords LINKIMAGE,'dirbe_e90','/PATH/dirbe_e90.so',1,'dirbe_e90',/keywords LI=-( CGIS-CC.BCK, O OBE_CC]LKDIRBE_OSF1.PRO;1 .iNKIMAGE,'dirbe_gpm','/PATH/dirbe_gpm.so',1,'dirbe_gpm',/keywords LINKIMAGE,'dirbe_wk','/PATH/dirbe_wk.so',1,'dirbe_wk',/keywords *[COBE_CC]LKDIRBE_UNIX.PRO;1+,- P. / h 4 - 0123KPWO 56j{7j{89G hHJ;DISCLAIMER: ; ;This software was written at the Cosmology Data Analysis Center in ;support of the Cosmic Background Explorer (COBE) Project under NASA ;contract number NAS5-30750. ; ;This software may be used, copied, modified or redistributed so long ;as it is not sold and this disclaimer is distributed along with the ;software. If you modify the software please indicate your ;modifications in a prominent place in the source code. ; ;All routines are provided "as is" without any express or implied ;war>zR CGIS-CC.BCK- P OBE_CC]LKDIRBE_UNIX.PRO;1 %ranties whatsoever. All routines are distributed without guarantee ;of support. If errors are found in this code it is requested that you ;contact us by sending email to the address below to report the errors ;but we make no claims regarding timely fixes. This software has been ;used for analysis of COBE data but has not been validated and has not ;been used to create validated data sets of any type. ; ;Please send bug reports to CGIS@COBECL.DNET.NASA.GOV. ;******************************************************************************* ; ; This procedure linkimages user-written application utilities. ; ; Written: November 1995 J. Newmark ; ;******************************************************************************* ; ; edit PATH to reflect the actual location, e.g. /usr/local/cgis ; LINKIMAGE,'dirbe_aaf','/PATH/dirbe_aaf.so',1,'_dirbe_aaf',/keywords LINKIMAGE,'dirbe_dcaf','/PATH/dirbe_dcaf.so',1,'_dirbe_dcaf',/keywords LINKIMAGE,'dirbe_e90','/PATH/dirbe_e90.so',1,'_dirbe_e90',/keywords LINKIMAGE,'dirbe_gpm','/PATH/dirbe_gpm.so',1,'_dirbe_gpm',/keywords LINKIMAGE,'dirbe_wk','/PATH/dirbe_wk.so',1,'_dirbe_wk',/keywords ?~ CGIS-CC.BCK. R [COBE_CC]LKDIRBE_VMS.PRO;1 ;n*[COBE_CC]LKDIRBE_VMS.PRO;1+,. R. / h 4 +- 0123KPWO 56xz7xz89G hHJ;DISCLAIMER: ; ;This software was written at the Cosmology Data Analysis Center in ;support of the Cosmic Background Explorer (COBE) Project under NASA ;contract number NAS5-30750. ; ;This software may be used, copied, modified or redistributed so long ;as it is not sold and this disclaimer is distributed along with the ;software. If you modify the software please indicate your ;modifications in a prominent place in the source code. ; ;All routines are provided "as is" without any express or implied ;warranties whatsoever. All routines are distributed without guarantee ;of support. If errors are found in this code it is requested that you ;contact us by sending email to the address below to report the errors ;but we make no claims regarding timely fixes. This software has been ;used for analysis of COBE data but has not been validated and has not ;been used to create validated data sets of any type. ; ;Please send bug reports to CGIS@COBECL.DNET.NASA.GOV. ;*******************************************@LE CGIS-CC.BCK. R [COBE_CC]LKDIRBE_VMS.PRO;1 j#************************************ ; ; This procedure linkimages user-written application utilities. ; ; Written: November 1995 J. Newmark ; ;******************************************************************************* ; ; this assumes C executables are in the logical directory CGIS$IDL ; SETLOG,'dirbe_aaf_exe','CGIS$IDL:dirbe_aaf.exe' SETLOG,'dirbe_dcaf_exe','CGIS$IDL:dirbe_dcaf.exe' SETLOG,'dirbe_e90_exe','CGIS$IDL:dirbe_e90.exe' SETLOG,'dirbe_gpm_exe','CGIS$IDL:dirbe_gpm.exe' SETLOG,'dirbe_wk_exe','CGIS$IDL:dirbe_wk.exe' LINKIMAGE,'dirbe_aaf','dirbe_aaf_exe',1,/keywords LINKIMAGE,'dirbe_dcaf','dirbe_dcaf_exe',1,/keywords LINKIMAGE,'dirbe_e90','dirbe_e90_exe',1,/keywords LINKIMAGE,'dirbe_gpm','dirbe_gpm_exe',1,/keywords LINKIMAGE,'dirbe_wk','dirbe_wk_exe',1,/keywords *[COBE_CC]MAKE_DIRBE.ALPHA;1+,/ S. / h 4 |- 0123KPWO 56& (q7& (q89G hHJ