C PROGRAM RIGAKU C C ***** PROGRAM TO READ THE RIGAKU FILES ***** C ***** 24-JUNE-1988 MSU PHYSICS ***** C C ***** DEFINE ALL VARIABLES AND ARRAYS ***** C IMPLICIT NONE C CHARACTER FILENAME*32 CHARACTER*4 FILETYPE, FILEDATE(3), FILETIME(2) CHARACTER*4 SAMPLEID(40), TUBETYPE C REAL*4 XRAYDATA(100000) REAL*4 STOPANGLE, KA, KA1, KA2, KB1 REAL*4 STARTANGLE, STEPSIZE, MAXINTDATA, XPOSITION C INTEGER*2 INDEX, NUMBEROFPOINTS, AXISCODE INTEGER*4 JUNKREAD INTEGER*4 SYSTEM, MODE1, MODE2, MODE3 INTEGER*4 SCANSPEED, KV, MA, COUNTINGTIME INTEGER*4 FULLSCALEVALUE, STATUS, DATACSC INTEGER*4 NUMBERSOFAR, COLLECTIONMODE, NUMBEROFREPEATS C C C C C ***** GET THE NAME OF THE RAW DATA FILE, AND OPEN IT ***** C WRITE ( 6, 50 ) 50 FORMAT ( // ' ENTER RAW DATA FILENAME ') WRITE ( 6, 51 ) 51 FORMAT ( ' DEVC:[DIR]NAME.EXT;VER: ',$ ) READ ( 5, 55 ) FILENAME 55 FORMAT ( A ) C WRITE ( 6, 75 ) FILENAME 75 FORMAT ( // & ' RAW DATA FILENAME ' / & ' SPECIFICATION IS: ', A & // ) C OPEN (UNIT=10, FILE=FILENAME, STATUS='OLD', & FORM='UNFORMATTED' ) C C C WRITE ( 6, 20 ) 20 FORMAT ( ' ***************************************** '/ & ' * * '/ & ' * THE FOLLOWING DATA IS READ FROM THE * '/ & ' * HEADER AREA OF THE RAW DATA FILE * '/ & ' * * '/ & ' ***************************************** '// ) C C C C ***** INPUT FILE RECORD NUMBERS: 1 THROUGH 16 ***** C ***** GET THE FILE: TYPE, DATE, TIME, AND SAMPLE ID ***** C READ ( 10 ) FILETYPE C DO INDEX=1,3 READ ( 10 ) FILEDATE(INDEX) END DO C DO INDEX=1,2 READ ( 10 ) FILETIME(INDEX) END DO C DO INDEX=1,10 READ ( 10 ) SAMPLEID(INDEX) END DO C C WRITE ( 6, 105 ) FILETYPE 105 FORMAT ( ' FILE TYPE IS: ', A / ) C WRITE ( 6, 110 ) FILEDATE(1), FILEDATE(2), FILEDATE(3) 110 FORMAT ( ' FILE DATE IS: ', 3A / ) C WRITE ( 6, 115 ) FILETIME(1), FILETIME(2) 115 FORMAT ( ' FILE TIME IS: ', 2A / ) C WRITE ( 6, 120 ) ( SAMPLEID(INDEX), INDEX=1, 10 ) 120 FORMAT ( ' SAMPLE ID IS: ', 10A / ) C C C C ***** INPUT FILE RECORD NUMBERS: 17 THROUGH 20 ***** C ***** GET AND PRINT SYSTEM AND MODE LONGWORDS ***** C READ ( 10 ) SYSTEM READ ( 10 ) MODE1 READ ( 10 ) MODE2 READ ( 10 ) MODE3 C IF ( SYSTEM .EQ. 1 ) THEN WRITE ( 6, 134 ) SYSTEM 134 FORMAT ( ' SYSTEM BYTE = ', I2, ' ===> RIGHT SYSTEM ' / ) ELSE IF ( SYSTEM .EQ. 2 ) THEN WRITE ( 6, 135 ) SYSTEM 135 FORMAT ( ' SYSTEM BYTE = ', I2, ' ===> LEFT SYSTEM ' / ) END IF C IF ( MODE1 .EQ. 1 ) THEN WRITE ( 6, 140 ) MODE1 140 FORMAT ( ' MODE1 BYTE = ', I2, ' ===> CONTINUOUS SCAN '/ ) ELSE IF ( MODE1 .EQ. 2 ) THEN WRITE ( 6, 141 ) MODE1 141 FORMAT ( ' MODE1 BYTE = ', I2, ' ===> STEP SCAN ' / ) END IF C IF ( MODE2 .EQ. 1 ) THEN WRITE ( 6, 145 ) MODE2, MODE3 145 FORMAT ( ' MODE2 BYTE = ', I2, ' ===> STANDARD MODE ' // & ' MODE3 BYTE = ', I4, ' = NUMBER OF REPEATS' / ) ELSE IF ( MODE2 .EQ. 2 ) THEN WRITE ( 6, 146 ) MODE2, MODE3 146 FORMAT ( ' MODE2 BYTE = ', I2, ' ===> INTEGRAL MODE ' // & ' MODE3 BYTE = ', I4, ' = NUMBER OF INTERGARTIONS'/) ELSE IF ( MODE2 .EQ. 3 ) THEN WRITE ( 6, 147 ) MODE2, MODE3 147 FORMAT ( ' MODE2 BYTE = ', I2, ' ===> SKIP MODE ' // & ' MODE3 BYTE = ', I4, ' = THRESHOLD VALUE ' / ) END IF C C C C ***** INPUT FILE RECORD NUMBERS: 21 THROUGH 24 ***** C ***** GET AND PRINT STOP ANGLE, SCAN SPEED, KV, MA ***** C READ ( 10 ) STOPANGLE READ ( 10 ) SCANSPEED READ ( 10 ) KV READ ( 10 ) MA C WRITE ( 6, 150 ) STOPANGLE, SCANSPEED 150 FORMAT ( ' STOP ANGLE = ', F7.2, ' DEGREES ' // & ' SCAN SPEED = ', I6 / ) C WRITE ( 6, 155 ) KV, MA 155 FORMAT ( ' TUBE KV IN THIS SCAN = ', I3, ' KV ' // & ' TUBE MA IN THIS SCAN = ', I3, ' MA ' / ) C C C C ***** INPUT FILE RECORD NUMBERS: 25 THROUGH 28 ***** C ***** GET AND PRINT TUBE TYPE, FULL SCALE VALUE, ***** C ***** SPECTROMETER STATUS, DATA IN COUNTS/SEC OR COUNTS ***** C READ ( 10 ) TUBETYPE READ ( 10 ) FULLSCALEVALUE READ ( 10 ) STATUS READ ( 10 ) DATACSC C WRITE ( 6, 160 ) TUBETYPE 160 FORMAT ( ' TUBE TYPE IS: ', A / ) C WRITE ( 6, 165 ) FULLSCALEVALUE 165 FORMAT ( ' FULL SCALE VALUE FOR THIS SCAN IS: ', I7 / ) C IF ( STATUS .EQ. 0 ) THEN WRITE ( 6, 170 ) STATUS 170 FORMAT ( ' STATUS BYTE = ', I2, ' ===> SCAN NOT STARTED '/) ELSE IF ( STATUS .EQ. 1 ) THEN WRITE ( 6, 171 ) STATUS 171 FORMAT ( ' STATUS BYTE = ', I2, ' ===> SCAN IN PROGRESS '/) ELSE IF ( STATUS .EQ. 2 ) THEN WRITE ( 6, 172 ) STATUS 172 FORMAT ( ' STATUS BYTE = ', I2, ' ===> SCAN COMPLETED ' / ) ELSE IF ( STATUS .EQ. 3 ) THEN WRITE ( 6, 173 ) STATUS 173 FORMAT ( ' STATUS BYTE = ', I2, ' ===> SCAN IS STOPED ' / ) END IF C IF ( DATACSC .EQ. 1 ) THEN WRITE ( 6, 175 ) DATACSC 175 FORMAT ( ' DATA FORMAT BYTE = ', I2, ' ====> COUNTS/SEC '/) ELSE IF ( DATACSC .EQ. 2 ) THEN WRITE ( 6, 176 ) DATACSC 176 FORMAT ( ' DATA FORMAT BYTE = ', I2, ' ====> COUNTS ' / ) END IF C C C C ***** INPUT FILE RECORD NUMBERS: 29 THROUGH 34 ***** C ***** GET AND PRINT: K ALPHA, KA1, KA2, KB1 ***** C READ ( 10 ) JUNKREAD READ ( 10 ) JUNKREAD READ ( 10 ) KA READ ( 10 ) KA1 READ ( 10 ) KA2 READ ( 10 ) KB1 C WRITE ( 6, 180 ) KA, KA1, KA2, KB1 180 FORMAT ( ' K ALPHA = ', F11.7 / & ' KA1 = ', F11.7 / & ' KA2 = ', F11.7 / & ' KB1 = ', F11.7 / ) C C C C ***** INPUT FILE RECORD NUMBERS: 35 THROUGH 38 ***** C ***** GET AND PRINT: START ANGLE, STEP SIZE, NUMBER OF ***** C ***** POINTS, AXIS CODE, COUNTING TIME IN SECONDS ***** C READ ( 10 ) STARTANGLE READ ( 10 ) STEPSIZE READ ( 10 ) NUMBEROFPOINTS, AXISCODE READ ( 10 ) COUNTINGTIME C WRITE ( 6, 185 ) STARTANGLE, STEPSIZE 185 FORMAT ( ' STARTING ANGLE IS: ', F9.4, ' DEGREES ' // & ' STEP SIZE IS: ', F9.4, ' DEGREES ' / ) C WRITE ( 6, 190 ) NUMBEROFPOINTS, AXISCODE 190 FORMAT ( ' NUMBER OF POINTS IN THIS SCAN IS: ', I4 // & ' AXIS CODE FOR THIS SCAN IS: ', I4 / ) C WRITE ( 6, 195 ) COUNTINGTIME 195 FORMAT ( ' COUNTING TIME IN SECONDS FOR THIS SCAN IS: ', I5 /) C C C C ***** INPUT FILE RECORD NUMBERS: 39 THROUGH 47 ***** C ***** GET AND PRINT: MAXIMUM INTENSITY OF THE INPUT DATA, ***** C ***** NUMBER OF POINTS COLLECTED SO FAR, COLLECTION MODE, ***** C ***** AND NUMBER OF REPEATS ***** C DO INDEX=39, 43 READ ( 10 ) JUNKREAD END DO C READ ( 10 ) MAXINTDATA READ ( 10 ) NUMBERSOFAR READ ( 10 ) COLLECTIONMODE READ ( 10 ) NUMBEROFREPEATS C WRITE ( 6, 200 ) MAXINTDATA, NUMBERSOFAR 200 FORMAT ( ' MAXIMUM DATA POINT IN THIS SCAN IS: ',F11.2 // & ' NUMBER OF POINTS COLLECTED SO FAR: ', I4 / ) C WRITE ( 6, 205 ) COLLECTIONMODE 205 FORMAT ( ' THE COLLECTION MODE BYTE IS: ', I2 / & ' -2 ===> DATA COLLECTION NOT STARTED '/ & ' -1 ===> BACKWARD DATA COLLECTION '/ & ' 0 ===> ????? '/ & ' 1 ===> FORWARD DATA COLLECTION '/ ) C C WRITE ( 6, 210 ) NUMBEROFREPEATS 210 FORMAT ( ' THE NUMBER OF REPEATS OF THIS SCAN IS: ', I2 / ) C C C C ***** INPUT FILE RECORD NUMBERS: 48 THROUGH 50 + NUMBER ***** C ***** OF POINTS COLLECTED SO FAR ***** C ***** ***** C ***** READ THE X-RAY DATA INTO THE ARRAY ***** C DO INDEX=48,50 READ ( 10 ) JUNKREAD END DO C WRITE ( 6, 215 ) 215 FORMAT ( // & ' ***** NOW READING THE X-RAY DATA FROM THE FILE ***** ' & // ) C DO INDEX=51, ( 50 + NUMBERSOFAR ) READ ( 10 ) XRAYDATA(INDEX) END DO C CLOSE ( UNIT=10 ) C C C C C ***** LIST FIRST 10 POINTS OF X-RAY DATA ***** C WRITE ( 6, 220 ) 220 FORMAT ( / & ' ***** THE FIRST 10 POINTS OF X-RAY DATA ARE: ***** ' & / ) C DO INDEX=51, 60 WRITE ( 6, 230 ) XRAYDATA(INDEX) END DO C 230 FORMAT ( ' XRAYDATA = ', F11.2 ) C C C C ***** FINDOUT IF THERE SHOULD BE AN OUTPUT FILE ***** C ***** AND GET ITS FILE NAME ***** C WRITE ( 6, 250 ) 250 FORMAT ( // ' TO BUILD AN ASCII FILE OF X-Y PAIRS ' / & ' ENTER THE FILENAME OF THE OUTPUT FILE ' / & ' OR ELSE ' / & ' TO QUIT ENTER JUST A CARRIAGE RETURN ' // ) WRITE ( 6, 251 ) 251 FORMAT ( ' ENTER CARRIAGE RETURN OR ' / $ ' DEVC:[DIR]NAME.EXT;VER: ',$ ) READ ( 5, 255 ) FILENAME 255 FORMAT ( A ) C IF ( FILENAME .EQ. ' ' ) THEN WRITE ( 6, 257 ) 257 FORMAT (// ' NO ASCII OUTPUT FILE WILL BE WRITTEN ' // ) GOTO 999 END IF C WRITE ( 6, 260 ) FILENAME 260 FORMAT (// ' THE SPECIFICATION OF THE OUTPUT FILE IS: ', A //) C OPEN (UNIT=15, FILE=FILENAME, STATUS='NEW', & FORM='FORMATTED' ) C C C C ***** NOW WRITE THE ASCII X-Y PAIR DATA IN THE OUTPUT FILE ***** C IF ( STARTANGLE .LT. STOPANGLE ) THEN C XPOSITION = STARTANGLE - STEPSIZE DO INDEX=51, ( 50 + NUMBERSOFAR ) XPOSITION = XPOSITION + STEPSIZE WRITE ( 15, 300 ) XPOSITION, XRAYDATA(INDEX) END DO C ELSE IF ( STARTANGLE .GT. STOPANGLE ) THEN C XPOSITION = STARTANGLE + STEPSIZE DO INDEX=51, ( 50 + NUMBERSOFAR ) XPOSITION = XPOSITION - STEPSIZE WRITE ( 15, 300 ) XPOSITION, XRAYDATA(INDEX) END DO C END IF C 300 FORMAT ( ' ', F6.3, ' ', F11.1 ) C CLOSE ( UNIT = 15 ) C C C 999 STOP ' COMPLETED WITH NO ERRORS' END C