ROUTINES PER LA SCRITTURA E LA LETTURA DI NASTRI IN FORMATO FITS PER VAX/VMS Sono disponibili sul calcolastore ASTBO1 dell'IRA una serie di routine Fortran per la lettura e scrittura di formati Fits. (1983-1984) Queste routines sono state progettate per facilitare la realizzazione di programmi che utilizzano nastri scritti in formato standard FITS. Si da per scontata la conoscenza delle caratteristiche del formato FITS (ref: D.C.Wells et all., Astron. Astrophys. Suppl. Ser., 44,(1981),363-370); si ricorda tuttavia che un file scritto secondo questo standard e' costituito da una header contenente i parametri relativi al file, e dai dati posti in forma intera. L'header e' costituita da record lunghi 80 caratteri ognuno dei quali contiene le chiavi FITS; di queste quattro sono obbligatorie al fine dello standard, mentre le altre sono usate a seconda delle esigenze particolari del programma. E' lasciata all'utente la possibilita' di scrivere o leggere i records che compongono la parte opzionale dell'header singolarmente , oppure facendo uso di subroutines che raggruppano le chiavi secondo criteri di omogeneita'. E' stata prevista la possibilita' di scrivere dati interizzati di 8 16 o 32 bit di lunghezza avendo a disposizione dati floating ed usando opportuni fattori di scala e di offset, Le subroutines che trattano i dati operano su di un vettore la cui dimensione deve essere specificata dall'utente. E' stata posta all'interno della libreria che contiene i moduli FITS una subroutine per skippare file sul nastro, dato che i nastri devono essere montati con il comando MOUNT/FOR e devono essere gestiti completamente dall'utente in quanto non sono in formato standard Vax. I programmi che vogliono fare uso delle seguenti routines devono essere linkati con la libreria : SYS$LOCAL:[TAPE.FITS]FITSLIB/LIB. Una introduzione generale sulla libreria e' contenuta in SYS$LOCAL:[TAPE.FITS]FITS.DOC Mentre i singoli moduli sono descritti in: SYS$LOCAL:[TAPE.FITS]AMANUAL.FITS Riferimenti: M.Nanni nanni@astbo1.bo.cnr.it -----------------Segue una descrizione dei singoli moduli---------------------- C=============================================================================C C C C S C R I T T U R A N A S T R I F I T S C C C C=============================================================================C C C C C C NOME SCRITTURA NASTRI FITS C C LINGUAGGIO FORTRAN C C TIPO PACKAGE DI SUBROUTINES C C DATA 30/11/82 C C ULTIMA VERSIONE 15/03/83 C C PROGRAMMATORE R.MERIGHI,M.NANNI C C SISTEMA VAX/VMS C C NOME DEL FILE DRA0:[ROUTINES.FITS]FITS2.FOR C C C C C C C C IL PACKAGE PERMETTE DI SCRIVERE NASTRI IN FORMATO FITS C C C C C C C C ----SUBROUTINE INIFITS C C C C INIZIALIZZA LE ROUTINES PER IL FITS ED ASSEGNA IL CANALE DELL'UNITA C C DI SCRITTURA C C C C CHIAMATA : CALL INIFITS C C C C C C ----SUBROUTINE WRHEAD C C C C CREA LA PARTE OBBLIGATORIA DELL'HEADER C C C C CHIAMATA : CALL WRHEAD ( NBIT, NAX, NAXN ) C C C C NBIT I*4 =8,16,32 NUMERO DI BIT USATO PER C C RAPPRESENTARE I DATI C C C C NAX I*4 NUMERO DI ASSI COORDINATI C C C C NAXN I*4 (NAX) OGNI COMPONENTE DEL VETTORE ESPRIME C C LE DIMENSIONI DELL'ASSE C C C C C C ----SUBROUTINE WRHKY C C C C SCRIVE I SINGOLI RECORDS DELL'HEADER, PERMETTE DI INSERIRE I PARAMETRI C C FACOLTATIVI QUANDO NON SI VOGLIA FARE USO DELLE ROUTINE CHE LI C C RAGRUPPANO C C C C CHIAMATA : CALL WRHKY ( KEY, VAL1, ITIP, COMX, VALX ) C C C C KEY CH*8 CHIAVE FITS C C C C VAL1 CH*20 VALORE DELLA CHIAVE C C C C ITIP I*4 SPECIFICA NATURA DI VAL1 C C ITIP=1 VAL1 STRINGA C C ITIP=0 VAL1 NUMERO C C C C COMX CH** COMMENTO FACOLTATIVO DELLA CHIAVE C C C C VALX CH** EVENTUALE PARTE IMMAGINARIA DI VAL1 C C C C C C ----SUBROUTINE FISC8 C C C C PARTENDO DAI DATI FLOATING DELL'UTENTE LI INTERIZZA MOLTIPLICANDOLI C C PER BSCAL ED AGGIUNGENDO UNA QUANTITA' DI OFFSET BZERO C C IDATI(N)=(ARRAY(N)+BZERO)/BSCALE C C VIENE PREPARATA PER OTTENERE UN VETTORE DI BYTE DA SCIVERE SU NASTRO, C C VENGONO INOLTRE SCRITTI SULLA HEADER I PARAMETRI BSCALE,BZERO,UNIT C C C C CHIAMATA : CALL FISC8 ( ARRAY, IDATI, BSCAL, BZERO, UNIT ) C C C C ARRAY R*4 (1) VETTORE DI DATI DA INTERIZZARE C C C C IDATI BYTE (1) VETTORE INTERIZZATO C C C C BSCAL R*4 FATTORE MOLTIPLICATIVO C C C C BZERO R*4 OFFSET C C C C UNIT CH*20 UNITA' DI MISURA UTILIZZATA C C C C C C ----SUBROUTINE FISC16 C C C C COME SOPRA PER DATI I*2 C C C C CHIAMATA : CALL FISC16 ( ARRAY, IDATI, BSCAL, BZERO, UNIT ) C C C C ARRAY R*4 (1) VETTORE DI DATI DA INTERIZZARE C C C C IDATI I*2 (1) VETTORE INTERIZZATO C C C C BSCAL R*4 FATTORE MOLTIPLICATIVO C C C C BZERO R*4 OFFSET C C C C UNIT CH*20 UNITA' DI MISURA UTILIZZATA C C C C C C ----SUBROUTINE FISC32 C C C C COME SOPRA PER DATI INTEGER* 4 C C C C CHIAMATA : CALL FISC32 ( ARRAY, IDATI, BSCAL, BZERO, UNIT ) C C C C ARRAY R*4 (1) VETTORE DI DATI DA INTERIZZARE C C C C IDATI I*4 (1) VETTORE INTERIZZATO C C C C BSCAL R*4 FATTORE MOLTIPLICATIVO C C C C BZERO R*4 OFFSET C C C C UNIT CH*20 UNITA' DI MISURA UTILIZZATA C C C C C C ----SUBROUTINE FITCR C C C C SCRIVE PARTE DELL'HEADER FACOLTATIVA RELATIVA ALLE CARATTERISTICHE C C DELLA MATRICE SCRITTA SU NASTRO. C C LE VARIABILI INDICATE SONO VETTORI DIMENSIONATI AL NUMERO DI ASSI C C COORDINATI DELLA MATRICE C C C C CHIAMATA : CALL FITCR ( CRVAL, CRPIX, CRDELT, CRTYP, CROTA ) C C C C CRVAL R*4 (NAX) VALORE DELLA COORDINATA FISICA C C DELL'ASSE NAX AL PIXEL DI RIFERIMENTO C C C C CRPIX R*4 (NAX) POSIZIONE LUNGO NAX DEL PIXEL DI C C RIFERIMENTO C C C C CRDELT R*4 (NAX) PASSO IN COORDINATE FISICHE LUNGO C C ASSE NAX C C C C CRTYP CH*20 (NAX) TIPO DI COORDINATA FISICA LUNGO C C L'ASSE NAX C C C C CROTA R*4 (NAX) ROTAZIONE DELL'ASSE DALLE COORDINATE C C FISICHE DEFINITE C C C C C C ----SUBROUTINE FITNOM C C C C COSTRUISCE PARTE DELL'HEADER FACOLTATIVA RELATIVA ALL'IDENTIFICAZIONE C C DELL'OGGETTO C C C C CHIAMATA : CALL FITNOM ( OBJECT, ORIGIN, ISTRUM, TELESCOP, OBSERVER ) C C C C OBJECT CH*20 NOME OGGETTO C C C C ORIGIN CH*20 ISTITUZIONE DOVE E' STATO SCRITTO IL C C NASTRO C C C C ISTRUM CH*20 STRUMENTO USATO PER AQUISIRE I DATI C C C C TELESCOP CH*20 TELESCOPIO USATO C C C C OBSERVER CH*20 NOME OSSERVATORE C C C C C C C C ----SUBROUTINE FITDATE C C C C COSTRUISCE PARTE DELL'HEADER FACOLTATIVA RELATIVA ALLA DATA DI C C OSSEVAZIONE C C C C CHIAMATA : CALL FITDATE ( EPOCH, DATE, DATE_OBS ) C C C C EPOCH CH*20 EPOCA A CUI SONO PRECESSATI I DATI C C C C DATE CH*20 DATA DI SCRITTURA DEL NASTRO C C DD/MM/YY C C C C DATE_OBS CH*20 DATA DELL'OSSERVAZIONE DD/MM/YY C C C C C C ----SUBROUTINE FITCOM C C C C SCRIVE NELLA HEADER UNA RIGA DI COMMENTO C C C C CHIAMATA : CALL FITCOM ( COMM ) C C C C COMM CH*70 COMMENTO C C C C C C ----SUBROUTINE FITHIST C C C C SCRIVE NELLA HEADER L'HISTORY DELL'OGGETTO, QUESTO DEVE ESSERE C C CONTENUTO SU DI UN FILE PRECEDENTEMENTE PREPARATO C C C C CHIAMATA : CALL FITHIST ( NOME ) C C C C NOME CH** NOME DEL FILE DA TRASCRIVERE SU C C NASTRO C C C C C C ----SUBROUTINE ENDHEA C C C C CHIUDE L'HEDER FITS C C C C CHIAMATA : CALL ENDHEA C C C C C C ----SUBROUTINE FIDAT8 C C C C RICHIAMA LA SUBROUTINE NECESSARIA ALLA CHIUSURA DEL FILE E SCRIVE I C C DATI QUANDO SI INTENDANO USARE DEI BYTE C C C C CHIAMATA : CALL FIDAT8 ( IDATI ) C C C C IDATI BYTE (1) DATI C C C C C C----SUBROUTINE FIDAT16 C C C C RICHIAMA LA SUBROUTINE PER LA CHIUSURA DEL FILE E SCRIVE I DATI SU C C NASTRO QUANDO SI INTENDANO USARE INTEGER*2 C C C C CHIAMATA : CALL FIDAT16 ( IDATI ) C C C C IDATI I*2 (1) DATI C C C C C C----SUBROUTINE FIDAT32 C C C C RICHIAMA LA SUBROUTINE PER LA CHIUSURA DEL FILE E SCRIVE I DATI SU C C NASTRO QUANDO SI INTENDANO USARE INTEGER*4 C C C C CHIAMATA : CALL FIDAT32 ( IDATI ) C C C C IDATI I*4 (1) DATI C C C C C C----SUBROUTINE ENDFITS C C C C TERMINA LA SESSIONE DI SCRITTURA DI FILES FITS C C C C CHIAMATA : CALL ENDFITS C C C C C C BLOCCHI COMMON C C C C /XXFITSCHAN/ NUMERO DI CANALE ASSEGNATO ALLA UNITA' NASTRO C C C C /GENFITS/ BUFFER DI SCRITTURA C C C C /NUMBUF/ NUMERO DI BYTE UTILIZZATI PER RECORD FISICO C C C C /NDAT/ NUMERO DI DATI E DI BIT UTILIZZATI IN SCRITTURA C C C C C C C C NOTE C C C C SET MINIMO DI SUBROUTINE CHIAMATE PER COSTRUIRE FILE FITS C C -------------------- C C -------------------- C C CALL INIFITS C C CALL WRHEAD(16,NAX,NAXN) C C CALL FIDAT16(IDATI) C C CALL ENDFITS C C --------------------- C C --------------------- C C C C=============================================================================C C=============================================================================C C C C L E T T U R A N A S T R I F I T S C C C C=============================================================================C C C C C C NOME LETTURA NASTRI FITS C C LINGUAGGIO FORTRAN C C TIPO PACKAGE DI SUBROUTINE C C DATA 15/03/81 C C ULTIMA VERSIONE 15/03/81 C C PROGRAMMATORE R.MERIGHI, M.NANNI C C SISTEMA VAX/VMS C C NOME DEL FILE DRA0:[ROUTINES.FITS]FITS2.FOR C C C C C C C C SUBROUTINES PER LA LETTURA DI NASTRI FORMATO FITS C C C C C C C C ----SUBROUTINE RDFINIT C C C C INIZIALIZZA LE AREE COMMON E ALLOCA L'UNITA' NASTRO C C DEVE ESSERE USATA PRIMA DI OGNI ALTRA CHIAMATA C C C C CHIAMATA : CALL RDFINIT C C C C C C ----SUBROUTINE RDFIHEAD C C C C LEGGE LA HEADER FITS DAL NASTRO E LA CARICA IN UNA AREA COMMON C C C C CHIAMATA : CALL RDFIHEAD C C C C C C ----SUBROUTINE REDKY C C C C ESTRAE DALLA AREA COMMON I VALORI RELATIVI ALLA CHIAVE SELEZIONATA C C C C CHIAMATA : CALL REDKY ( KEY, VAL, ITIP, VALX ) C C C C KEY CH*20 CHIAVE DI RICERCA C C C C VAL CH*20 STRINGA CONTENENTE IL PARAMETRO LETTO C C C C ITIP I*4 INDICATORE DI PARAMETRO LETTO: C C ITIP=0 VARIABILE NUMERICA C C ITIP=1 VARIABILE STRINGA C C ITIP=2 VARIABILE LOGICA C C C C VALX CH*20 EVENTUALE PARTE IMMAGINARIA DI VAL C C C C C C ----SUBROUTINE RDFIPAR C C C C LEGGE I PARAMETRI OBBLIGATORI DELL'HEADER FITS C C C C CHIAMATA : CALL RDFIPAR ( NBIT, NAX, NAXN, IFFIT ) C C C C NBIT I*4 NUMERO DI BIT CON CUI I DATI SONO C C SCRITTI SU NASTRO C C C C NAX I*4 NUMERO DI DIMENSIONI DELLA MATRICE C C DEI DATI C C C C NAXN I*4 (7) DIMENSIONI DEGLI ASSI DELLA MATRICE C C DI DATI C C C C IFFIT I*4 INDICATORE: C C IFFIT=1 NASTRO FITS C C IFFIT=0 NASTRO SCONOSCIUTO C C C C C C ----SUBROUTINE RDFIDAT C C C C SOVRAINTENDE ALLA LETTURA DEI DATI C C C C CHIAMATA : CALL RDFIDAT ( IDATI, BSCALE, BZERO, UNIT ) C C C C IDATI R*4 (1) DATI CHE SARANNO PASSATI AL PROG. C C PRINCIPALE C C C C BSCALE R*4 FATTORE PER CUI MOLTIPLICARE I C C DATI PER OTTENERE I VALORI ORIGINALI C C C C BZERO R*4 OFFEST DA SOTTRARRE AI DATI. C C C C UNIT CH*20 UNITA' DI MISURA DEI DATI C C C C C C ----SUBROUTINE RDFIT32 C C C C SUBROUTINE PER LA LETTURA DEI DATI ORGANIZZATI COME I*4 SU NASTRO. C C C C CHIAMATA : CALL RDFIT32 ( IDATI, NDAT ) C C C C IDATI I*4 (1) DATI LETTI C C C C NDAT I*4 NUMERO DEI DATI LETTI C C C C C C ----SUBROUTINE RDFIT16 C C C C SUBROUTINE PER LA LETTURA DEI DATI ORGANIZZATI COME I*2 SU NASTRO. C C C C CHIAMATA : CALL RDFIT16 ( IDATI, NDAT ) C C C C IDATI I*4 (1) DATI LETTI C C C C NDAT I*4 NUMERO DEI DATI LETTI C C C C C C ----SUBROUTINE RDFIT8 C C C C SUBROUTINE PER LA LETTURA DEI DATI ORGANIZZATI COME BYTE SU NASTRO. C C C C CHIAMATA : CALL RDFIT8 ( IDATI, NDAT ) C C C C IDATI I*4 (1) DATI LETTI C C C C NDAT I*4 NUMERO DEI DATI LETTI C C C C C C ----SUBROUTINE RDFITCR C C C C ESTRAE DALL'HEADER I PARAMETRI RELATIVI AI DATI C C C C CHIAMATA : CALL RDFITCR ( CRVAL, CRPIX, CDELT, CTYPE, CROTA ) C C C C CRVAL R*4 (7) VALORE FISICO DELLA COORDINATA N AL C C PUNTO DI RIFERIMENTO C C C C CRPIX R*4 (7) POSIZIONE LUNGO L'ASSE N DEL PIXEL C C DI RIFERIMENTO C C C C CDELT R*4 (7) INCREMENTO IN COORDINATE FISICHE C C LUNGO L'ASSE N C C C C CTYPE CH*20 (7) TIPO DI COORDINATA FISICA LUNGO C C L'ASSE N C C C C CROTA R*4 (7) ROTAZIONE DELL'ASSE N C C C C C C ----SUBROUTINE RDFITNM C C C C ESTRAE DALL'HEADER GLI IDENTIFICATORI DEI DATI C C C C CHIAMATA : CALL RDFITNM ( OBJECT, ORIGIN, INSTRUME, TELESCOP, C C OBSERVER ) C C C C OBJECT CH*20 NOME DELL'IMMAGINE C C C C ORIGIN CH*20 ISTITUTO CHE HA SCRITTO IL NASTRO C C C C INSTRUME CH*20 STRUMENTO DA CUI SONO STATI RICAVATI C C I DATI C C C C TELESCOP CH*20 TELESCOPIO UTILIZZATO C C C C OBSERVER CH*20 NOME DELL'OSSERVATORE C C C C C C ----SUBROUTINE RDFITDT C C C C ESTRAE DALL'HEADER I PARAMETRI CRONOLOGICI C C C C CHIAMATA : CALL RDFITDT ( EPOCH, DATE, DATE_OBS ) C C C C EPOCH R*4 EPOCA A CUI I DATI SONO PRECESSATI C C C C DATE CH*20 DATA DELLA SCRITTURA DEL NASTRO C C C C DATE_OBS CH*20 DATA DELLA OSSERVAZIONE C C C C C C ----SUBROUTINE RDWRHE C C C C SALVA SU FILE L'INTERA HEADER CHE SI TROVA IN AREA COMMON C C C C CHIAMATA : CALL RDWRHE ( NOME ) C C C C NOME CH*40 NOME DEL FILE C C C C C C ----SUBROUTINE RDFITS C C C C SALVA SU FILE L'HISTORY_FILE CONTENUTO NELLA HEADER C C C C CHIAMATA : CALL RDFITS ( NOME ) C C C C NOME CHARACTER*40 NOME DEL FILE C C C C C C ----SUBROUTINE MTSKIP C C C C SKIPPA FILE SU NASTRO C C C C CHIAMATA : CALL MTSKIP ( NUM ) C C C C NUM I*4 NUMERO DI FILE DA SCHIPPARE C C C C C C BLOCCHI COMMON C C C C /XXFITSCHAN/ CANALE ASSEGNATO ALL'UNITA' NASTRO C C C C /XXFITS2XX/ CONTIENE L'INTERA HEADER FITS C C C C /XXFITS2_1/ CONTIENE PARAMETRI PER LA LETTURA DEI DATI A SECONDA LA C C LORO ORGANIZZAZIONE SU NASTRO C C C C C C CARATTERISTICHE SPECIALI DEL LINGUAGGIO C C C C UTILIZZA LA RUN_TIME_LIBRARY PER IL MATCH E PER LE CONVERSIONI C C TRA CHARATTERE E VALORE NUMERICO C C C C NOTE C C C C SET MINIMO DI SUBROUTINE CHIAMATE PER LEGGERE FILE FITS C C -------------------- C C -------------------- C C CALL RDFINIT C C CALL RDFIHEAD C C CALL RDFIPAR(NBIT,NAX,NAXN,IFFIT) C C CALL RDFIDAT(IDATI,BSCALE,BZERO,UNIT) C C --------------------- C C --------------------- C C C C=============================================================================C