./CBFlib-0.9.2.2/ 0000755 0000765 0000765 00000000000 11603751102 011576 5 ustar yaya yaya ./CBFlib-0.9.2.2/m4/ 0000755 0000765 0000765 00000000000 11603703065 012123 5 ustar yaya yaya ./CBFlib-0.9.2.2/m4/fcb_exit_binary.m4 0000644 0000765 0000765 00000004762 11603702103 015515 0 ustar yaya yaya m4_include(`fcblib_defines.m4')m4_dnl ` INTEGER FUNCTION FCB_EXIT_BINARY(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC,& BYTE_IN_FILE,REC_IN_FILE,BUFFER, & PADDING ) !----------------------------------------------------------------------- ! Skip to end of binary section that was just read !----------------------------------------------------------------------- IMPLICIT NONE INTEGER, INTENT(IN) :: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: BYTE_IN_FILE,REC_IN_FILE INTEGER(1),INTENT(INOUT):: LAST_CHAR,BUFFER(FCB_BYTES_IN_REC) INTEGER(8),INTENT(IN) :: PADDING !External functions called' fcb_interface_FCB_READ_BYTE fcb_interface_FCB_READ_LINE fcb_interface_FCB_CI_STRNCMPARR `!----------------------------------------------------------------------- INTEGER,PARAMETER :: LINESIZE=2048 INTEGER(1) LINE(LINESIZE) ! BUFFER FOR THE NEXT LINE INTEGER LINELEN ! VALID CHARACTERS IN LINE INTEGER ITEM ! 1 FOR MIME ITEM FOUND, 0 OTHERWISE INTEGER QUOTE INTEGER TEXT_BITS INTEGER COUNT INTEGER BOUND_FOUND CHARACTER*31 BOUNDARY DATA BOUNDARY/"--CIF-BINARY-FORMAT-SECTION----"/ !----------------------------------------------------------------------- ! -- Skip the trailing pad BYTE_IN_FILE = BYTE_IN_FILE+PADDING ! -- Skip to MIME boundary BOUND_FOUND = 0 DO FCB_EXIT_BINARY = & FCB_READ_LINE(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER,LINE,LINESIZE,LINELEN) IF(FCB_EXIT_BINARY.NE.0 ) RETURN ! *** DEBUG *** PRINT *," LINELEN, LINE: ", LINELEN, LINE(1:LINELEN) IF (BOUND_FOUND .EQ. 0) THEN IF (FCB_CI_STRNCMPARR(BOUNDARY,LINE,LINELEN,31).EQ.0) THEN BOUND_FOUND = 1 ! *** DEBUG *** PRINT *, & ! "MIME BOUNDARY --CIF-BINARY-FORMAT-SECTION---- FOUND" END IF END IF IF (LINE(1).EQ.IACHAR(''`;''`)) THEN IF (LINELEN.EQ.1.OR.LINE(2).EQ.32.OR.LINE(2).EQ.9) THEN IF (BOUND_FOUND.EQ.0) THEN PRINT *, " END OF TEXT FOUND BEFORE MIME BOUNDARY" ELSE EXIT END IF END IF END IF END DO FCB_EXIT_BINARY = 0 RETURN END FUNCTION FCB_EXIT_BINARY' ./CBFlib-0.9.2.2/m4/fcb_open_cifin.m4 0000644 0000765 0000765 00000003114 11603702103 015277 0 ustar yaya yaya m4_include(`fcblib_defines.m4')m4_dnl ` INTEGER FUNCTION FCB_OPEN_CIFIN(FILNAM,TAPIN,LAST_CHAR, & FCB_BYTES_IN_REC,BYTE_IN_FILE,REC_IN_FILE,BUFFER) !----------------------------------------------------------------------- ! FILNAM - Name of the file countaining the image (GIVEN) ! TAPIN - Fortran device unit number assigned to image file (GIVEN) ! LAST_CHAR - ! Last character read (RESULT) ! FCB_BYTES_IN_REC - ! Number of bytes in a record (GIVEN) ! BYTE_IN_FILE - ! Byte (counting from 1) of the byte to read (RESULT) ! REC_IN_FILE - ! Record (counting from 1) of next record to read (RESULT) ! BUFFER - Array of length FCB_BYTES_IN_REC (GIVEN) !----------------------------------------------------------------------- IMPLICIT NONE CHARACTER(len=*),INTENT(IN) :: FILNAM INTEGER, INTENT(IN) :: TAPIN,FCB_BYTES_IN_REC INTEGER(1), INTENT(OUT):: LAST_CHAR INTEGER, INTENT(OUT):: BYTE_IN_FILE,REC_IN_FILE INTEGER(1), INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) INTEGER FCB_RECORD_SIZE ' fcb_errcode_CBF_FORMAT fcb_errcode_CBF_FILEOPEN fcb_errcode_CBF_FILEREAD fcb_interface_FCB_CI_STRNCMPARR fcb_macro_FCB_OPEN_CIFIN(`IOSTAT=FCB_OPEN_CIFIN', `IOSTAT=FCB_OPEN_CIFIN', `THEN FCB_OPEN_CIFIN = CBF_FILEREAD ENDIF')` RETURN END FUNCTION FCB_OPEN_CIFIN' ./CBFlib-0.9.2.2/m4/setup_py.m4 0000644 0000765 0000765 00000001175 11603702103 014231 0 ustar yaya yaya # # pycbf/setup.py generated from m4/setup_py.m4 # `# Import the things to build python binary extensions from distutils.core import setup, Extension # Make our extension module e = Extension(''`_pycbf''`, sources = ["pycbf_wrap.c","../src/cbf_simple.c"], extra_compile_args=["-g"], 'm4_ifelse(regexlibdir,`NOREGEXLIBDIR',`library_dirs=["../lib/"],',`library_dirs=["../lib/","'regexlibdir`"],')` 'm4_ifelse(regexlib,`NOREGEXLIB',`libraries=["cbf"],',`libraries=["cbf","'regexlib`"],')` include_dirs = ["../include"] ) # Build it setup(name="_pycbf",ext_modules=[e],)' ./CBFlib-0.9.2.2/m4/fcb_next_binary.m4 0000644 0000765 0000765 00000057236 11603702103 015526 0 ustar yaya yaya m4_include(`fcblib_defines.m4')m4_dnl ` INTEGER FUNCTION FCB_NEXT_BINARY(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC,& BYTE_IN_FILE,REC_IN_FILE,BUFFER, & ENCODING,SIZE,ID,DIGEST, & COMPRESSION,BITS,VORZEICHEN,REELL,& BYTEORDER,DIMOVER,DIM1,DIM2,DIM3, & PADDING ) !----------------------------------------------------------------------- ! Skip to the next binary and parse MIME header. !----------------------------------------------------------------------- IMPLICIT NONE INTEGER, INTENT(IN) :: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: BYTE_IN_FILE,REC_IN_FILE INTEGER(1),INTENT(INOUT):: LAST_CHAR,BUFFER(FCB_BYTES_IN_REC) INTEGER, INTENT(OUT) :: ENCODING INTEGER, INTENT(OUT) :: SIZE !Binary size INTEGER, INTENT(OUT) :: ID !Binary ID CHARACTER(len=*),INTENT(OUT):: DIGEST !Message digest INTEGER, INTENT(OUT):: COMPRESSION INTEGER, INTENT(OUT):: BITS,VORZEICHEN,REELL CHARACTER(len=*),INTENT(OUT):: BYTEORDER ! Possible parameter values for BYTEORDER are: ! "LITTLE_ENDIAN" supported ! "BIG_ENDIAN" not supported INTEGER(8), INTENT(OUT):: DIMOVER INTEGER(8), INTENT(OUT):: DIM1 INTEGER(8), INTENT(OUT):: DIM2 INTEGER(8), INTENT(OUT):: DIM3 INTEGER(8), INTENT(OUT):: PADDING ' fcb_param_ENC_LIST_ALL fcb_param_CBF_LIST_ALL ` !External functions called' fcb_interface_FCB_SKIP_WHITESPACE fcb_interface_FCB_CI_STRNCMPARR fcb_interface_FCB_NBLEN_ARRAY fcb_interface_FCB_READ_LINE fcb_interface_FCB_ATOL_WCNT `!----------------------------------------------------------------------- ' fcb_errcode_CBF_FORMAT ` INTEGER,PARAMETER :: LINESIZE=2048 INTEGER CONTINUATION INTEGER(1) LINE(LINESIZE) ! BUFFER FOR THE NEXT LINE INTEGER LINELEN ! VALID CHARACTERS IN LINE INTEGER IC ! CHARACTER WITHIN LINE INTEGER STATE ! SELECTION FROM VALUE (0, ...) INTEGER ITEM ! 1 FOR MIME ITEM FOUND, 0 OTHERWISE INTEGER LINE_COUNT ! NUMBER OF LINES INTO HEADER INTEGER FRESH_LINE INTEGER QUOTE INTEGER TEXT_BITS INTEGER COUNT INTEGER FAILURE INTEGER I,INTEXT,J INTEGER VALUELEN(12) CHARACTER*29 BOUNDARY CHARACTER*32 VALUE(12) DATA BOUNDARY/"--CIF-BINARY-FORMAT-SECTION--"/ DATA VALUE/ & "Content-Type:", & ! /* State 0 */ "Content-Transfer-Encoding:", & ! /* State 1 */ "Content-MD5:", & ! /* State 2 */ "X-Binary-Size:", & ! /* State 3 */ "X-Binary-ID:", & ! /* State 4 */ "X-Binary-Element-Type:", & ! /* State 5 */ "X-Binary-Element-Byte-Order:", & ! /* State 6 */ "X-Binary-Size-Fastest-Dimension:", & ! /* State 7 */ "X-Binary-Size-Second-Dimension:", & ! /* State 8 */ "X-Binary-Size-Third-Dimension:", & ! /* State 9 */ "X-Binary-Size-Padding:", & ! /* State 10 */ "X-Binary-Number-of-Elements:" & ! /* State 11 */ / !----------------------------------------------------------------------- DO I = 1,12 VALUELEN(I)=LEN(TRIM(VALUE(I))) END DO FAILURE = 0 ! -- Repeat : Skip lines until the start of a text field is reached and ! -- then loop until a mime boundary or end of the text field is reached INTEXT=0 DO IF (FCB_READ_LINE(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC,BYTE_IN_FILE,& REC_IN_FILE,BUFFER,LINE,LINESIZE,LINELEN).NE.0 ) THEN FCB_NEXT_BINARY=1 RETURN END IF ! *** DEBUG *** PRINT *," LINELEN, LINE: ", LINELEN, LINE(1:LINELEN) IF (LINELEN.GT.0)THEN IF (INTEXT.EQ.0)THEN IF (LINE(1).EQ.IACHAR(''`;''`))INTEXT=1 !start of a text field ! *** DEBUG *** PRINT *, "FOUND START OF TEXT FIELD" ELSE IF (LINE(1).EQ.IACHAR(''`;''`))THEN IF (LINELEN.EQ.1.OR.LINE(2).EQ.32.OR.LINE(2).EQ.9) & INTEXT=0 !end of the text field is reached ENDIF IF (FCB_CI_STRNCMPARR(BOUNDARY,LINE,LINELEN,29).EQ.0)EXIT ENDIF ENDIF ENDDO ! *** DEBUG *** PRINT *, "MIME BOUNDARY --CIF-BINARY-FORMAT-SECTION-- FOUND" !----------------------------------------------------------------------- STATE = -1 LINE_COUNT = 0 FRESH_LINE = 0 ENCODING = 0 SIZE = 0 ID = 0 DIGEST = "" COMPRESSION = CBF_NONE BITS = 0 VORZEICHEN = -1 REELL = -1 BYTEORDER="LITTLE_ENDIAN" DIMOVER = 0 DIM1 = 0 DIM2 = 0 DIM3 = 0 PADDING = 0 DO IF (FRESH_LINE.EQ.0) THEN IF (FCB_READ_LINE(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC, & BYTE_IN_FILE,REC_IN_FILE,BUFFER,LINE,LINESIZE,LINELEN).NE.0)& THEN FCB_NEXT_BINARY=1 RETURN ENDIF IF (LINELEN.GT.0 .AND. LINE(1).EQ.IACHAR(''`;''`) .AND. & (LINELEN.EQ.1 .OR. LINE(2).EQ.IACHAR(''` ''`) .OR. & LINE(2).EQ.Z''`09''`) ) GO TO 100 IF (FCB_CI_STRNCMPARR(BOUNDARY,LINE,LINELEN,29).EQ.0) & GO TO 100 END IF FRESH_LINE = 0 LINE_COUNT = LINE_COUNT+1 CONTINUATION = 0 IF (LINELEN.GT.0.AND. & (LINE(1).EQ.IACHAR(''` ''`).OR.LINE(1).EQ.Z''`09''`))CONTINUATION=1 ITEM = 0 IF (CONTINUATION .EQ. 0 ) THEN DO IC = 1, LINELEN IF ((LINE(IC).EQ.IACHAR(''`:''`)).AND.(IC.GT.1))ITEM=1 IF ((ITEM.NE.0).OR.(LINE(IC).LE.32.OR.LINE(IC).GE.127)) EXIT END DO END IF ! Check for the end of the header IF (LINE_COUNT.GT.1.AND.FCB_NBLEN_ARRAY(LINE,LINELEN).EQ.0) THEN FCB_NEXT_BINARY = 0 RETURN END IF ! Check for valid header-ness of line IF (ITEM.EQ.0.AND.(LINE_COUNT.EQ.1.OR.CONTINUATION.EQ.0)) GO TO 110 ! Look for the entries we are interested in IC = 1 IF (ITEM.NE.0) THEN DO STATE = 11,0,-1 J=STATE+1 I=VALUELEN(J) IF (FCB_CI_STRNCMPARR(VALUE(J)(1:I),LINE,LINELEN,I).EQ.0)THEN IC = I+1 EXIT END IF END DO END IF ! Skip past comments and whitespace IF (FCB_SKIP_WHITESPACE(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC, & BYTE_IN_FILE,REC_IN_FILE,BUFFER,LINE,LINESIZE,LINELEN,IC, & FRESH_LINE).NE.0) GO TO 100 SELECT CASE (STATE) ! Get the value CASE (0) !"Content-Type:" I=LINELEN-IC+1 IF (FCB_CI_STRNCMPARR("application/",LINE(IC:LINELEN),I,12).NE.0.AND.& FCB_CI_STRNCMPARR("image/", LINE(IC:LINELEN),I, 6).NE.0.AND.& FCB_CI_STRNCMPARR("text/", LINE(IC:LINELEN),I, 5).NE.0.AND.& FCB_CI_STRNCMPARR("audio/", LINE(IC:LINELEN),I, 6).NE.0.AND.& FCB_CI_STRNCMPARR("video/", LINE(IC:LINELEN),I, 6).NE.0) & GO TO 110 DO IF (IC.GT.LINELEN)EXIT ! Skip to the end of the section (a semicolon) DO IF (IC.GT.LINELEN)EXIT IF (LINE(IC).EQ.Z''`22''`) THEN ! double quote IC = IC+1 DO IF (IC.GT.LINELEN)EXIT IF (LINE(IC).EQ.Z''`22''`) THEN !double quote IC = IC+1 EXIT ELSE IF (LINE(IC).EQ.Z''`5C''`) THEN !backslash IC = IC+1 END IF IF (IC .LE. LINELEN) IC = IC+1 END IF END DO ELSE IF (LINE(IC).EQ.IACHAR(''`(''`)) THEN FCB_NEXT_BINARY = FCB_SKIP_WHITESPACE(TAPIN, & LAST_CHAR,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER,LINE,LINESIZE,LINELEN,IC, & FRESH_LINE) IF (FCB_NEXT_BINARY.NE.0) RETURN ELSE IF (LINE(IC).EQ.IACHAR(''`;''`)) THEN IC = IC+1 EXIT ELSE IC = IC+1 END IF END IF END IF END DO FCB_NEXT_BINARY = FCB_SKIP_WHITESPACE(TAPIN,LAST_CHAR, & FCB_BYTES_IN_REC,BYTE_IN_FILE,REC_IN_FILE,BUFFER, & LINE,LINESIZE,LINELEN,IC,FRESH_LINE) IF (FCB_NEXT_BINARY.NE.0) RETURN IF (FCB_CI_STRNCMPARR("conversions", & LINE(IC:LINELEN), LINELEN-IC+1, 11) .EQ.0 ) THEN IC = IC+11 FCB_NEXT_BINARY = FCB_SKIP_WHITESPACE(TAPIN,LAST_CHAR, & FCB_BYTES_IN_REC,BYTE_IN_FILE,REC_IN_FILE,BUFFER, & LINE,LINESIZE,LINELEN,IC,FRESH_LINE) IF (FCB_NEXT_BINARY.NE.0) RETURN IF (LINE(IC).EQ.IACHAR(''`=''`)) THEN IC = IC+1 FCB_NEXT_BINARY = FCB_SKIP_WHITESPACE(TAPIN,LAST_CHAR, & FCB_BYTES_IN_REC,BYTE_IN_FILE,REC_IN_FILE,BUFFER, & LINE,LINESIZE,LINELEN,IC,FRESH_LINE) IF (FCB_NEXT_BINARY.NE.0) RETURN QUOTE = 0 IF (LINE(IC).EQ.Z''`22''`) QUOTE=1 ! double quote COMPRESSION = CBF_NONE IF (FCB_CI_STRNCMPARR("x-CBF_PACKED", & LINE(IC+QUOTE:LINELEN),LINELEN-IC-QUOTE+1,12).EQ.0) & COMPRESSION=CBF_PACKED IF (FCB_CI_STRNCMPARR("x-CBF_PACKED_V2", & LINE(IC+QUOTE:LINELEN),LINELEN-IC-QUOTE+1,15).EQ.0) & COMPRESSION=CBF_PACKED_V2 IF (FCB_CI_STRNCMPARR("x-CBF_CANONICAL", & LINE(IC+QUOTE:LINELEN),LINELEN-IC-QUOTE+1,15).EQ.0) & COMPRESSION=CBF_CANONICAL IF (FCB_CI_STRNCMPARR("x-cbf_byte_offset", & LINE(IC+QUOTE:LINELEN),LINELEN-IC-QUOTE+1,17).EQ.0) & COMPRESSION=CBF_BYTE_OFFSET IF (FCB_CI_STRNCMPARR("x-cbf_predictor", & LINE(IC+QUOTE:LINELEN),LINELEN-IC-QUOTE+1,15).EQ.0) & COMPRESSION=CBF_PREDICTOR IF ( (COMPRESSION .EQ. CBF_PACKED) .OR. & (COMPRESSION .EQ. CBF_PACKED_V2) ) THEN DO IF (IC.GT.LINELEN)EXIT ! Skip to the end of the section (a semicolon) DO IF (IC.GT.LINELEN)EXIT IF (LINE(IC).EQ.Z''`22''`) THEN ! double quote IC = IC+1 DO IF (IC.GT.LINELEN)EXIT IF (LINE(IC).EQ.Z''`22''`) THEN !double quote IC = IC+1 EXIT ELSE IF (LINE(IC).EQ.Z''`5C''`) THEN !backslash IC = IC+1 END IF IF (IC .LE. LINELEN) IC = IC+1 END IF END DO ELSE IF (LINE(IC).EQ.IACHAR(''`(''`)) THEN FCB_NEXT_BINARY = FCB_SKIP_WHITESPACE(TAPIN, & LAST_CHAR,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER,LINE,LINESIZE,LINELEN,IC, & FRESH_LINE) IF (FCB_NEXT_BINARY.NE.0) RETURN ELSE IF (LINE(IC).EQ.IACHAR(''`;''`)) THEN IC = IC+1 EXIT ELSE IC = IC+1 END IF END IF END IF FCB_NEXT_BINARY = FCB_SKIP_WHITESPACE(TAPIN, & LAST_CHAR,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER,LINE,LINESIZE,LINELEN,IC, & FRESH_LINE) IF (FCB_NEXT_BINARY.NE.0) RETURN QUOTE = 0 IF (LINE(IC).EQ.Z''`22''`) QUOTE=1 ! double quote IF (FCB_CI_STRNCMPARR("uncorrelated_sections", & LINE(IC+QUOTE:LINELEN),LINELEN-IC-QUOTE+1,21).EQ.0) & COMPRESSION = IOR(COMPRESSION,CBF_UNCORRELATED_SECTIONS) IF (FCB_CI_STRNCMPARR("flat", & LINE(IC+QUOTE:LINELEN),LINELEN-IC-QUOTE+1,4).EQ.0) & COMPRESSION = IOR(COMPRESSION,CBF_FLAT_IMAGE) END DO END DO END IF END IF END IF END DO STATE = -1 ! *** DEBUG *** PRINT *, "COMPRESSION: ", COMPRESSION CASE (1) ! Binary encoding FAILURE = 1 QUOTE = 0; IF (LINE(IC) .EQ. Z''`22''`) QUOTE = 1 !double quote IF (FCB_CI_STRNCMPARR("Quoted-Printable", & LINE(IC+QUOTE:LINELEN), LINELEN-IC-QUOTE+1, 16) .EQ. 0)THEN IF (IC+16.EQ.LINELEN+1 .OR. & FCB_NBLEN_ARRAY(LINE(IC+16),1).EQ.0 .OR. & LINE(IC+16).EQ.IACHAR(''`(''`).OR. & (QUOTE.EQ.1.AND.LINE(IC+16).EQ.Z''`22''`)) THEN !double quote FAILURE = 0 ENCODING = ENC_QP END IF END IF IF (FCB_CI_STRNCMPARR("Base64", & LINE(IC+QUOTE:LINELEN), LINELEN-IC-QUOTE+1, 6) .EQ. 0)THEN IF (IC+6.EQ.LINELEN+1 .OR. & FCB_NBLEN_ARRAY(LINE(IC+6),1).EQ.0 .OR. & LINE(IC+6).EQ.IACHAR(''`(''`).OR. & (QUOTE.EQ.1.AND.LINE(IC+6).EQ.Z''`22''`)) THEN ! double quote FAILURE = 0 ENCODING = ENC_BASE64 END IF END IF IF (FCB_CI_STRNCMPARR("X-Base32k", & LINE(IC+QUOTE:LINELEN), LINELEN-IC-QUOTE+1, 9) .EQ. 0)THEN IF (IC+9.EQ.LINELEN+1 .OR. & FCB_NBLEN_ARRAY(LINE(IC+9),1).EQ.0 .OR. & LINE(IC+9).EQ.IACHAR(''`(''`).OR. & (QUOTE.EQ.1.AND.LINE(IC+9).EQ.Z''`22''`)) THEN ! double quote FAILURE = 0 ENCODING = ENC_BASE32K END IF END IF IF (FCB_CI_STRNCMPARR("X-Base8", & LINE(IC+QUOTE:LINELEN), LINELEN-IC-QUOTE+1, 7) .EQ. 0)THEN IF (IC+7.EQ.LINELEN+1 .OR. & FCB_NBLEN_ARRAY(LINE(IC+7),1).EQ.0 .OR. & LINE(IC+7).EQ.IACHAR(''`(''`).OR. & (QUOTE.EQ.1.AND.LINE(IC+7).EQ.Z''`22''`)) THEN ! double quote FAILURE = 0 ENCODING = ENC_BASE8 END IF END IF IF (FCB_CI_STRNCMPARR("X-Base10", & LINE(IC+QUOTE:LINELEN), LINELEN-IC-QUOTE+1, 8) .EQ. 0)THEN IF (IC+8.EQ.LINELEN+1 .OR. & FCB_NBLEN_ARRAY(LINE(IC+8),1).EQ.0 .OR. & LINE(IC+8).EQ.IACHAR(''`(''`).OR. & (QUOTE.EQ.1.AND.LINE(IC+8).EQ.Z''`22''`)) THEN ! double quote FAILURE = 0 ENCODING = ENC_BASE10 END IF END IF IF (FCB_CI_STRNCMPARR("X-Base16", & LINE(IC+QUOTE:LINELEN), LINELEN-IC-QUOTE+1, 8) .EQ. 0)THEN IF (IC+8.EQ.LINELEN+1 .OR. & FCB_NBLEN_ARRAY(LINE(IC+8),1).EQ.0 .OR. & LINE(IC+8).EQ.IACHAR(''`(''`).OR. & (QUOTE.EQ.1.AND.LINE(IC+8).EQ.Z''`22''`)) THEN !double quote FAILURE = 0 ENCODING = ENC_BASE16 END IF END IF IF (FCB_CI_STRNCMPARR("7bit", & LINE(IC+QUOTE:LINELEN), LINELEN-IC-QUOTE+1, 4) .EQ. 0 .OR. & FCB_CI_STRNCMPARR("8bit", & LINE(IC+QUOTE:LINELEN), LINELEN-IC-QUOTE+1, 4) .EQ. 0 ) THEN IF (IC+4.EQ.LINELEN+1 .OR. & FCB_NBLEN_ARRAY(LINE(IC+4),1).EQ.0 .OR. & LINE(IC+4).EQ.IACHAR(''`(''`).OR. & (QUOTE.EQ.1.AND.LINE(IC+4).EQ.Z''`22''`)) THEN !double quote FAILURE = 0 ENCODING = ENC_NONE END IF END IF IF (FCB_CI_STRNCMPARR("Binary", & LINE(IC+QUOTE:LINELEN), LINELEN-IC-QUOTE+1, 6) .EQ. 0) THEN IF (IC+6.EQ.LINELEN+1 .OR. & FCB_NBLEN_ARRAY(LINE(IC+6),1).EQ.0 .OR. & LINE(IC+6).EQ.IACHAR(''`(''`).OR. & (QUOTE.EQ.1.AND.LINE(IC+6).EQ.Z''`22''`)) THEN ! double quote FAILURE = 0 ENCODING = ENC_NONE END IF END IF IF (FAILURE.NE.0)GO TO 110 ! *** DEBUG *** PRINT *, "ENCODING: ", ENCODING CASE (2) ! Message digest IF (LINELEN.GE.IC+23) THEN DO I = IC,IC+23 DIGEST(I-IC+1:I-IC+1)=ACHAR(LINE(I)) END DO ELSE DO I = IC,LINELEN DIGEST(I-IC+1:I-IC+1)=ACHAR(LINE(I)) END DO DIGEST(LINELEN-IC+1:24)=''` ''` END IF ! *** DEBUG *** PRINT *, "DIGEST: ", DIGEST CASE (3) ! Binary size SIZE = FCB_ATOL_WCNT(LINE(IC:LINELEN),LINELEN-IC+1,COUNT) ! *** DEBUG *** PRINT *, "SIZE: ", SIZE CASE (4) ! Binary ID */ ID = FCB_ATOL_WCNT(LINE(IC:LINELEN),LINELEN-IC+1,COUNT) ! *** DEBUG *** PRINT *, "ID: ", ID CASE (5) ! Binary element type (signed/unsigned ?-bit integer) ! or (signed ?-bit real/complex IEEE) FAILURE = 3 QUOTE = 0 DO IF (IC.GT.LINELEN)EXIT FCB_NEXT_BINARY = FCB_SKIP_WHITESPACE(TAPIN,LAST_CHAR, & FCB_BYTES_IN_REC,BYTE_IN_FILE,REC_IN_FILE,BUFFER, & LINE,LINESIZE,LINELEN,IC,FRESH_LINE) IF (FCB_NEXT_BINARY.NE.0) RETURN IF (LINE(IC) .EQ. Z''`22''`) THEN ! double quote IF (QUOTE.NE.0) EXIT IC = IC+1 QUOTE = QUOTE+1 END IF IF (FAILURE .EQ. 3) THEN IF (FCB_CI_STRNCMPARR("signed", & LINE(IC:LINELEN),LINELEN-IC+1, 6) .EQ. 0) THEN IC = IC+6 VORZEICHEN = 1 FAILURE = FAILURE-1 END IF IF (FCB_CI_STRNCMPARR("unsigned", & LINE(IC:LINELEN),LINELEN-IC+1, 8) .EQ. 0) THEN IC = IC+8 VORZEICHEN = 0 FAILURE = FAILURE-1 END IF END IF IF (FAILURE .EQ. 2) THEN COUNT = 0 TEXT_BITS = FCB_ATOL_WCNT(LINE(IC:LINELEN),LINELEN-IC+1,COUNT) IF (FCB_CI_STRNCMPARR("-bit", & LINE(IC+COUNT:LINELEN),LINELEN-IC-COUNT+1,3).EQ.0)THEN IF (COUNT.NE.0.AND.TEXT_BITS.GT.0.AND.TEXT_BITS.LE.64)THEN IC = IC+COUNT+1 BITS = TEXT_BITS IF (LINE(IC) .EQ. IACHAR(''` ''`)) IC = IC+1 FAILURE = FAILURE-1 END IF END IF END IF IF (FAILURE .EQ. 1) THEN IF (FCB_CI_STRNCMPARR("integer", & LINE(IC:LINELEN),LINELEN-IC+1, 7 ) .EQ. 0) THEN FAILURE=FAILURE-1 REELL=0 ELSE IF (FCB_CI_STRNCMPARR("real", & LINE(IC:LINELEN), LINELEN-IC+1, 4 ) .EQ. 0 ) THEN IC = IC+4 IF (LINE(IC).EQ.IACHAR(''` ''`)) IC = IC+1 IF (FCB_CI_STRNCMPARR("ieee", & LINE(IC:LINELEN),LINELEN-IC+1,4).EQ.0) THEN FAILURE=FAILURE-1 REELL = 1 END IF ELSE IF (FCB_CI_STRNCMPARR("complex", & LINE(IC:LINELEN),LINELEN-IC+1,7).EQ.0) THEN IC = IC+7 IF (LINE(IC).EQ.IACHAR(''` ''`)) IC = IC+1 IF (FCB_CI_STRNCMPARR("ieee", & LINE(IC:LINELEN),LINELEN-IC+1,4).EQ.0) THEN FAILURE=FAILURE-1 REELL = 1 END IF END IF END IF END IF END IF IF (IC .LE. LINELEN) IC = IC+1 END DO IF (FAILURE .NE. 0)GO TO 110 ! *** DEBUG *** PRINT *, "VORZEICHEN, BITS, REELL",VORZEICHEN,BITS,REELL CASE (6) ! Byte order of elements (only endian-ness is supported) IF (0.EQ.FCB_CI_STRNCMPARR("big_endian", & LINE(IC:LINELEN),LINELEN-IC+1,10) ) THEN BYTEORDER="BIG_ENDIAN" ELSE IF (0.EQ.FCB_CI_STRNCMPARR("little_endian", & LINE(IC:LINELEN),LINELEN-IC+1,13)) THEN BYTEORDER="LITTLE_ENDIAN" ELSE GO TO 110 END IF END IF ! *** DEBUG *** PRINT *, "BYTEORDER: ", BYTEORDER CASE(7) ! Size of fastest dimension (Number of "fast" pixels) DIM1 = FCB_ATOL_WCNT(LINE(IC:LINELEN),LINELEN-IC+1,COUNT) ! *** DEBUG *** PRINT *,"DIM1: ",DIM1 CASE(8) ! Size of second fastest dimension (Number of "slow" pixels) DIM2 = FCB_ATOL_WCNT(LINE(IC:LINELEN),LINELEN-IC+1,COUNT) ! *** DEBUG *** PRINT *,"DIM2: ",DIM2 CASE(9) ! Size of third dimension DIM3 = FCB_ATOL_WCNT(LINE(IC:LINELEN),LINELEN-IC+1,COUNT) ! *** DEBUG *** PRINT *,"DIM3: ",DIM3 CASE(10) ! Size of padding after the data PADDING = FCB_ATOL_WCNT(LINE(IC:LINELEN),LINELEN-IC+1,COUNT) ! *** DEBUG *** PRINT *,"PADDING: ",PADDING CASE (11) ! Overall number of elements DIMOVER = FCB_ATOL_WCNT(LINE(IC:LINELEN),LINELEN-IC+1,COUNT) ! *** DEBUG *** PRINT *,"DIMOVER: ",DIMOVER END SELECT ENDDO 100 FCB_NEXT_BINARY = -1 RETURN 110 FCB_NEXT_BINARY = CBF_FORMAT RETURN END FUNCTION FCB_NEXT_BINARY' ./CBFlib-0.9.2.2/m4/Makefile.m4 0000644 0000765 0000765 00000220055 11603702103 014076 0 ustar yaya yaya m4_define(`cbf_version',`0.9.2')m4_dnl m4_define(`cbf_date',`12 Feb 2011')m4_dnl m4_ifelse(cbf_system,`',`m4_define(`cbf_system',`LINUX')') `###################################################################### # Makefile - command file for make to create CBFlib # # # # Version 'cbf_version cbf_date` # # # # Paul Ellis and # # Herbert J. Bernstein (yaya@bernstein-plus-sons.com) # # # # (C) Copyright 2006 - 2011 Herbert J. Bernstein # # # ###################################################################### ###################################################################### # # # YOU MAY REDISTRIBUTE THE CBFLIB PACKAGE UNDER THE TERMS OF THE GPL # # # # ALTERNATIVELY YOU MAY REDISTRIBUTE THE CBFLIB API UNDER THE TERMS # # OF THE LGPL # # # ###################################################################### ########################### GPL NOTICES ############################## # # # This program is free software; you can redistribute it and/or # # modify it under the terms of the GNU General Public License as # # published by the Free Software Foundation; either version 2 of # # (the License, or (at your option) any later version. # # # # This program is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # # GNU General Public License for more details. # # # # You should have received a copy of the GNU General Public License # # along with this program; if not, write to the Free Software # # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA # # 02111-1307 USA # # # ###################################################################### ######################### LGPL NOTICES ############################### # # # This library is free software; you can redistribute it and/or # # modify it under the terms of the GNU Lesser General Public # # License as published by the Free Software Foundation; either # # version 2.1 of the License, or (at your option) any later version. # # # # This library is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # # Lesser General Public License for more details. # # # # You should have received a copy of the GNU Lesser General Public # # License along with this library; if not, write to the Free # # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, # # MA 02110-1301 USA # # # ###################################################################### ###################################################################### # # # Stanford University Notices # # for the CBFlib software package that incorporates SLAC software # # on which copyright is disclaimed # # # # This software # # ------------- # # The term "this software", as used in these Notices, refers to # # those portions of the software package CBFlib that were created by # # employees of the Stanford Linear Accelerator Center, Stanford # # University. # # # # Stanford disclaimer of copyright # # -------------------------------- # # Stanford University, owner of the copyright, hereby disclaims its # # copyright and all other rights in this software. Hence, anyone # # may freely use it for any purpose without restriction. # # # # Acknowledgement of sponsorship # # ------------------------------ # # This software was produced by the Stanford Linear Accelerator # # Center, Stanford University, under Contract DE-AC03-76SFO0515 with # # the Department of Energy. # # # # Government disclaimer of liability # # ---------------------------------- # # Neither the United States nor the United States Department of # # Energy, nor any of their employees, makes any warranty, express or # # implied, or assumes any legal liability or responsibility for the # # accuracy, completeness, or usefulness of any data, apparatus, # # product, or process disclosed, or represents that its use would # # not infringe privately owned rights. # # # # Stanford disclaimer of liability # # -------------------------------- # # Stanford University makes no representations or warranties, # # express or implied, nor assumes any liability for the use of this # # software. # # # # Maintenance of notices # # ---------------------- # # In the interest of clarity regarding the origin and status of this # # software, this and all the preceding Stanford University notices # # are to remain affixed to any copy or derivative of this software # # made or distributed by the recipient and are to be affixed to any # # copy of software made or distributed by the recipient that # # contains a copy or derivative of this software. # # # # Based on SLAC Software Notices, Set 4 # # OTT.002a, 2004 FEB 03 # ###################################################################### ###################################################################### # NOTICE # # Creative endeavors depend on the lively exchange of ideas. There # # are laws and customs which establish rights and responsibilities # # for authors and the users of what authors create. This notice # # is not intended to prevent you from using the software and # # documents in this package, but to ensure that there are no # # misunderstandings about terms and conditions of such use. # # # # Please read the following notice carefully. If you do not # # understand any portion of this notice, please seek appropriate # # professional legal advice before making use of the software and # # documents included in this software package. In addition to # # whatever other steps you may be obliged to take to respect the # # intellectual property rights of the various parties involved, if # # you do make use of the software and documents in this package, # # please give credit where credit is due by citing this package, # # its authors and the URL or other source from which you obtained # # it, or equivalent primary references in the literature with the # # same authors. # # # # Some of the software and documents included within this software # # package are the intellectual property of various parties, and # # placement in this package does not in any way imply that any # # such rights have in any way been waived or diminished. # # # # With respect to any software or documents for which a copyright # # exists, ALL RIGHTS ARE RESERVED TO THE OWNERS OF SUCH COPYRIGHT. # # # # Even though the authors of the various documents and software # # found here have made a good faith effort to ensure that the # # documents are correct and that the software performs according # # to its documentation, and we would greatly appreciate hearing of # # any problems you may encounter, the programs and documents any # # files created by the programs are provided **AS IS** without any * # warranty as to correctness, merchantability or fitness for any # # particular or general use. # # # # THE RESPONSIBILITY FOR ANY ADVERSE CONSEQUENCES FROM THE USE OF # # PROGRAMS OR DOCUMENTS OR ANY FILE OR FILES CREATED BY USE OF THE # # PROGRAMS OR DOCUMENTS LIES SOLELY WITH THE USERS OF THE PROGRAMS # # OR DOCUMENTS OR FILE OR FILES AND NOT WITH AUTHORS OF THE # # PROGRAMS OR DOCUMENTS. # ###################################################################### ###################################################################### # # # The IUCr Policy # # for the Protection and the Promotion of the STAR File and # # CIF Standards for Exchanging and Archiving Electronic Data # # # # Overview # # # # The Crystallographic Information File (CIF)[1] is a standard for # # information interchange promulgated by the International Union of # # Crystallography (IUCr). CIF (Hall, Allen & Brown, 1991) is the # # recommended method for submitting publications to Acta # # Crystallographica Section C and reports of crystal structure # # determinations to other sections of Acta Crystallographica # # and many other journals. The syntax of a CIF is a subset of the # # more general STAR File[2] format. The CIF and STAR File approaches # # are used increasingly in the structural sciences for data exchange # # and archiving, and are having a significant influence on these # # activities in other fields. # # # # Statement of intent # # # # The IUCr''`s interest in the STAR File is as a general data # # interchange standard for science, and its interest in the CIF, # # a conformant derivative of the STAR File, is as a concise data # # exchange and archival standard for crystallography and structural # # science. # # # # Protection of the standards # # # # To protect the STAR File and the CIF as standards for # # interchanging and archiving electronic data, the IUCr, on behalf # # of the scientific community, # # # # # holds the copyrights on the standards themselves, * # # # # owns the associated trademarks and service marks, and * # # # # holds a patent on the STAR File. * # # # These intellectual property rights relate solely to the # # interchange formats, not to the data contained therein, nor to # # the software used in the generation, access or manipulation of # # the data. # # # # Promotion of the standards # # # # The sole requirement that the IUCr, in its protective role, # # imposes on software purporting to process STAR File or CIF data # # is that the following conditions be met prior to sale or # # distribution. # # # # # Software claiming to read files written to either the STAR * # File or the CIF standard must be able to extract the pertinent # # data from a file conformant to the STAR File syntax, or the CIF # # syntax, respectively. # # # # # Software claiming to write files in either the STAR File, or * # the CIF, standard must produce files that are conformant to the # # STAR File syntax, or the CIF syntax, respectively. # # # # # Software claiming to read definitions from a specific data * # dictionary approved by the IUCr must be able to extract any # # pertinent definition which is conformant to the dictionary # # definition language (DDL)[3] associated with that dictionary. # # # # The IUCr, through its Committee on CIF Standards, will assist # # any developer to verify that software meets these conformance # # conditions. # # # # Glossary of terms # # # # [1] CIF: is a data file conformant to the file syntax defined # # at http://www.iucr.org/iucr-top/cif/spec/index.html # # # # [2] STAR File: is a data file conformant to the file syntax # # defined at http://www.iucr.org/iucr-top/cif/spec/star/index.html # # # # [3] DDL: is a language used in a data dictionary to define data # # items in terms of "attributes". Dictionaries currently approved # # by the IUCr, and the DDL versions used to construct these # # dictionaries, are listed at # # http://www.iucr.org/iucr-top/cif/spec/ddl/index.html # # # # Last modified: 30 September 2000 # # # # IUCr Policy Copyright (C) 2000 International Union of # # Crystallography # ###################################################################### # Version string VERSION = 'cbf_version` # # Comment out the next line if scratch test files sould be retain # CLEANTESTS = yes 'm4_ifelse(cbf_use_pycifrw,`yes',` # # Definitions to get versions of PyCifRW and PLY # PYCIFRW = PyCifRW-3.3_6Dec09 PLY = ply-3.2 PYCIFRWFLAG = -DCBF_USE_PYCIFRW ')m4_dnl ` # # Definition to get a version of tifflib to support tiff2cbf # TIFF = tiff-3.9.4-rev-6Feb11 TIFFPREFIX = $(PWD) # # Definitions to get a stable version of regex # REGEX = regex-20090805 REGEXDIR = /usr/lib REGEXDEP = # Program to use to retrieve a URL DOWNLOAD = wget # Flag to control symlinks versus copying SLFLAGS = --use_ln # # Program to use to pack shars # SHAR = /usr/bin/shar #SHAR = /usr/local/bin/gshar # # Program to use to create archives # AR = /usr/bin/ar # # Program to use to add an index to an archive # RANLIB = /usr/bin/ranlib # # Program to use to decompress a data file # DECOMPRESS = /usr/bin/bunzip2 # # Program to use to compress a data file # COMPRESS = /usr/bin/bzip2 # # Program to use to generate a signature # SIGNATURE = /usr/bin/openssl dgst -md5 # # Extension for compressed data file (with period) # CEXT = .bz2 # # Extension for signatures of files # SEXT = .md5 # call to time a command #TIME = #TIME = time # # Program to display differences between files # DIFF = diff -u -b # # Program to generate wrapper classes for Python # PYSWIG = swig -python # # Program to generate wrapper classes for Java # JSWIG = swig -java # # Program to generate LaTex and HTML program documentation # NUWEB = nuweb # # Compiler for Java # JAVAC = javac # # Java archiver for compiled classes # JAR = jar # # Java SDK root directory # ifeq ($(JDKDIR),) JDKDIR = /usr/lib/java endif ifneq ($(CBF_DONT_USE_LONG_LONG),) NOLLFLAG = -DCBF_DONT_USE_LONG_LONG else NOLLFLAG = endif # # PYCBF definitions # PYCBFEXT = so PYCBFBOPT = SETUP_PY = setup.py # # Set the compiler and flags # 'm4_ifelse(cbf_system,`OSX',` ######################################################### # # Appropriate compiler definitions for MAC OS X # Also change defintion of DOWNLOAD # ######################################################### CC = gcc C++ = g++ CFLAGS = -g -O2 -Wall -ansi -pedantic F90C = gfortran F90FLAGS = -g -fno-range-check F90LDFLAGS = -bind_at_load EXTRALIBS = -lm M4FLAGS = -Dfcb_bytes_in_rec=131072 TIME = time DOWNLOAD = /sw/bin/wget', cbf_system,`OSX_gcc42',` ######################################################### # # Appropriate compiler definitions for MAC OS X # with gcc 4.2 # Also change defintion of DOWNLOAD # ######################################################### CC = gcc C++ = g++ CFLAGS = -g -O2 -Wall -ansi -pedantic F90C = gfortran F90FLAGS = -g -fno-range-check F90LDFLAGS = -bind_at_load SOCFLAGS = -fPIC SOLDFLAGS = -shared -Wl,-rpath,$(INSTALLDIR)/lib JAVAINCLUDES = -I$(JDKDIR)/include -I$(JDKDIR)/include/linux LDPREFIX = LD_LIBRARY_PATH=$(SOLIB) EXTRALIBS = -lm M4FLAGS = -Dfcb_bytes_in_rec=131072 TIME = time DOWNLOAD = /sw/bin/wget', cbf_system,`OSX_gcc42_DMALLOC',` ######################################################### # # Appropriate compiler definitions for MAC OS X # with gcc 4.2 and DMALLOC # Also change defintion of DOWNLOAD # ######################################################### CC = gcc C++ = g++ CFLAGS = -g -O2 -Wall -ansi -pedantic -DDMALLOC -DDMALLOC_FUNC_CHECK -I$(HOME)/include F90C = gfortran F90FLAGS = -g -fno-range-check F90LDFLAGS = -bind_at_load SOCFLAGS = -fPIC SOLDFLAGS = -shared -Wl,-rpath,$(INSTALLDIR)/lib JAVAINCLUDES = -I$(JDKDIR)/include -I$(JDKDIR)/include/linux LDPREFIX = LD_LIBRARY_PATH=$(SOLIB) EXTRALIBS = -lm -L$(HOME)/lib -ldmalloc M4FLAGS = -Dfcb_bytes_in_rec=131072 TIME = time DOWNLOAD = /sw/bin/wget', cbf_system,`LINUX_64',` ######################################################### # # Appropriate compiler definitions for Linux x86_64 # with gcc version 4.2 # ######################################################### CC = gcc -m64 C++ = g++ -m64 CFLAGS = -g -O2 -Wall -D_USE_XOPEN_EXTENDED -fno-strict-aliasing F90C = gfortran -m64 F90FLAGS = -g -fno-range-check F90LDFLAGS = SOCFLAGS = -fPIC SOLDFLAGS = -shared -Wl,-rpath,$(INSTALLDIR)/lib JAVAINCLUDES = -I$(JDKDIR)/include -I$(JDKDIR)/include/linux LDPREFIX = LD_LIBRARY_PATH=$(SOLIB) EXTRALIBS = -lm M4FLAGS = -Dfcb_bytes_in_rec=131072 TIME = time DOWNLOAD = /sw/bin/wget', cbf_system,`LINUX_gcc42',` ######################################################### # # Appropriate compiler definitions for Linux # with gcc version 4.2 # ######################################################### CC = gcc C++ = g++ CFLAGS = -g -O2 -Wall -D_USE_XOPEN_EXTENDED -fno-strict-aliasing F90C = gfortran F90FLAGS = -g -fno-range-check F90LDFLAGS = SOCFLAGS = -fPIC SOLDFLAGS = -shared -Wl,-rpath,$(INSTALLDIR)/lib JAVAINCLUDES = -I$(JDKDIR)/include -I$(JDKDIR)/include/linux LDPREFIX = LD_LIBRARY_PATH=$(SOLIB) EXTRALIBS = -lm M4FLAGS = -Dfcb_bytes_in_rec=131072 TIME = time', cbf_system,`LINUX',` ######################################################### # # Appropriate compiler definitions for Linux # ######################################################### CC = gcc C++ = g++ CFLAGS = -g -O2 -Wall -D_USE_XOPEN_EXTENDED -fno-strict-aliasing F90C = gfortran F90FLAGS = -g F90LDFLAGS = SOCFLAGS = -fPIC SOLDFLAGS = -shared -Wl,-rpath,$(INSTALLDIR)/lib JAVAINCLUDES = -I$(JDKDIR)/include -I$(JDKDIR)/include/linux LDPREFIX = LD_LIBRARY_PATH=$(SOLIB) EXTRALIBS = -lm M4FLAGS = -Dfcb_bytes_in_rec=131072 TIME = time', cbf_system,`LINUX_gcc42_DMALLOC',` ######################################################### # # Appropriate compiler definitions for Linux # with gcc version 4.2 and DMALLOC # ######################################################### CC = gcc C++ = g++ CFLAGS = -g -O2 -Wall -D_USE_XOPEN_EXTENDED -fno-strict-aliasing -DDMALLOC -DDMALLOC_FUNC_CHECK -I$(HOME)/include F90C = gfortran F90FLAGS = -g -fno-range-check F90LDFLAGS = SOCFLAGS = -fPIC SOLDFLAGS = -shared -Wl,-rpath,$(INSTALLDIR)/lib JAVAINCLUDES = -I$(JDKDIR)/include -I$(JDKDIR)/include/linux LDPREFIX = LD_LIBRARY_PATH=$(SOLIB) EXTRALIBS = -lm -L$(HOME)/lib -ldmalloc M4FLAGS = -Dfcb_bytes_in_rec=131072 TIME = time', cbf_system,`LINUX_DMALLOC',` ######################################################### # # Appropriate compiler definitions for Linux and DMALLOC # ######################################################### CC = gcc C++ = g++ CFLAGS = -g -O2 -Wall -D_USE_XOPEN_EXTENDED -fno-strict-aliasing -DDMALLOC -DDMALLOC_FUNC_CHECK -I$(HOME)/include F90C = gfortran F90FLAGS = -g F90LDFLAGS = SOCFLAGS = -fPIC SOLDFLAGS = -shared -Wl,-rpath,$(INSTALLDIR)/lib JAVAINCLUDES = -I$(JDKDIR)/include -I$(JDKDIR)/include/linux LDPREFIX = LD_LIBRARY_PATH=$(SOLIB) EXTRALIBS = -lm -L$(HOME)/lib -ldmalloc M4FLAGS = -Dfcb_bytes_in_rec=131072 TIME = time', cbf_system,`AIX',` ######################################################### # # Appropriate compiler definitions for AIX # ######################################################### CC = xlc C++ = xlC CFLAGS = -g -O2 -Wall F90C = xlf90 F90FLAGS = -g -qsuffix=f=f90 F90LDFLAGS = M4FLAGS = -Dfcb_bytes_in_rec=131072 EXTRALIBS = -lm TIME = time', cbf_system,`MINGW',` ######################################################### # # Appropriate compiler definitions for Mingw # Also change from symlinks to copies and # use default paths for utilities # ######################################################### CC = gcc C++ = g++ CFLAGS = -g -O2 -Wall -static -I/usr/include -fno-strict-aliasing F90C = g95 F90FLAGS = -g F90LDFLAGS = M4FLAGS = -Dfcb_bytes_in_rec=4096 SOCFLAGS = -D_JNI_IMPLEMENTATION_ SOLDFLAGS = -shared -Wl,--kill-at JAVAINCLUDES = -I$(JDKDIR)/include -I$(JDKDIR)/include/win32 EXTRALIBS = -L$(REGEXDIR) -lregex -lm REGEXDEP = $(REGEXDIR)/libregex.a TIME = PYCBFEXT = pyd PYCBFBOPT = --compiler=mingw32 SETUP_PY = setup_MINGW.py JDKDIR = /java JSWIG = /swig/swig -java PYSWIG = /swig/swig -python SLFLAGS = --use_cp SHAR = shar AR = ar RANLIB = ranlib DECOMPRESS = bunzip2', cbf_system,`IRIX_gcc',` ######################################################### # # Appropriate compiler definitions for IRIX w. gcc # No f90 # use default paths for utilities # ######################################################### CC = gcc C++ = g++ CFLAGS = -g -O2 -Wall F90C = F90FLAGS = M4FLAGS = -Dfcb_bytes_in_rec=4096 EXTRALIBS = -lm TIME = SHAR = shar AR = ar RANLIB = DECOMPRESS = bunzip2', ` ######################################################### # # Appropriate compiler definitions for default (Linux) # ######################################################### CC = gcc C++ = g++ CFLAGS = -g -O2 -Wall -D_USE_XOPEN_EXTENDED -fno-strict-aliasing F90C = gfortran F90FLAGS = -g -fno-range-check F90LDFLAGS = SOCFLAGS = -fPIC SOLDFLAGS = -shared -Wl,-rpath,$(INSTALLDIR)/lib JAVAINCLUDES = -I$(JDKDIR)/include -I$(JDKDIR)/include/linux LDPREFIX = LD_LIBRARY_PATH=$(SOLIB) EXTRALIBS = -lm M4FLAGS = -Dfcb_bytes_in_rec=131072 TIME = time')` ifneq ($(NOFORTRAN),) F90C = endif # # Directories # ROOT = . LIB = $(ROOT)/lib SOLIB = $(ROOT)/solib JCBF = $(ROOT)/jcbf JAVADIR = $(ROOT)/java BIN = $(ROOT)/bin SRC = $(ROOT)/src INCLUDE = $(ROOT)/include M4 = $(ROOT)/m4 PYCBF = $(ROOT)/pycbf EXAMPLES = $(ROOT)/examples DECTRIS_EXAMPLES = $(EXAMPLES)/dectris_cbf_template_test DOC = $(ROOT)/doc GRAPHICS = $(ROOT)/html_graphics DATADIRI = $(ROOT)/../CBFlib_$(VERSION)_Data_Files_Input DATADIRO = $(ROOT)/../CBFlib_$(VERSION)_Data_Files_Output DATADIRS = $(ROOT)/../CBFlib_$(VERSION)_Data_Files_Output_Sigs_Only INSTALLDIR = $(HOME) # # URLs from which to retrieve the data directories # DATAURLBASE = http://downloads.sf.net/cbflib/ DATAURLI = $(DATAURLBASE)/CBFlib_$(VERSION)_Data_Files_Input.tar.gz DATAURLO = $(DATAURLBASE)/CBFlib_$(VERSION)_Data_Files_Output.tar.gz DATAURLS = $(DATAURLBASE)/CBFlib_$(VERSION)_Data_Files_Output_Sigs_Only.tar.gz # # URLs from which to retrieve needed external package snapshots # 'm4_ifelse(cbf_use_pycifrw,`yes',` PYCIFRWURL = http://downloads.sf.net/cbflib/$(PYCIFRW).tar.gz PLYURL = http://www.dabeaz.com/ply/$(PLY).tar.gz ')m4_dnl `REGEXURL = http://downloads.sf.net/cbflib/$(REGEX).tar.gz TIFFURL = http://downloads.sf.net/cbflib/$(TIFF).tar.gz # # Include directories # INCLUDES = -I$(INCLUDE) -I$(SRC) ###################################################################### # You should not need to make modifications below this line # ###################################################################### # # Suffixes of files to be used or built # .SUFFIXES: .c .o .f90 .m4 .m4.f90: m4 -P $(M4FLAGS) $< > $@ ifneq ($(F90C),) .f90.o: $(F90C) $(F90FLAGS) -c $< -o $@ endif # # Common dependencies # COMMONDEP = Makefile # # Source files # SOURCE = $(SRC)/cbf.c \ $(SRC)/cbf_alloc.c \ $(SRC)/cbf_ascii.c \ $(SRC)/cbf_binary.c \ $(SRC)/cbf_byte_offset.c \ $(SRC)/cbf_canonical.c \ $(SRC)/cbf_codes.c \ $(SRC)/cbf_compress.c \ $(SRC)/cbf_context.c \ $(SRC)/cbf_copy.c \ $(SRC)/cbf_file.c \ $(SRC)/cbf_getopt.c \ $(SRC)/cbf_lex.c \ $(SRC)/cbf_packed.c \ $(SRC)/cbf_predictor.c \ $(SRC)/cbf_read_binary.c \ $(SRC)/cbf_read_mime.c \ $(SRC)/cbf_simple.c \ $(SRC)/cbf_string.c \ $(SRC)/cbf_stx.c \ $(SRC)/cbf_tree.c \ $(SRC)/cbf_uncompressed.c \ $(SRC)/cbf_write.c \ $(SRC)/cbf_write_binary.c \ $(SRC)/cbf_ws.c \ $(SRC)/md5c.c 'm4_ifelse(cbf_use_pycifrw,`yes',` PYSOURCE = $(SRC)/drel_lex.py \ $(SRC)/drel_yacc.py \ $(SRC)/drelc.py \ $(SRC)/drel_prep.py ')m4_dnl ` F90SOURCE = $(SRC)/fcb_atol_wcnt.f90 \ $(SRC)/fcb_ci_strncmparr.f90 \ $(SRC)/fcb_exit_binary.f90 \ $(SRC)/fcb_nblen_array.f90 \ $(SRC)/fcb_next_binary.f90 \ $(SRC)/fcb_open_cifin.f90 \ $(SRC)/fcb_packed.f90 \ $(SRC)/fcb_read_bits.f90 \ $(SRC)/fcb_read_byte.f90 \ $(SRC)/fcb_read_image.f90 \ $(SRC)/fcb_read_line.f90 \ $(SRC)/fcb_read_xds_i2.f90 \ $(SRC)/fcb_skip_whitespace.f90 \ $(EXAMPLES)/test_fcb_read_image.f90 \ $(EXAMPLES)/test_xds_binary.f90 # # Header files # HEADERS = $(INCLUDE)/cbf.h \ $(INCLUDE)/cbf_alloc.h \ $(INCLUDE)/cbf_ascii.h \ $(INCLUDE)/cbf_binary.h \ $(INCLUDE)/cbf_byte_offset.h \ $(INCLUDE)/cbf_canonical.h \ $(INCLUDE)/cbf_codes.h \ $(INCLUDE)/cbf_compress.h \ $(INCLUDE)/cbf_context.h \ $(INCLUDE)/cbf_copy.h \ $(INCLUDE)/cbf_file.h \ $(INCLUDE)/cbf_getopt.h \ $(INCLUDE)/cbf_lex.h \ $(INCLUDE)/cbf_packed.h \ $(INCLUDE)/cbf_predictor.h \ $(INCLUDE)/cbf_read_binary.h \ $(INCLUDE)/cbf_read_mime.h \ $(INCLUDE)/cbf_simple.h \ $(INCLUDE)/cbf_string.h \ $(INCLUDE)/cbf_stx.h \ $(INCLUDE)/cbf_tree.h \ $(INCLUDE)/cbf_uncompressed.h \ $(INCLUDE)/cbf_write.h \ $(INCLUDE)/cbf_write_binary.h \ $(INCLUDE)/cbf_ws.h \ $(INCLUDE)/global.h \ $(INCLUDE)/cbff.h \ $(INCLUDE)/md5.h # # m4 macro files # M4FILES = $(M4)/fcblib_defines.m4 \ $(M4)/fcb_exit_binary.m4 \ $(M4)/fcb_next_binary.m4 \ $(M4)/fcb_open_cifin.m4 \ $(M4)/fcb_packed.m4 \ $(M4)/fcb_read_bits.m4 \ $(M4)/fcb_read_image.m4 \ $(M4)/fcb_read_xds_i2.m4 \ $(M4)/test_fcb_read_image.m4 \ $(M4)/test_xds_binary.m4 # # Documentation files # DOCUMENTS = $(DOC)/CBFlib.html \ $(DOC)/CBFlib.txt \ $(DOC)/CBFlib_NOTICES.html \ $(DOC)/CBFlib_NOTICES.txt \ $(DOC)/ChangeLog \ $(DOC)/ChangeLog.html \ $(DOC)/MANIFEST \ $(DOC)/gpl.txt $(DOC)/lgpl.txt # # HTML Graphics files # JPEGS = $(GRAPHICS)/CBFbackground.jpg \ $(GRAPHICS)/CBFbig.jpg \ $(GRAPHICS)/CBFbutton.jpg \ $(GRAPHICS)/cbflibbackground.jpg \ $(GRAPHICS)/cbflibbig.jpg \ $(GRAPHICS)/cbflibbutton.jpg \ $(GRAPHICS)/cifhome.jpg \ $(GRAPHICS)/iucrhome.jpg \ $(GRAPHICS)/noticeButton.jpg # # Default: instructions # default: @echo ''` ''` @echo ''`***************************************************************''` @echo ''` ''` @echo ''` PLEASE READ README and doc/CBFlib_NOTICES.txt''` @echo ''` ''` @echo ''` Before making the CBF library and example programs, check''` @echo ''` that the C compiler name and flags are correct:''` @echo ''` ''` @echo ''` The current values are:''` @echo ''` ''` @echo ''` $(CC) $(CFLAGS) $(NOLLFLAG) $(PYCIFRWFLAG)''` @echo ''` ''` @echo ''` Before installing the CBF library and example programs, check''` @echo ''` that the install directory is correct:''` @echo ''` ''` @echo ''` The current value :''` @echo ''` ''` @echo ''` $(INSTALLDIR) ''` @echo ''` ''` @echo ''` To compile the CBF library and example programs type:''` @echo ''` ''` @echo ''` make clean''` @echo ''` make all''` @echo ''` ''` @echo ''` To compile the CBF library as a shared object library, type:''` @echo ''` ''` @echo ''` make shared''` @echo ''` ''` @echo ''` To compile the Java wrapper classes for CBF library, type:''` @echo ''` ''` @echo ''` make javawrapper''` @echo ''` ''` @echo ''` To run a set of tests type:''` @echo ''` ''` @echo ''` make tests''` @echo ''` ''` @echo ''` To run some java tests type:''` @echo ''` ''` @echo ''` make javatests''` @echo ''` ''` @echo ''` The tests assume that several data files are in the directories''` @echo ''` $(DATADIRI) and $(DATADIRO)''` @echo ''` ''` @echo ''` Alternatively tests can be run comparing MD5 signatures only by''` @echo ''` ''` @echo ''` make tests_sigs_only''` @echo ''` ''` @echo ''` These signature only tests save space and download time by''` @echo ''` assuming that input data files and the output signatures''` @echo ''` are in the directories''` @echo ''` $(DATADIRI) and $(DATADIRS)''` @echo ''` ''` @echo ''` These directory can be obtained from''` @echo ''` ''` @echo ''` $(DATAURLI) ''` @echo ''` $(DATAURLO) ''` @echo ''` $(DATAURLS) ''` @echo ''` ''` @echo ''` To clean up the directories type:''` @echo ''` ''` @echo ''` make clean''` @echo ''` ''` @echo ''` To install the library and binaries type:''` @echo ''` ''` @echo ''` make install''` @echo ''` ''` @echo ''`***************************************************************''` @echo ''` ''` # # Compile the library and examples # all:: $(BIN) $(SOURCE) $(F90SOURCE) $(HEADERS) \ 'm4_ifelse(cbf_use_pycifrw,`yes',` $(PYCIFRW) $(PLY) \ ')m4_dnl ` symlinksdone $(REGEXDEP) \ $(LIB)/libcbf.a \ $(LIB)/libfcb.a \ $(LIB)/libimg.a \ $(BIN)/adscimg2cbf \ $(BIN)/cbf2adscimg \ $(BIN)/convert_image \ $(BIN)/convert_minicbf \ $(BIN)/sequence_match \ $(BIN)/arvai_test \ $(BIN)/makecbf \ $(BIN)/img2cif \ $(BIN)/adscimg2cbf \ $(BIN)/cif2cbf \ $(BIN)/testcell \ $(BIN)/cif2c \ $(BIN)/testreals \ $(BIN)/testflat \ $(BIN)/testflatpacked ifneq ($(F90C),) all:: $(BIN)/test_xds_binary \ $(BIN)/test_fcb_read_image endif shared: $(SOLIB)/libcbf.so $(SOLIB)/libfcb.so $(SOLIB)/libimg.so javawrapper: shared $(JCBF) $(JCBF)/cbflib-$(VERSION).jar $(SOLIB)/libcbf_wrap.so ifneq ($(CBFLIB_USE_PYCIFRW),) PYCIFRWDEF = -Dcbf_use_pycifrw=yes else PYCIFRWDEF = endif Makefiles: Makefile \ Makefile_LINUX \ Makefile_LINUX_64 \ Makefile_LINUX_gcc42 \ Makefile_LINUX_DMALLOC \ Makefile_LINUX_gcc42_DMALLOC \ Makefile_OSX \ Makefile_OSX_gcc42 \ Makefile_OSX_gcc42_DMALLOC \ Makefile_AIX \ Makefile_MINGW \ Makefile_IRIX_gcc Makefile_LINUX: $(M4)/Makefile.m4 -cp Makefile_LINUX Makefile_LINUX_old m4 -P $(PYCIFRWDEF) -Dcbf_system=LINUX $(M4)/Makefile.m4 > Makefile_LINUX Makefile_LINUX_DMALLOC: $(M4)/Makefile.m4 -cp Makefile_LINUX Makefile_LINUX_old m4 -P $(PYCIFRWDEF) -Dcbf_system=LINUX_DMALLOC $(M4)/Makefile.m4 > Makefile_LINUX_DMALLOC Makefile_LINUX_64: $(M4)/Makefile.m4 -cp Makefile_LINUX_64 Makefile_LINUX_64_old m4 -P $(PYCIFRWDEF) -Dcbf_system=LINUX_64 $(M4)/Makefile.m4 > Makefile_LINUX_64 Makefile_LINUX_gcc42: $(M4)/Makefile.m4 -cp Makefile_LINUX_gcc42 Makefile_LINUX_gcc42_old m4 -P $(PYCIFRWDEF) -Dcbf_system=LINUX_gcc42 $(M4)/Makefile.m4 > Makefile_LINUX_gcc42 Makefile_LINUX_gcc42_DMALLOC: $(M4)/Makefile.m4 -cp Makefile_LINUX_gcc42 Makefile_LINUX_gcc42_old m4 -P $(PYCIFRWDEF) -Dcbf_system=LINUX_gcc42_DMALLOC $(M4)/Makefile.m4 > Makefile_LINUX_gcc42_DMALLOC Makefile_OSX: $(M4)/Makefile.m4 -cp Makefile_OSX Makefile_OSX_old m4 -P $(PYCIFRWDEF) -Dcbf_system=OSX $(M4)/Makefile.m4 > Makefile_OSX Makefile_OSX_gcc42: $(M4)/Makefile.m4 -cp Makefile_OSX_gcc42 Makefile_OSX_gcc42_old m4 -P $(PYCIFRWDEF) -Dcbf_system=OSX_gcc42 $(M4)/Makefile.m4 > Makefile_OSX_gcc42 Makefile_OSX_gcc42_DMALLOC: $(M4)/Makefile.m4 -cp Makefile_OSX_gcc42 Makefile_OSX_gcc42_old m4 -P $(PYCIFRWDEF) -Dcbf_system=OSX_gcc42_DMALLOC $(M4)/Makefile.m4 > Makefile_OSX_gcc42_DMALLOC Makefile_AIX: $(M4)/Makefile.m4 -cp Makefile_AIX Makefile_AIX_old m4 -P $(PYCIFRWDEF) -Dcbf_system=AIX $(M4)/Makefile.m4 > Makefile_AIX Makefile_MINGW: $(M4)/Makefile.m4 -cp Makefile_MINGW Makefile_MINGW_old m4 -P $(PYCIFRWDEF) -Dcbf_system=MINGW $(M4)/Makefile.m4 > Makefile_MINGW Makefile_IRIX_gcc: $(M4)/Makefile.m4 -cp Makefile_IRIX_gcc Makefile_IRIX_gcc_old m4 -P $(PYCIFREDEF) -Dcbf_system=IRIX_gcc $(M4)/Makefile.m4 > Makefile_IRIX_gcc Makefile: $(M4)/Makefile.m4 -cp Makefile Makefile_old m4 -P $(PYCIFRWDEF) -Dcbf_system=default $(M4)/Makefile.m4 > Makefile symlinksdone: chmod a+x .symlinks chmod a+x .undosymlinks chmod a+x doc/.symlinks chmod a+x doc/.undosymlinks chmod a+x libtool/.symlinks chmod a+x libtool/.undosymlinks ./.symlinks $(SLFLAGS) touch symlinksdone install: all $(INSTALLDIR) $(INSTALLDIR)/lib $(INSTALLDIR)/bin \ $(INSTALLDIR)/include $(INSTALLDIR)/include/cbflib \ $(PYSOURCE) -chmod -R 755 $(INSTALLDIR)/include/cbflib -chmod 755 $(INSTALLDIR)/lib/libcbf.a -cp $(INSTALLDIR)/lib/libcbf.a $(INSTALLDIR)/lib/libcbf_old.a cp $(LIB)/libcbf.a $(INSTALLDIR)/lib/libcbf.a -cp $(INSTALLDIR)/lib/libimg.a $(INSTALLDIR)/lib/libimg_old.a cp $(LIB)/libimg.a $(INSTALLDIR)/lib/libimg.a -cp $(INSTALLDIR)/bin/adscimg2cbf $(INSTALLDIR)/bin/adscimg2cbf_old cp $(BIN)/adscimg2cbf $(INSTALLDIR)/bin/adscimg2cbf -cp $(INSTALLDIR)/bin/cbf2adscimg $(INSTALLDIR)/bin/cbf2adscimg_old cp $(BIN)/cbf2adscimg $(INSTALLDIR)/bin/cbf2adscimg -cp $(INSTALLDIR)/bin/convert_image $(INSTALLDIR)/bin/convert_image_old cp $(BIN)/convert_image $(INSTALLDIR)/bin/convert_image -cp $(INSTALLDIR)/bin/convert_minicbf $(INSTALLDIR)/bin/convert_minicbf_old cp $(BIN)/convert_minicbf $(INSTALLDIR)/bin/convert_minicbf -cp $(INSTALLDIR)/bin/makecbf $(INSTALLDIR)/bin/makecbf_old cp $(BIN)/makecbf $(INSTALLDIR)/bin/makecbf -cp $(INSTALLDIR)/bin/img2cif $(INSTALLDIR)/bin/img2cif_old cp $(BIN)/img2cif $(INSTALLDIR)/bin/img2cif -cp $(INSTALLDIR)/bin/cif2cbf $(INSTALLDIR)/bin/cif2cbf_old cp $(BIN)/cif2cbf $(INSTALLDIR)/bin/cif2cbf -cp $(INSTALLDIR)/bin/sequence_match $(INSTALLDIR)/bin/sequence_match_old cp $(BIN)/sequence_match $(INSTALLDIR)/bin/sequence_match -cp $(INSTALLDIR)/bin/arvai_test $(INSTALLDIR)/bin/arvai_test_old cp $(BIN)/arvai_test $(INSTALLDIR)/bin/arvai_test -cp $(INSTALLDIR)/bin/cif2c $(INSTALLDIR)/bin/cif2c_old cp $(BIN)/cif2c $(INSTALLDIR)/bin/cif2c -cp $(INSTALLDIR)/bin/testreals $(INSTALLDIR)/bin/testreals_old cp $(BIN)/testreals $(INSTALLDIR)/bin/testreals -cp $(INSTALLDIR)/bin/testflat $(INSTALLDIR)/bin/testflat_old cp $(BIN)/testflat $(INSTALLDIR)/bin/testflat -cp $(INSTALLDIR)/bin/testflatpacked $(INSTALLDIR)/bin/testflatpacked_old cp $(BIN)/testflatpacked $(INSTALLDIR)/bin/testflatpacked 'm4_ifelse(cbf_use_pycifrw,`yes',` cp $(SRC)/drel_lex.py $(INSTALLDIR)/bin/drel_lex.py cp $(SRC)/drel_yacc.py $(INSTALLDIR)/bin/drel_yacc.py cp $(SRC)/drelc.py $(INSTALLDIR)/bin/drelc.py cp $(SRC)/drel_prep.py $(INSTALLDIR)/bin/drel_prep.py ')m4_dnl ` chmod -R 755 $(INSTALLDIR)/include/cbflib -rm -rf $(INSTALLDIR)/include/cbflib_old -cp -r $(INSTALLDIR)/include/cbflib $(INSTALLDIR)/include/cbflib_old -rm -rf $(INSTALLDIR)/include/cbflib cp -r $(INCLUDE) $(INSTALLDIR)/include/cbflib chmod 644 $(INSTALLDIR)/lib/libcbf.a chmod 755 $(INSTALLDIR)/bin/convert_image chmod 755 $(INSTALLDIR)/bin/convert_minicbf chmod 755 $(INSTALLDIR)/bin/makecbf chmod 755 $(INSTALLDIR)/bin/img2cif chmod 755 $(INSTALLDIR)/bin/cif2cbf chmod 755 $(INSTALLDIR)/bin/sequence_match chmod 755 $(INSTALLDIR)/bin/arvai_test chmod 755 $(INSTALLDIR)/bin/cif2c chmod 755 $(INSTALLDIR)/bin/testreals chmod 755 $(INSTALLDIR)/bin/testflat chmod 755 $(INSTALLDIR)/bin/testflatpacked chmod 644 $(INSTALLDIR)/include/cbflib/*.h 'm4_ifelse(cbf_use_pycifrw,`yes',` # # PyCifRW # $(PYCIFRW): $(DOWNLOAD) $(PYCIFRWURL) tar -xvf $(PYCIFRW).tar.gz -rm $(PYCIFRW).tar.gz (cd $(PYCIFRW); python setup.py install ) # # PLY # $(PLY): $(DOWNLOAD) $(PLYURL) tar -xvf $(PLY).tar.gz -rm $(PLY).tar.gz (cd $(PLY); python setup.py install ) ')m4_dnl ` # # REGEX # ifneq ($(REGEXDEP),) $(REGEXDEP): $(REGEX) (cd $(REGEX); ./configure; make install) endif $(REGEX): $(DOWNLOAD) $(REGEXURL) tar -xvf $(REGEX).tar.gz -rm $(REGEX).tar.gz # # TIFF # $(TIFF): $(DOWNLOAD) $(TIFFURL) tar -xvf $(TIFF).tar.gz -rm $(TIFF).tar.gz (cd $(TIFF); ./configure --prefix=$(TIFFPREFIX); make install) # # Directories # $(INSTALLDIR): mkdir -p $(INSTALLDIR) $(INSTALLDIR)/lib: $(INSTALLDIR) mkdir -p $(INSTALLDIR)/lib $(INSTALLDIR)/bin: $(INSTALLDIR) mkdir -p $(INSTALLDIR)/bin $(INSTALLDIR)/include: $(INSTALLDIR) mkdir -p $(INSTALLDIR)/include $(INSTALLDIR)/include/cbflib: $(INSTALLDIR)/include mkdir -p $(INSTALLDIR)/include/cbflib $(LIB): mkdir $@ $(BIN): mkdir $@ $(SOLIB): mkdir $@ $(JCBF): mkdir $@ # # Parser # $(SRC)/cbf_stx.c: $(SRC)/cbf.stx.y bison $(SRC)/cbf.stx.y -o $(SRC)/cbf.stx.tab.c -d mv $(SRC)/cbf.stx.tab.c $(SRC)/cbf_stx.c mv $(SRC)/cbf.stx.tab.h $(INCLUDE)/cbf_stx.h # # CBF library # $(LIB)/libcbf.a: $(SOURCE) $(HEADERS) $(COMMONDEP) $(LIB) $(CC) $(CFLAGS) $(NOLLFLAG) $(PYCIFRWFLAG) $(INCLUDES) $(WARNINGS) -c $(SOURCE) $(AR) cr $@ *.o mv *.o $(LIB) ifneq ($(RANLIB),) $(RANLIB) $@ endif $(SOLIB)/libcbf.so: $(SOURCE) $(HEADERS) $(COMMONDEP) $(SOLIB) $(CC) $(CFLAGS) $(NOLLFLAG) $(PYCIFRWFLAG) $(SOCFLAGS) $(INCLUDES) $(WARNINGS) -c $(SOURCE) $(CC) -o $@ *.o $(SOLDFLAGS) $(EXTRALIBS) rm *.o # # IMG library # $(LIB)/libimg.a: $(EXAMPLES)/img.c $(HEADERS) $(COMMONDEP) $(LIB) $(CC) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) -c $(EXAMPLES)/img.c $(AR) cr $@ img.o ifneq ($(RANLIB),) $(RANLIB) $@ endif rm img.o $(SOLIB)/libimg.so: $(SOURCE) $(HEADERS) $(COMMONDEP) $(SOLIB) $(CC) $(CFLAGS) $(NOLLFLAG) $(SOCFLAGS) $(INCLUDES) $(WARNINGS) -c $(EXAMPLES)/img.c $(CC) -o $@ img.o $(SOLDFLAGS) rm img.o # # CBF and IMG libraries # CBF_IMG_LIBS: $(LIB)/libcbf.a $(LIB)/libimg.a # # FCB library # $(LIB)/libfcb.a: $(F90SOURCE) $(COMMONDEP) $(LIB) ifneq ($(F90C),) $(F90C) $(F90FLAGS) -c $(F90SOURCE) $(AR) cr $@ *.o ifneq ($(RANLIB),) $(RANLIB) $@ endif rm *.o else echo "Define F90C to build $(LIB)/libfcb.a" endif $(SOLIB)/libfcb.so: $(F90SOURCE) $(HEADERS) $(COMMONDEP) $(SOLIB) ifneq ($(F90C),) $(F90C) $(F90FLAGS) $(SOCFLAGS) $(INCLUDES) $(WARNINGS) -c $(F90SOURCE) $(F90C) $(F90FLAGS) -o $@ *.o $(SOLDFLAGS) rm *.o else echo "Define F90C to build $(SOLIB)/libfcb.so" endif # # Python bindings # $(PYCBF)/_pycbf.$(PYCBFEXT): $(PYCBF) $(LIB)/libcbf.a \ $(PYCBF)/$(SETUP_PY) \ $(LIB)/libfcb.a \ $(LIB)/libimg.a \ $(PYCBF)/pycbf.i \ $(PYCBF)/cbfhandlewrappers.i \ $(PYCBF)/cbfdetectorwrappers.i \ $(PYCBF)/cbfgenericwrappers.i \ $(PYCBF)/cbfgoniometerwrappers.i (cd $(PYCBF); python $(SETUP_PY) build $(PYCBFBOPT); cp build/lib.*/_pycbf.$(PYCBFEXT) .) $(PYCBF)/setup.py: $(M4)/setup_py.m4 (m4 -P -Dregexlib=NOREGEXLIB -Dregexlibdir=NOREGEXLIBDIR $(M4)/setup_py.m4 > $@) $(PYCBF)/setup_MINGW.py: m4/setup_py.m4 (m4 -P -Dregexlib=regex -Dregexlibdir=$(REGEXDIR) $(M4)/setup_py.m4 > $@) $(LIB)/_pycbf.$(PYCBFEXT): $(PYCBF)/_pycbf.$(PYCBFEXT) cp $(PYCBF)/_pycbf.$(PYCBFEXT) $(LIB)/_pycbf.$(PYCBFEXT) $(PYCBF)/pycbf.pdf: $(PYCBF)/pycbf.w (cd $(PYCBF); \ $(NUWEB) pycbf; \ latex pycbf; \ $(NUWEB) pycbf; \ latex pycbf; \ dvipdfm pycbf ) $(PYCBF)/CBFlib.txt: $(DOC)/CBFlib.html links -dump $(DOC)/CBFlib.html > $(PYCBF)/CBFlib.txt $(PYCBF)/cbfhandlewrappers.i \ $(PYCBF)/cbfdetectorwrappers.i \ $(PYCBF)/cbfgenericwrappers.i \ $(PYCBF)/cbfgoniometerwrappers.i: $(PYCBF)/CBFlib.txt $(PYCBF)/make_pycbf.py (cd $(PYCBF); python make_pycbf.py; $(PYSWIG) pycbf.i; python setup.py build) # # Java bindings # $(JCBF)/cbflib-$(VERSION).jar: $(JCBF) $(JCBF)/jcbf.i $(JSWIG) -I$(INCLUDE) -package org.iucr.cbflib -outdir $(JCBF) $(JCBF)/jcbf.i $(JAVAC) -d . $(JCBF)/*.java $(JAR) cf $@ org $(SOLIB)/libcbf_wrap.so: $(JCBF)/cbflib-$(VERSION).jar $(SOLIB)/libcbf.so $(CC) $(CFLAGS) $(NOLLFLAG) $(SOCFLAGS) $(INCLUDES) $(WARNINGS) $(JAVAINCLUDES) -c $(JCBF)/jcbf_wrap.c $(CC) -o $@ jcbf_wrap.o $(SOLDFLAGS) -L$(SOLIB) -lcbf rm jcbf_wrap.o # # F90SOURCE # $(SRC)/fcb_exit_binary.f90: $(M4)/fcb_exit_binary.m4 $(M4)/fcblib_defines.m4 (cd $(M4); m4 -P $(M4FLAGS) fcb_exit_binary.m4) > $(SRC)/fcb_exit_binary.f90 $(SRC)/fcb_next_binary.f90: $(M4)/fcb_next_binary.m4 $(M4)/fcblib_defines.m4 (cd $(M4); m4 -P $(M4FLAGS) fcb_next_binary.m4) > $(SRC)/fcb_next_binary.f90 $(SRC)/fcb_open_cifin.f90: $(M4)/fcb_open_cifin.m4 $(M4)/fcblib_defines.m4 (cd $(M4); m4 -P $(M4FLAGS) fcb_open_cifin.m4) > $(SRC)/fcb_open_cifin.f90 $(SRC)/fcb_packed.f90: $(M4)/fcb_packed.m4 $(M4)/fcblib_defines.m4 (cd $(M4); m4 -P $(M4FLAGS) fcb_packed.m4) > $(SRC)/fcb_packed.f90 $(SRC)/fcb_read_bits.f90: $(M4)/fcb_read_bits.m4 $(M4)/fcblib_defines.m4 (cd $(M4); m4 -P $(M4FLAGS) fcb_read_bits.m4) > $(SRC)/fcb_read_bits.f90 $(SRC)/fcb_read_image.f90: $(M4)/fcb_read_image.m4 $(M4)/fcblib_defines.m4 (cd $(M4); m4 -P $(M4FLAGS) fcb_read_image.m4) > $(SRC)/fcb_read_image.f90 $(SRC)/fcb_read_xds_i2.f90: $(M4)/fcb_read_xds_i2.m4 $(M4)/fcblib_defines.m4 (cd $(M4); m4 -P $(M4FLAGS) fcb_read_xds_i2.m4) > $(SRC)/fcb_read_xds_i2.f90 $(EXAMPLES)/test_fcb_read_image.f90: $(M4)/test_fcb_read_image.m4 $(M4)/fcblib_defines.m4 (cd $(M4); m4 -P $(M4FLAGS) test_fcb_read_image.m4) > $(EXAMPLES)/test_fcb_read_image.f90 $(EXAMPLES)/test_xds_binary.f90: $(M4)/test_xds_binary.m4 $(M4)/fcblib_defines.m4 (cd $(M4); m4 -P $(M4FLAGS) test_xds_binary.m4) > $(EXAMPLES)/test_xds_binary.f90 # # convert_image example program # $(BIN)/convert_image: $(LIB)/libcbf.a $(EXAMPLES)/convert_image.c $(EXAMPLES)/img.c \ $(GOPTLIB) $(GOPTINC) $(CC) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/convert_image.c $(EXAMPLES)/img.c $(GOPTLIB) -L$(LIB) \ -lcbf $(EXTRALIBS) -o $@ # # convert_minicbf example program # $(BIN)/convert_minicbf: $(LIB)/libcbf.a $(EXAMPLES)/convert_minicbf.c \ $(GOPTLIB) $(GOPTINC) $(CC) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/convert_minicbf.c $(GOPTLIB) -L$(LIB) \ -lcbf $(EXTRALIBS) -o $@ # # makecbf example program # $(BIN)/makecbf: $(LIB)/libcbf.a $(EXAMPLES)/makecbf.c $(LIB)/libimg.a $(CC) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/makecbf.c -L$(LIB) \ -lcbf $(EXTRALIBS) -limg -o $@ # # adscimg2cbf example program # $(BIN)/adscimg2cbf: $(LIB)/libcbf.a $(EXAMPLES)/adscimg2cbf.c $(EXAMPLES)/adscimg2cbf_sub.c $(CC) $(CFLAGS) $(NOLLFLAG) -D_SVID_SOURCE $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/adscimg2cbf.c $(EXAMPLES)/adscimg2cbf_sub.c -L$(LIB) \ -lcbf $(EXTRALIBS) -o $@ # # cbf2adscimg example program # $(BIN)/cbf2adscimg: $(LIB)/libcbf.a $(EXAMPLES)/cbf2adscimg.c $(EXAMPLES)/cbf2adscimg_sub.c $(CC) $(CFLAGS) $(NOLLFLAG) -D_SVID_SOURCE $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/cbf2adscimg.c $(EXAMPLES)/cbf2adscimg_sub.c -L$(LIB) \ -lcbf $(EXTRALIBS) -o $@ # # changtestcompression example program # $(BIN)/changtestcompression: $(LIB)/libcbf.a $(EXAMPLES)/changtestcompression.c $(CC) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/changtestcompression.c -L$(LIB) \ -lcbf $(EXTRALIBS) -o $@ # # img2cif example program # $(BIN)/img2cif: $(LIB)/libcbf.a $(EXAMPLES)/img2cif.c $(LIB)/libimg.a \ $(GOPTLIB) $(GOTPINC) $(CC) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/img2cif.c $(GOPTLIB) -L$(LIB) \ -lcbf $(EXTRALIBS) -limg -o $@ # # cif2cbf example program # $(BIN)/cif2cbf: $(LIB)/libcbf.a $(EXAMPLES)/cif2cbf.c $(LIB)/libimg.a \ $(GOPTLIB) $(GOPTINC) $(CC) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/cif2cbf.c $(GOPTLIB) -L$(LIB) \ -lcbf $(EXTRALIBS) -limg -o $@ # # dectris cbf_template_t program # $(BIN)/cbf_template_t: $(DECTRIS_EXAMPLES)/cbf_template_t.c \ $(DECTRIS_EXAMPLES)/mx_cbf_t_extras.h \ $(DECTRIS_EXAMPLES)/mx_parms.h $(CC) $(CFLAGS) $(NOLLFLAG) -I $(DECTRIS_EXAMPLES) $(WARNINGS) \ $(DECTRIS_EXAMPLES)/cbf_template_t.c -o $@ # # testcell example program # $(BIN)/testcell: $(LIB)/libcbf.a $(EXAMPLES)/testcell.C $(C++) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/testcell.C -L$(LIB) \ -lcbf $(EXTRALIBS) -o $@ # # cif2c example program # $(BIN)/cif2c: $(LIB)/libcbf.a $(EXAMPLES)/cif2c.c $(C++) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/cif2c.c -L$(LIB) \ -lcbf $(EXTRALIBS) -o $@ # # sauter_test example program # $(BIN)/sauter_test: $(LIB)/libcbf.a $(EXAMPLES)/sauter_test.C $(C++) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/sauter_test.C -L$(LIB) \ -lcbf $(EXTRALIBS) -o $@ # # sequence_match example program # $(BIN)/sequence_match: $(LIB)/libcbf.a $(EXAMPLES)/sequence_match.c $(LIB)/libimg.a \ $(GOPTLIB) $(GOPTINC) $(CC) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/sequence_match.c $(GOPTLIB) -L$(LIB) \ -lcbf $(EXTRALIBS) -limg -o $@ # # tiff2cbf example program # $(BIN)/tiff2cbf: $(LIB)/libcbf.a $(EXAMPLES)/tiff2cbf.c \ $(GOPTLIB) $(GOPTINC) $(TIFF) $(CC) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ -I$(TIFFPREFIX)/include $(EXAMPLES)/tiff2cbf.c $(GOPTLIB) -L$(LIB) \ -lcbf -L$(TIFFPREFIX)/lib -ltiff $(EXTRALIBS) -limg -o $@ # # Andy Arvai''`s buffered read test program # $(BIN)/arvai_test: $(LIB)/libcbf.a $(EXAMPLES)/arvai_test.c $(LIB)/libimg.a \ $(GOPTLIB) $(GOPTINC) $(CC) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/arvai_test.c $(GOPTLIB) -L$(LIB) \ -lcbf $(EXTRALIBS) -limg -o $@ # # testreals example program # $(BIN)/testreals: $(LIB)/libcbf.a $(EXAMPLES)/testreals.c $(CC) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/testreals.c -L$(LIB) \ -lcbf $(EXTRALIBS) -o $@ # # testflat example program # $(BIN)/testflat: $(LIB)/libcbf.a $(EXAMPLES)/testflat.c $(CC) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/testflat.c -L$(LIB) \ -lcbf $(EXTRALIBS) -o $@ # # testflatpacked example program # $(BIN)/testflatpacked: $(LIB)/libcbf.a $(EXAMPLES)/testflatpacked.c $(CC) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/testflatpacked.c -L$(LIB) \ -lcbf $(EXTRALIBS) -o $@ ifneq ($(F90C),) # # test_xds_binary example program # $(BIN)/test_xds_binary: $(LIB)/libfcb.a $(EXAMPLES)/test_xds_binary.f90 $(F90C) $(F90FLAGS) $(F90LDFLAGS) $(EXAMPLES)/test_xds_binary.f90 \ -L$(LIB) -lfcb -o $@ # # test_fcb_read_image example program # $(BIN)/test_fcb_read_image: $(LIB)/libfcb.a $(EXAMPLES)/test_fcb_read_image.f90 $(F90C) $(F90FLAGS) $(F90LDFLAGS) $(EXAMPLES)/test_fcb_read_image.f90 \ -L$(LIB) -lfcb -o $@ endif # # testcbf (C) # $(BIN)/ctestcbf: $(EXAMPLES)/testcbf.c $(LIB)/libcbf.a $(CC) $(CFLAGS) $(NOLLFLAG) $(INCLUDES) $(WARNINGS) \ $(EXAMPLES)/testcbf.c -L$(LIB) \ -lcbf $(EXTRALIBS) -o $@ # # testcbf (Java) # $(BIN)/testcbf.class: $(EXAMPLES)/testcbf.java $(JCBF)/cbflib-$(VERSION).jar $(SOLIB)/libcbf_wrap.so $(JAVAC) -cp $(JCBF)/cbflib-$(VERSION).jar -d $(BIN) $(EXAMPLES)/testcbf.java # # Data files for tests # $(DATADIRI): (cd ..; $(DOWNLOAD) $(DATAURLI)) (cd ..; tar -zxvf CBFlib_$(VERSION)_Data_Files_Input.tar.gz) -(cd ..; rm CBFlib_$(VERSION)_Data_Files_Input.tar.gz) $(DATADIRO): (cd ..; $(DOWNLOAD) $(DATAURLO)) (cd ..; tar -zxvf CBFlib_$(VERSION)_Data_Files_Output.tar.gz) -(cd ..; rm CBFlib_$(VERSION)_Data_Files_Output.tar.gz) $(DATADIRS): (cd ..; $(DOWNLOAD) $(DATAURLS)) (cd ..; tar -zxvf CBFlib_$(VERSION)_Data_Files_Output_Sigs_Only.tar.gz) -(cd ..; rm CBFlib_$(VERSION)_Data_Files_Output_Sigs_Only.tar.gz) # Input Data Files TESTINPUT_BASIC = example.mar2300 DATADIRI_INPUT_BASIC = $(DATADIRI)/example.mar2300$(CEXT) TESTINPUT_EXTRA = 9ins.cif mb_LP_1_001.img insulin_pilatus6m.cbf testrealin.cbf \ testflatin.cbf testflatpackedin.cbf XRD1621.tif DATADIRI_INPUT_EXTRA = $(DATADIRI)/9ins.cif$(CEXT) $(DATADIRI)/mb_LP_1_001.img$(CEXT) \ $(DATADIRI)/insulin_pilatus6m.cbf$(CEXT) $(DATADIRI)/testrealin.cbf$(CEXT) \ $(DATADIRI)/testflatin.cbf$(CEXT) $(DATADIRI)/testflatpackedin.cbf$(CEXT) \ $(DATADIRI)/XRD1621.tif$(CEXT) # Output Data Files TESTOUTPUT = adscconverted_flat_orig.cbf \ adscconverted_orig.cbf converted_flat_orig.cbf converted_orig.cbf \ insulin_pilatus6mconverted_orig.cbf \ mb_LP_1_001_orig.cbf testcell_orig.prt \ test_xds_bin_testflatout_orig.out \ test_xds_bin_testflatpackedout_orig.out test_fcb_read_testflatout_orig.out \ test_fcb_read_testflatpackedout_orig.out \ XRD1621_orig.cbf XRD1621_I4encbC100_orig.cbf NEWTESTOUTPUT = adscconverted_flat.cbf \ adscconverted.cbf converted_flat.cbf converted.cbf \ insulin_pilatus6mconverted.cbf \ mb_LP_1_001.cbf testcell.prt \ test_xds_bin_testflatout.out \ test_xds_bin_testflatpackedout.out test_fcb_read_testflatout.out \ test_fcb_read_testflatpackedout.out \ XRD1621.cbf XRD1621_I4encbC100.cbf DATADIRO_OUTPUT = $(DATADIRO)/adscconverted_flat_orig.cbf$(CEXT) \ $(DATADIRO)/adscconverted_orig.cbf$(CEXT) \ $(DATADIRO)/converted_flat_orig.cbf$(CEXT) \ $(DATADIRO)/converted_orig.cbf$(CEXT) \ $(DATADIRO)/insulin_pilatus6mconverted_orig.cbf$(CEXT) \ $(DATADIRO)/mb_LP_1_001_orig.cbf$(CEXT) \ $(DATADIRO)/testcell_orig.prt$(CEXT) \ $(DATADIRO)/test_xds_bin_testflatout_orig.out$(CEXT) \ $(DATADIRO)/test_xds_bin_testflatpackedout_orig.out$(CEXT) \ $(DATADIRO)/test_fcb_read_testflatout_orig.out$(CEXT) \ $(DATADIRO)/test_fcb_read_testflatpackedout_orig.out$(CEXT) \ $(DATADIRO)/XRD1621_orig.cbf$(CEXT) \ $(DATADIRO)/XRD1621_I4encbC100_orig.cbf$(CEXT) DATADIRO_OUTPUT_SIGNATURES = $(DATADIRO)/adscconverted_flat_orig.cbf$(SEXT) \ $(DATADIRO)/adscconverted_orig.cbf$(SEXT) \ $(DATADIRO)/converted_flat_orig.cbf$(SEXT) \ $(DATADIRO)/converted_orig.cbf$(SEXT) \ $(DATADIRO)/insulin_pilatus6mconverted_orig.cbf$(SEXT) \ $(DATADIRO)/mb_LP_1_001_orig.cbf$(SEXT) \ $(DATADIRO)/testcell_orig.prt$(SEXT) \ $(DATADIRO)/test_xds_bin_testflatout_orig.out$(SEXT) \ $(DATADIRO)/test_xds_bin_testflatpackedout_orig.out$(SEXT) \ $(DATADIRO)/test_fcb_read_testflatout_orig.out$(SEXT) \ $(DATADIRO)/test_fcb_read_testflatpackedout_orig.out$(SEXT) \ $(DATADIRO)/XRD1621_orig.cbf$(SEXT) \ $(DATADIRO)/XRD1621_I4encbC100_orig.cbf$(SEXT) # Output Data File Signatures TESTOUTPUTSIGS = adscconverted_flat_orig.cbf$(SEXT) \ adscconverted_orig.cbf$(SEXT) converted_flat_orig.cbf$(SEXT) converted_orig.cbf$(SEXT) \ insulin_pilatus6mconverted_orig.cbf$(SEXT) \ mb_LP_1_001_orig.cbf$(SEXT) testcell_orig.prt$(SEXT) \ test_xds_bin_testflatout_orig.out$(SEXT) \ test_xds_bin_testflatpackedout_orig.out$(SEXT) test_fcb_read_testflatout_orig.out$(SEXT) \ test_fcb_read_testflatpackedout_orig.out$(SEXT) \ XRD1621_orig.cbf$(SEXT) DATADIRS_OUTPUT_SIGNATURES = $(DATADIRS)/adscconverted_flat_orig.cbf$(SEXT) \ $(DATADIRS)/adscconverted_orig.cbf$(SEXT) \ $(DATADIRS)/converted_flat_orig.cbf$(SEXT) \ $(DATADIRS)/converted_orig.cbf$(SEXT) \ $(DATADIRS)/insulin_pilatus6mconverted_orig.cbf$(SEXT) \ $(DATADIRS)/mb_LP_1_001_orig.cbf$(SEXT) \ $(DATADIRS)/testcell_orig.prt$(SEXT) \ $(DATADIRS)/test_xds_bin_testflatout_orig.out$(SEXT) \ $(DATADIRS)/test_xds_bin_testflatpackedout_orig.out$(SEXT) \ $(DATADIRS)/test_fcb_read_testflatout_orig.out$(SEXT) \ $(DATADIRS)/test_fcb_read_testflatpackedout_orig.out$(SEXT) \ $(DATADIRS)/XRD1621_orig.cbf$(SEXT) \ $(DATADIRS)/XRD1621_I4encbC100_orig.cbf$(SEXT) # Fetch Input Data Files $(TESTINPUT_BASIC): $(DATADIRI) $(DATADIRI_INPUT_BASIC) $(DECOMPRESS) < $(DATADIRI)/$@$(CEXT) > $@ cp $(DATADIRI)/$@$(SEXT) $@$(SEXT) -$(SIGNATURE) < $@ | $(DIFF) - $@$(SEXT) $(TESTINPUT_EXTRA): $(DATADIRI) $(DATADIRI_INPUT_EXTRA) $(DECOMPRESS) < $(DATADIRI)/$@$(CEXT) > $@ cp $(DATADIRI)/$@$(SEXT) $@$(SEXT) -$(SIGNATURE) < $@ | $(DIFF) - $@$(SEXT) # Fetch Output Data Files and Signatures $(TESTOUTPUT): $(DATADIRO) $(DATADIRO_OUTPUT) $(DATADIRO_OUTPUT_SIGNATURES) $(DECOMPRESS) < $(DATADIRO)/$@$(CEXT) > $@ cp $(DATADIRO)/$@$(SEXT) $@$(SEXT) -$(SIGNATURE) < $@ | $(DIFF) - $@$(SEXT) # Fetch Output Data File Signatures $(TESTOUTPUTSIGS): $(DATADIRS) $(DATADIRS_OUTPUT_SIGNATURES) cp $(DATADIRS)/$@ $@ # # Tests # tests: $(LIB) $(BIN) symlinksdone basic extra dectristests pycbftests tests_sigs_only: $(LIB) $(BIN) symlinksdone basic extra_sigs_only restore_output: $(NEWTESTOUTPUT) $(DATADIRO) $(SIGNATURE) < adscconverted_flat.cbf > $(DATADIRO)/adscconverted_flat_orig.cbf$(SEXT) $(SIGNATURE) < adscconverted.cbf > $(DATADIRO)/adscconverted_orig.cbf$(SEXT) $(SIGNATURE) < converted_flat.cbf > $(DATADIRO)/converted_flat_orig.cbf$(SEXT) $(SIGNATURE) < converted.cbf > $(DATADIRO)/converted_orig.cbf$(SEXT) $(SIGNATURE) < insulin_pilatus6mconverted.cbf > $(DATADIRO)/insulin_pilatus6mconverted_orig.cbf$(SEXT) $(SIGNATURE) < mb_LP_1_001.cbf$ > $(DATADIRO)/mb_LP_1_001_orig.cbf$(SEXT) $(SIGNATURE) < testcell.prt > $(DATADIRO)/testcell_orig.prt$(SEXT) $(SIGNATURE) < test_xds_bin_testflatout.out > $(DATADIRO)/test_xds_bin_testflatout_orig.out$(SEXT) $(SIGNATURE) < test_xds_bin_testflatpackedout.out > $(DATADIRO)/test_xds_bin_testflatpackedout_orig.out$(SEXT) $(SIGNATURE) < test_fcb_read_testflatout.out > $(DATADIRO)/test_fcb_read_testflatout_orig.out$(SEXT) $(SIGNATURE) < test_fcb_read_testflatpackedout.out > $(DATADIRO)/test_fcb_read_testflatpackedout_orig.out$(SEXT) $(SIGNATURE) < XRD1621.cbf > $(DATADIRO)/XRD1621_orig.cbf$(SEXT) $(SIGNATURE) < XRD1621_I4encbC100.cbf > $(DATADIRO)/XRD1621_I4encbC100_orig.cbf$(SEXT) $(COMPRESS) < adscconverted_flat.cbf > $(DATADIRO)/adscconverted_flat_orig.cbf$(CEXT) $(COMPRESS) < adscconverted.cbf > $(DATADIRO)/adscconverted_orig.cbf$(CEXT) $(COMPRESS) < converted_flat.cbf > $(DATADIRO)/converted_flat_orig.cbf$(CEXT) $(COMPRESS) < converted.cbf > $(DATADIRO)/converted_orig.cbf$(CEXT) $(COMPRESS) < insulin_pilatus6mconverted.cbf > $(DATADIRO)/insulin_pilatus6mconverted_orig.cbf$(CEXT) $(COMPRESS) < mb_LP_1_001.cbf$ > $(DATADIRO)/mb_LP_1_001_orig.cbf$(CEXT) $(COMPRESS) < testcell.prt > $(DATADIRO)/testcell_orig.prt$(CEXT) $(COMPRESS) < test_xds_bin_testflatout.out > $(DATADIRO)/test_xds_bin_testflatout_orig.out$(CEXT) $(COMPRESS) < test_xds_bin_testflatpackedout.out > $(DATADIRO)/test_xds_bin_testflatpackedout_orig.out$(CEXT) $(COMPRESS) < test_fcb_read_testflatout.out > $(DATADIRO)/test_fcb_read_testflatout_orig.out$(CEXT) $(COMPRESS) < test_fcb_read_testflatpackedout.out > $(DATADIRO)/test_fcb_read_testflatpackedout_orig.out$(CEXT) $(COMPRESS) < XRD1621.cbf > $(DATADIRO)/XRD1621_orig.cbf$(CEXT) $(COMPRESS) < XRD1621_I4encbC100.cbf > $(DATADIRO)/XRD1621_I4encbC100_orig.cbf$(CEXT) restore_sigs_only: $(NEWTESTOUTPUT) $(DATADIRS) $(SIGNATURE) < adscconverted_flat.cbf > $(DATADIRS)/adscconverted_flat_orig.cbf$(SEXT) $(SIGNATURE) < adscconverted.cbf > $(DATADIRS)/adscconverted_orig.cbf$(SEXT) $(SIGNATURE) < converted_flat.cbf > $(DATADIRS)/converted_flat_orig.cbf$(SEXT) $(SIGNATURE) < converted.cbf > $(DATADIRS)/converted_orig.cbf$(SEXT) $(SIGNATURE) < insulin_pilatus6mconverted.cbf > $(DATADIRS)/insulin_pilatus6mconverted_orig.cbf$(SEXT) $(SIGNATURE) < mb_LP_1_001.cbf$ > $(DATADIRS)/mb_LP_1_001_orig.cbf$(SEXT) $(SIGNATURE) < testcell.prt > $(DATADIRS)/testcell_orig.prt$(SEXT) $(SIGNATURE) < test_xds_bin_testflatout.out > $(DATADIRS)/test_xds_bin_testflatout_orig.out$(SEXT) $(SIGNATURE) < test_xds_bin_testflatpackedout.out > $(DATADIRS)/test_xds_bin_testflatpackedout_orig.out$(SEXT) $(SIGNATURE) < test_fcb_read_testflatout.out > $(DATADIRS)/test_fcb_read_testflatout_orig.out$(SEXT) $(SIGNATURE) < test_fcb_read_testflatpackedout.out > $(DATADIRS)/test_fcb_read_testflatpackedout_orig.out$(SEXT) $(SIGNATURE) < XRD1621.cbf > $(DATADIRS)/XRD1621_orig.cbf$(SEXT) $(SIGNATURE) < XRD1621_I4encbC100.cbf > $(DATADIRS)/XRD1621_I4encbC100_orig.cbf$(SEXT) restore_signatures: restore_output restore_sigs_only # # Basic Tests # basic: $(BIN)/makecbf $(BIN)/img2cif $(BIN)/cif2cbf $(TESTINPUT_BASIC) $(BIN)/makecbf example.mar2300 makecbf.cbf $(BIN)/img2cif -c flatpacked -m headers -d digest \ -e base64 example.mar2300 img2cif_packed.cif $(BIN)/img2cif -c canonical -m headers -d digest \ -e base64 example.mar2300 img2cif_canonical.cif $(BIN)/img2cif -c flatpacked -m headers -d digest \ -e none example.mar2300 img2cif_packed.cbf $(BIN)/img2cif -c canonical -m headers -d digest \ -e none example.mar2300 img2cif_canonical.cbf $(BIN)/cif2cbf -e none -c flatpacked \ img2cif_canonical.cif cif2cbf_packed.cbf $(BIN)/cif2cbf -e none -c canonical \ img2cif_packed.cif cif2cbf_canonical.cbf -cmp cif2cbf_packed.cbf makecbf.cbf -cmp cif2cbf_packed.cbf img2cif_packed.cbf -cmp cif2cbf_canonical.cbf img2cif_canonical.cbf # # Extra Tests # ifneq ($(F90C),) extra: $(BIN)/convert_image $(BIN)/convert_minicbf $(BIN)/cif2cbf $(BIN)/testcell \ $(BIN)/testreals $(BIN)/testflat $(BIN)/testflatpacked \ $(BIN)/test_xds_binary $(BIN)/test_fcb_read_image $(BIN)/convert_minicbf \ $(BIN)/sauter_test $(BIN)/adscimg2cbf $(BIN)/cbf2adscimg \ $(BIN)/changtestcompression $(BIN)/tiff2cbf \ basic $(TESTINPUT_EXTRA) $(TESTOUTPUT) else extra: $(BIN)/convert_image $(BIN)/convert_minicbf $(BIN)/cif2cbf $(BIN)/testcell \ $(BIN)/testreals $(BIN)/testflat $(BIN)/testflatpacked \ $(BIN)/convert_minicbf \ $(BIN)/sauter_test $(BIN)/adscimg2cbf $(BIN)/cbf2adscimg \ basic $(TESTINPUT_EXTRA) $(TESTOUTPUT) endif $(TIME) $(BIN)/cif2cbf -e hex -c none \ makecbf.cbf cif2cbf_ehcn.cif $(TIME) $(BIN)/cif2cbf -e none -c flatpacked \ cif2cbf_ehcn.cif cif2cbf_encp.cbf; rm cif2cbf_ehcn.cif -cmp makecbf.cbf cif2cbf_encp.cbf $(TIME) $(BIN)/cif2cbf -i 9ins.cif -o 9ins.cbf -cmp 9ins.cif 9ins.cbf $(TIME) $(BIN)/convert_image -F example.mar2300 converted_flat.cbf -cmp converted_flat.cbf converted_flat_orig.cbf $(TIME) $(BIN)/convert_image example.mar2300 converted.cbf -cmp converted.cbf converted_orig.cbf -$(TIME) $(BIN)/testcell < testcell.dat > testcell.prt -cmp testcell.prt testcell_orig.prt $(TIME) $(BIN)/convert_image -F -d adscquantum315 mb_LP_1_001.img adscconverted_flat.cbf -cmp adscconverted_flat.cbf adscconverted_flat_orig.cbf $(TIME) $(BIN)/convert_image -d adscquantum315 mb_LP_1_001.img adscconverted.cbf -cmp adscconverted.cbf adscconverted_orig.cbf $(TIME) $(BIN)/adscimg2cbf --no_pad --cbf_packed,flat mb_LP_1_001.img -cmp mb_LP_1_001.cbf mb_LP_1_001_orig.cbf ifneq ($(CLEANTESTS),) mv mb_LP_1_001.cbf nmb_LP_1_001.cbf else cp mb_LP_1_001.cbf nmb_LP_1_001.cbf endif $(TIME) $(BIN)/cbf2adscimg nmb_LP_1_001.cbf -cmp nmb_LP_1_001.img mb_LP_1_001.img rm nmb_LP_1_001.cbf ifneq ($(CLEANTESTS),) rm nmb_LP_1_001.img endif $(TIME) $(BIN)/convert_minicbf -d pilatus6m insulin_pilatus6m.cbf insulin_pilatus6mconverted.cbf -cmp insulin_pilatus6mconverted.cbf insulin_pilatus6mconverted_orig.cbf $(TIME) $(BIN)/testreals -cmp testrealin.cbf testrealout.cbf $(TIME) $(BIN)/testflat -cmp testflatin.cbf testflatout.cbf $(TIME) $(BIN)/testflatpacked -cmp testflatpackedin.cbf testflatpackedout.cbf ifneq ($(F90C),) echo testflatout.cbf | $(TIME) $(BIN)/test_xds_binary > test_xds_bin_testflatout.out -$(DIFF) test_xds_bin_testflatout.out test_xds_bin_testflatout_orig.out echo testflatpackedout.cbf | $(TIME) $(BIN)/test_xds_binary > test_xds_bin_testflatpackedout.out -$(DIFF) test_xds_bin_testflatpackedout.out test_xds_bin_testflatpackedout_orig.out echo testflatout.cbf | $(TIME) $(BIN)/test_fcb_read_image > test_fcb_read_testflatout.out -$(DIFF) test_fcb_read_testflatout.out test_fcb_read_testflatout_orig.out echo testflatpackedout.cbf | $(TIME) $(BIN)/test_fcb_read_image > test_fcb_read_testflatpackedout.out -$(DIFF) test_fcb_read_testflatpackedout.out test_fcb_read_testflatpackedout_orig.out endif $(TIME) $(BIN)/sauter_test $(TIME) $(BIN)/changtestcompression $(TIME) (export LD_LIBRARY_PATH=$(LIB);$(BIN)/tiff2cbf XRD1621.tif XRD1621.cbf) -$(DIFF) XRD1621.cbf XRD1621_orig.cbf $(TIME) $(BIN)/cif2cbf -I 4 -C 100. -L 0. -e n -c b -i XRD1621.cbf -o XRD1621_I4encbC100.cbf -$(DIFF) XRD1621_I4encbC100.cbf XRD1621_I4encbC100_orig.cbf ifneq ($(F90C),) extra_sigs_only: $(BIN)/convert_image $(BIN)/convert_minicbf $(BIN)/cif2cbf $(BIN)/testcell \ $(BIN)/testreals $(BIN)/testflat $(BIN)/testflatpacked \ $(BIN)/test_xds_binary $(BIN)/test_fcb_read_image $(BIN)/convert_minicbf \ $(BIN)/sauter_test $(BIN)/adscimg2cbf $(BIN)/cbf2adscimg $(BIN)/tiff2cbf \ basic $(TESTINPUT_EXTRA) $(TESTOUTPUTSIGS) else extra_sigs_only: $(BIN)/convert_image $(BIN)/convert_minicbf $(BIN)/cif2cbf $(BIN)/testcell \ $(BIN)/testreals $(BIN)/testflat $(BIN)/testflatpacked \ $(BIN)/convert_minicbf \ $(BIN)/sauter_test $(BIN)/adscimg2cbf\ basic $(TESTINPUT_EXTRA) $(TESTOUTPUTSIGS) endif $(TIME) $(BIN)/cif2cbf -e hex -c none \ makecbf.cbf cif2cbf_ehcn.cif $(TIME) $(BIN)/cif2cbf -e none -c packed \ cif2cbf_ehcn.cif cif2cbf_encp.cbf; rm cif2cbf_ehcn.cif -cmp makecbf.cbf cif2cbf_encp.cbf $(TIME) $(BIN)/cif2cbf -i 9ins.cif -o 9ins.cbf -cmp 9ins.cif 9ins.cbf $(TIME) $(BIN)/convert_image -F example.mar2300 converted_flat.cbf -$(SIGNATURE) < converted_flat.cbf | $(DIFF) - converted_flat_orig.cbf$(SEXT); rm converted_flat.cbf $(TIME) $(BIN)/convert_image example.mar2300 converted.cbf -$(SIGNATURE) < converted.cbf | $(DIFF) - converted_orig.cbf$(SEXT); rm converted.cbf -$(TIME) $(BIN)/testcell < testcell.dat | \ $(SIGNATURE) | $(DIFF) - testcell_orig.prt$(SEXT) $(TIME) $(BIN)/convert_image -F -d adscquantum315 mb_LP_1_001.img adscconverted_flat.cbf -$(SIGNATURE) < adscconverted_flat.cbf | $(DIFF) - adscconverted_flat_orig.cbf$(SEXT) $(TIME) $(BIN)/convert_image -d adscquantum315 mb_LP_1_001.img adscconverted.cbf -$(SIGNATURE) < adscconverted.cbf | $(DIFF) - adscconverted_orig.cbf$(SEXT); rm adscconverted.cbf $(TIME) $(BIN)/adscimg2cbf --cbf_packed,flat mb_LP_1_001.img -$(SIGNATURE) < mb_LP_1_001.cbf | $(DIFF) - mb_LP_1_001_orig.cbf$(SEXT) mv mb_LP_1_001.cbf nmb_LP_1_001.cbf $(TIME) $(BIN)/cbf2adscimg nmb_LP_1_001.cbf -cmp nmb_LP_1_001.img mb_LP_1_001.img rm nmb_LP_1_001.cbf rm nmb_LP_1_001.img $(TIME) $(BIN)/convert_minicbf -d pilatus6m insulin_pilatus6m.cbf insulin_pilatus6mconverted.cbf -$(SIGNATURE) < insulin_pilatus6mconverted.cbf | $(DIFF) - insulin_pilatus6mconverted_orig.cbf$(SEXT); rm insulin_pilatus6mconverted.cbf $(TIME) $(BIN)/testreals -cmp testrealin.cbf testrealout.cbf $(TIME) $(BIN)/testflat -cmp testflatin.cbf testflatout.cbf $(TIME) $(BIN)/testflatpacked -cmp testflatpackedin.cbf testflatpackedout.cbf ifneq ($(F90C),) echo testflatout.cbf | $(TIME) $(BIN)/test_xds_binary | \ $(SIGNATURE) | $(DIFF) - test_xds_bin_testflatout_orig.out$(SEXT) echo testflatpackedout.cbf | $(TIME) $(BIN)/test_xds_binary | \ $(SIGNATURE) | $(DIFF) - test_xds_bin_testflatpackedout_orig.out$(SEXT) echo testflatout.cbf | $(TIME) $(BIN)/test_fcb_read_image | \ $(SIGNATURE) | $(DIFF) - test_fcb_read_testflatout_orig.out$(SEXT) echo testflatpackedout.cbf | $(TIME) $(BIN)/test_fcb_read_image | \ $(SIGNATURE) | $(DIFF) - test_fcb_read_testflatpackedout_orig.out$(SEXT) endif $(TIME) $(BIN)/sauter_test $(TIME) $(BIN)/tiff2cbf XRD1621.tif XRD1621.cbf $(TIME) $(BIN)/cif2cbf -I 4 -C 100. -L 0. -e n -c b -i XRD1621.cbf -o XRD1621_I4encbC100.cbf -$(SIGNATURE) < XRD1621.cbf | $(DIFF) - XRD1621_orig.cbf$(SEXT); rm XRD1621.cbf -$(SIGNATURE) < XRD1621_I4encbC100.cbf | $(DIFF) - XRD1621_I4encbC100_orig.cbf$(SEXT); rm XRD1621_I4encbC100.cbf @-rm -f adscconverted_flat.cbf @-rm -f $(TESTINPUT_BASIC) $(TESTINPUT_EXTRA) $(TESTOUTPUTSIGS) @-rm -f cif2cbf_packed.cbf makecbf.cbf \ cif2cbf_packed.cbf img2cif_packed.cbf \ cif2cbf_canonical.cbf img2cif_canonical.cbf @-rm -f testrealout.cbf testflatout.cbf testflatpackedout.cbf \ cif2cbf_encp.cbf img2cif_canonical.cif img2cif_packed.cif 9ins.cbf pycbftests: $(PYCBF)/_pycbf.$(PYCBFEXT) (cd $(PYCBF); python pycbf_test1.py) (cd $(PYCBF); python pycbf_test2.py) (cd $(PYCBF); python pycbf_test3.py) javatests: $(BIN)/ctestcbf $(BIN)/testcbf.class $(SOLIB)/libcbf_wrap.so $(BIN)/ctestcbf > testcbfc.txt $(LDPREFIX) java -cp $(JCBF)/cbflib-$(VERSION).jar:$(BIN) testcbf > testcbfj.txt $(DIFF) testcbfc.txt testcbfj.txt dectristests: $(BIN)/cbf_template_t $(DECTRIS_EXAMPLES)/cbf_test_orig.out (cd $(DECTRIS_EXAMPLES); ../../bin/cbf_template_t; diff -a -u cbf_test_orig.out cbf_template_t.out) # # Remove all non-source files # empty: @-rm -f $(LIB)/*.o @-rm -f $(LIB)/libcbf.a @-rm -f $(LIB)/libfcb.a @-rm -f $(LIB)/libimg.a @-rm -f $(LIB)/_pycbf.$(PYCBFEXT) @-rm -f $(PYCBF)/_pycbf.$(PYCBFEXT) @-rm -f $(PYCBF)/build/*/_pycbf.$(PYCBFEXT) @-rm -f $(PYCBF)/build/src/cbf_simple.o @-rm -f $(PYCBF)/build/*/pycbf_wrap.o @-rm -rf $(BIN)/adscimg2cbf* @-rm -rf $(BIN)/cbf2adscimg* @-rm -rf $(BIN)/makecbf* @-rm -rf $(BIN)/img2cif* @-rm -rf $(BIN)/cif2cbf* @-rm -rf $(BIN)/convert_image* @-rm -rf $(BIN)/convert_minicbf* @-rm -rf $(BIN)/test_fcb_read_image* @-rm -rf $(BIN)/test_xds_binary* @-rm -rf $(BIN)/testcell* @-rm -rf $(BIN)/cif2c* @-rm -rf $(BIN)/testreals* @-rm -rf $(BIN)/testflat* @-rm -rf $(BIN)/testflatpacked* @-rm -rf $(BIN)/cbf_template_t* @-rm -rf $(BIN)/sauter_test* @-rm -rf $(BIN)/arvai_test* @-rm -rf $(BIN)/changtestcompression* @-rm -rf $(BIN)/tiff2cbf* @-rm -f makecbf.cbf @-rm -f img2cif_packed.cif @-rm -f img2cif_canonical.cif @-rm -f img2cif_packed.cbf @-rm -f img2cif_canonical.cbf @-rm -f img2cif_raw.cbf @-rm -f cif2cbf_packed.cbf @-rm -f cif2cbf_canonical.cbf @-rm -f converted.cbf @-rm -f adscconverted.cbf @-rm -f converted_flat.cbf @-rm -f adscconverted_flat.cbf @-rm -f adscconverted_flat_rev.cbf @-rm -f mb_LP_1_001.cbf @-rm -f cif2cbf_ehcn.cif @-rm -f cif2cbf_encp.cbf @-rm -f 9ins.cbf @-rm -f 9ins.cif @-rm -f testcell.prt @-rm -f example.mar2300 @-rm -f converted_orig.cbf @-rm -f adscconverted_orig.cbf @-rm -f converted_flat_orig.cbf @-rm -f adscconverted_flat_orig.cbf @-rm -f adscconverted_flat_rev_orig.cbf @-rm -f mb_LP_1_001_orig.cbf @-rm -f insulin_pilatus6mconverted_orig.cbf @-rm -f insulin_pilatus6mconverted.cbf @-rm -f insulin_pilatus6m.cbf @-rm -f testrealin.cbf @-rm -f testrealout.cbf @-rm -f testflatin.cbf @-rm -f testflatout.cbf @-rm -f testflatpackedin.cbf @-rm -f testflatpackedout.cbf @-rm -f CTC.cbf @-rm -f test_fcb_read_testflatout.out @-rm -f test_fcb_read_testflatpackedout.out @-rm -f test_xds_bin_testflatpackedout.out @-rm -f test_xds_bin_testflatout.out @-rm -f test_fcb_read_testflatout_orig.out @-rm -f test_fcb_read_testflatpackedout_orig.out @-rm -f test_xds_bin_testflatpackedout_orig.out @-rm -f test_xds_bin_testflatout_orig.out @-rm -f mb_LP_1_001.img @-rm -f 9ins.cif @-rm -f testcell_orig.prt @-rm -f $(DECTRIS_EXAMPLES)/cbf_template_t.out @-rm -f XRD1621.cbf @-rm -f XRD1621_orig.cbf @-rm -f XRD1621_orig.cbf @-rm -f XRD1621_I4encbC100.cbf @-rm -f $(SRC)/fcb_exit_binary.f90 @-rm -f $(SRC)/fcb_next_binary.f90 @-rm -f $(SRC)/fcb_open_cifin.f90 @-rm -f $(SRC)/fcb_packed.f90 @-rm -f $(SRC)/fcb_read_bits.f90 @-rm -f $(SRC)/fcb_read_image.f90 @-rm -f $(SRC)/fcb_read_xds_i2.f90 @-rm -f $(EXAMPLES)/test_fcb_read_image.f90 @-rm -f $(EXAMPLES)/test_xds_binary.f90 @-rm -f symlinksdone @-rm -f $(TESTOUTPUT) *$(SEXT) @-rm -f $(SOLIB)/*.o @-rm -f $(SOLIB)/libcbf_wrap.so @-rm -f $(SOLIB)/libjcbf.so @-rm -f $(SOLIB)/libimg.so @-rm -f $(SOLIB)/libfcb.so @-rm -rf $(JCBF)/org @-rm -f $(JCBF)/*.java @-rm -f $(JCBF)/jcbf_wrap.c @-rm -f $(SRC)/cbf_wrap.c @-rm -f $(BIN)/ctestcbf $(BIN)/testcbf.class testcbfc.txt testcbfj.txt @-rm -rf $(REGEX) @-rm -rf $(TIFF) ./.undosymlinks # # Remove temporary files # clean: @-rm -f core @-rm -f *.o @-rm -f *.u # # Restore to distribution state # distclean: clean empty # # Create a Tape Archive for distribution # tar: $(DOCUMENTS) $(SOURCE) $(SRC)/cbf.stx $(HEADERS) $(M4FILES)\ $(EXAMPLES) \ README.html README Makefile \ $(JPEGS) -/bin/rm -f CBFlib.tar* tar cvBf CBFlib.tar \ $(DOCUMENTS) $(SOURCE) $(SRC)/cbf.stx $(HEADERS) $(M4FILES)\ $(EXAMPLES) \ README.html README Makefile \ $(JPEGS) gzip --best CBFlib.tar ' ./CBFlib-0.9.2.2/m4/test_xds_binary.m4 0000644 0000765 0000765 00000001260 11603702103 015555 0 ustar yaya yaya m4_include(`fcblib_defines.m4')` PROGRAM TEST IMPLICIT NONE CHARACTER(LEN=100) LINE INTEGER(2) IFRAME(1000,1000), DPREV INTEGER(4) JFRAME(1000,1000) INTEGER IER, I, J, K' fcb_interface_FCB_READ_XDS_I2 ` PRINT *,''` NAME OF TEST CBF ''` READ *, LINE IER = FCB_READ_XDS_I2(LINE,9,1000,1000,IFRAME,JFRAME) IF (IER.NE.0) THEN PRINT *," ERROR: ", IER ELSE DPREV = 0 DO I = 1,1000 DO J = 1,1000 IF (IFRAME(I,J).NE.DPREV) THEN PRINT *,"ROW ", I, ":" PRINT *,(IFRAME(I,K),K=1,1000) DPREV = IFRAME(I,1000) GO TO 1000 ENDIF END DO 1000 CONTINUE END DO END IF STOP END ' ./CBFlib-0.9.2.2/m4/fcb_read_xds_i2.m4 0000644 0000765 0000765 00000023035 11603702103 015355 0 ustar yaya yaya m4_include(`fcblib_defines.m4') ` INTEGER FUNCTION FCB_READ_XDS_I2(FILNAM,TAPIN,NX,NY,IFRAME,JFRAME) !----------------------------------------------------------------------- ! Reads a 32 bit integer two''`s complement image compressed by a ! BYTE-OFFSET algorithm. W. Kabsch, Version 9-2006 ! ! REVISED 1-2007, H. J. Bernstein to conform to CBFlib_0.7.7 ! (http://www.bernstein-plus-sons.com/software/CBF) ! ! The BYTE-OFFSET algorithm is a slightly simplified version of ! that described in Andy Hammersley''`s web page ! (http://www.esrf.fr/computing/Forum/imgCIF/cbf_definition.html) ! !----------------------------------------------------------------------- ! FILNAM - Name of the file countaining the image (GIVEN) ! TAPIN - Fortran device unit number assigned to image file (GIVEN) ! NX - Number of "fast" pixels of the image (GIVEN) ! NY - Number of "slow" pixels of the image (GIVEN) ! IFRAME - 16 bit coded image as needed by XDS (RESULT) ! Returns (as function value) (RESULT) ! CBF_FORMAT (=1): ! cannot handle this CBF format (not implemented) ! 0: No error ! -1: Cannot determine endian architecture of this machine ! -2: Cannot open image file ! -3: Wrong image format ! -4: Cannot read image !----------------------------------------------------------------------- IMPLICIT NONE CHARACTER(len=*),INTENT(IN) :: FILNAM INTEGER, INTENT(IN) :: TAPIN,NX,NY INTEGER(2), INTENT(OUT):: IFRAME(NX*NY) INTEGER(4), INTENT(OUT):: JFRAME(NX,NY) INTEGER(8) NELEM,NELEM_READ ! -- Definition of CBF_FORMAT' fcb_errcode_CBF_FORMAT `! -- External functions called' fcb_interface_FCB_READ_BYTE fcb_interface_FCB_NEXT_BINARY fcb_interface_FCB_CI_STRNCMPARR fcb_interface_FCB_DECOMPRESS_PACKED_I4 INTEGER(2) CNT2PIX `! -- Local variables INTEGER,PARAMETER:: FCB_BYTES_IN_REC='m4_ifelse(`fcb_bytes_in_rec',`',4096,`fcb_bytes_in_rec')` INTEGER FCB_RECORD_SIZE,BYTE_IN_FILE,REC_IN_FILE, & STEP,FIRST2,LAST2,FIRST4,LAST4,I,J,IOS INTEGER(4) DIFF,PIXVALUE,MARKER,IADR INTEGER(2) SHORTINT INTEGER(1) BUFFER(FCB_BYTES_IN_REC),LAST_CHAR,ONEBYTE, & TWOBYTES(2),FOURBYTES(4),ENDIANORDER(4), & MARKBYTES(4) INTEGER ENCODING ' fcb_param_ENC_LIST_ALL ` INTEGER SIZE INTEGER ID INTEGER COMPRESSION ' fcb_param_CBF_LIST_ALL ` INTEGER BITS,VORZEICHEN,REELL CHARACTER(len=24) DIGEST CHARACTER(len=14) BYTEORDER !Possible parameter values for BYTEORDER are: !"LITTLE_ENDIAN" supported !"BIG_ENDIAN" not supported INTEGER(8) DIMOVER INTEGER(8) DIM1 !Number of "fast" pixels of the image INTEGER(8) DIM2 !Number of "slow" pixels of the image INTEGER(8) DIM3 INTEGER(8) PADDING INTEGER(4) PREV_ELEMENT DATA ENDIANORDER/Z''`12''`,Z''`34''`,Z''`56''`,Z''`78''`/ DATA MARKBYTES/Z''`0C''`,Z''`1A''`,Z''`04''`,Z''`D5''`/ !----------------------------------------------------------------------- ! -- Determine endian architecture of this machine !----------------------------------------------------------------------- ! Definition: If the lowest memory address of multi-byte data is ! considered the starting address of the data, the least ! significant byte (LSB) is at the lowest memory address ! for a ''`little_endian''` cpu architecture. ! ! Example: The 32 bit hex value Z''`12345678''` is stored as follows: ! ENDIAN ORDER BYTE0 BYTE1 BYTE2 BYTE3 ! Big Endian 12 34 56 78(LSB) ! Little Endian 78(LSB) 56 34 12 !----------------------------------------------------------------------- PIXVALUE=TRANSFER(ENDIANORDER,PIXVALUE) STEP=0 IF (PIXVALUE .EQ. Z''`78563412''`) THEN !Little Endian machine STEP=1 FIRST2=1;LAST2=2 FIRST4=1;LAST4=4 ENDIF IF (PIXVALUE .EQ. Z''`12345678''`) THEN ! Big Endian machine STEP=-1 FIRST2=2;LAST2=1 FIRST4=4;LAST4=1 ENDIF IF (STEP.EQ.0)GO TO 110 'fcb_macro_FCB_OPEN_CIFIN(`ERR=120',`IOSTAT=IOS',`GO TO 130') m4_dnl ` IF (IOS.GT.0) GO TO 140 !----------------------------------------------------------------------- ! -- Skip to the next binary and parse the MIME header !----------------------------------------------------------------------- IF (FCB_NEXT_BINARY(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC,BYTE_IN_FILE,& REC_IN_FILE,BUFFER,ENCODING,SIZE,ID,DIGEST,COMPRESSION,BITS, & VORZEICHEN,REELL,BYTEORDER,DIMOVER,DIM1,DIM2,DIM3,PADDING).NE.0)& GO TO 130 IF ((DIM1.NE.NX).OR.(DIM2.NE.NY))GO TO 130 !----------------------------------------------------------------------- ! -- Advance to start of binary image data !----------------------------------------------------------------------- ! In CBF the binary data begins immediately after the first occurence ! of the following 4 bytes (MARKBYTES) in the image file ! Octet Hex Decimal Purpose ! 1 0C 12 (ctrl-L) End the current page ! 2 1A 26 (ctrl-Z) Stop listings in MS-DOS ! 3 04 04 (Ctrl-D) Stop listings in UNIX ! 4 D5 213 Binary section begins ! 5..5+n-1 Binary data (n octets) !----------------------------------------------------------------------- MARKER=TRANSFER(MARKBYTES,MARKER) FOURBYTES=0 DO DO I=1,3 FOURBYTES(I)=FOURBYTES(I+1) ENDDO BYTE_IN_FILE=BYTE_IN_FILE+1 IF (FCB_READ_BYTE(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,FOURBYTES(4)).NE.0) GO TO 140 PIXVALUE=TRANSFER(FOURBYTES,PIXVALUE) IF (PIXVALUE.EQ.MARKER)EXIT ENDDO ! *** DEBUG *** PRINT *, "fwa-1 address of IMAGE at: " ! *** DEBUG *** PRINT *, "BYTE_IN_FILE: ", BYTE_IN_FILE ! *** DEBUG *** PRINT *, "REC_IN_FILE: ", REC_IN_FILE !----------------------------------------------------------------------- ! -- Read data image of 32 bit two''`s complement integers, compressed ! -- by the BYTE-OFFSET algorithm. ! -- After the expansion the original pixel values are coded by 16 bit ! -- in a special way suitable for XDS (see INTEGER*2 FUNCTION CNT2PIX). !----------------------------------------------------------------------- FCB_READ_XDS_I2=CBF_FORMAT !Cannot handle this CBF format IF ((BYTEORDER.EQ."LITTLE_ENDIAN").AND.(ENCODING.EQ.ENC_NONE).AND.& (IAND(COMPRESSION,CBF_COMPRESSION_MASK).EQ.CBF_BYTE_OFFSET))THEN PIXVALUE=0 DO IADR=1,NX*NY BYTE_IN_FILE=BYTE_IN_FILE+1 IF (FCB_READ_BYTE(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,ONEBYTE).NE.0) GO TO 140 DIFF=ONEBYTE IF (DIFF.EQ.-128)THEN DO I=FIRST2,LAST2,STEP BYTE_IN_FILE=BYTE_IN_FILE+1 IF (FCB_READ_BYTE(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,TWOBYTES(I)).NE.0)GO TO 140 ENDDO SHORTINT=TRANSFER(TWOBYTES,SHORTINT) DIFF=SHORTINT IF (DIFF.EQ.-32768)THEN DO I=FIRST4,LAST4,STEP BYTE_IN_FILE=BYTE_IN_FILE+1 IF (FCB_READ_BYTE(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,FOURBYTES(I)).NE.0) & GO TO 140 ENDDO DIFF=TRANSFER(FOURBYTES,DIFF) ENDIF ENDIF PIXVALUE=PIXVALUE+DIFF IFRAME(IADR)=CNT2PIX(PIXVALUE) ! xds-specific 16 bit coding ENDDO FCB_READ_XDS_I2=0 !No error ELSE IF ((BYTEORDER.EQ."LITTLE_ENDIAN").AND.(ENCODING.EQ.ENC_NONE).AND.& ((IAND(COMPRESSION,CBF_COMPRESSION_MASK).EQ.CBF_PACKED) .OR. & (IAND(COMPRESSION,CBF_COMPRESSION_MASK).EQ.CBF_PACKED_V2)))THEN NELEM = NX*NY FCB_READ_XDS_I2=FCB_DECOMPRESS_PACKED_I4 (JFRAME,NELEM,NELEM_READ, & VORZEICHEN, COMPRESSION, DIM1, DIM2, & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) IF (NELEM_READ.NE.NELEM) PRINT *, "EARLY TERMINATION AT ",NELEM_READ PREV_ELEMENT = 0 DO J = 1,NY DO I = 1,NX IF (JFRAME(I,J).NE.PREV_ELEMENT) THEN PREV_ELEMENT = JFRAME(I,J) PRINT *,"ARRAY(",I+(J-1)*NX,") =",JFRAME(I,J) ENDIF IFRAME(I+(J-1)*NX) = CNT2PIX(JFRAME(I,J)) END DO END DO END IF END IF !----------------------------------------------------------------------- 100 CLOSE(TAPIN) RETURN 110 FCB_READ_XDS_I2=-1 !Cannot determine endian architecture of this machine RETURN 120 FCB_READ_XDS_I2=-2 !Cannot open image file RETURN 130 FCB_READ_XDS_I2=-3 !Wrong image format GO TO 100 140 FCB_READ_XDS_I2=-4 !Cannot read image GO TO 100 END FUNCTION FCB_READ_XDS_I2 INTEGER(2) FUNCTION CNT2PIX(I32) IMPLICIT NONE INTEGER(4),INTENT(IN)::I32 INTEGER(4),PARAMETER ::RATIO=32 !compression ratio INTEGER(4),PARAMETER ::OFLOW=RATIO*32768 !largest 32 bit INTEGER INTEGER(4),PARAMETER ::UFLOW=1-32768/RATIO !smallest 32 bit INTEGER REAL(4) R ! I16=CNT2PIX(I32) codes an integer I32 in the range UFLOW<=I32<=OFLOW ! by a 16 bit number I16. ! J32=PIX2CNT(I16) retrieves an approximation to the original value ! with a maximum absolute error of RATIO/2. R=MIN(I32,OFLOW) R=MAX(I32,UFLOW) IF (I32.GT.32767)R=-R/RATIO CNT2PIX=NINT(R) RETURN END FUNCTION CNT2PIX' ./CBFlib-0.9.2.2/m4/fcblib_defines.m4 0000644 0000765 0000765 00000126760 11603702103 015307 0 ustar yaya yaya m4_define(`fcb_not_first',`')m4_dnl m4_define(`fcb_is_last',`is_last')m4_dnl m4_dnl Error codes: m4_define(`fcb_errcode_CBF_FORMAT', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_FORMAT = Z''`00000001''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 1')m4_dnl m4_define(`fcb_errcode_CBF_ALLOC', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_ALLOC = Z''`00000002''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 2')m4_dnl m4_define(`fcb_errcode_CBF_ARGUMENT', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_ARGUMENT = Z''`00000004''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 4')m4_dnl m4_define(`fcb_errcode_CBF_ASCII', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_ASCII = Z''`00000008''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 8')m4_dnl m4_define(`fcb_errcode_CBF_BINARY', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_BINARY = Z''`00000010''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 16')m4_dnl m4_define(`fcb_errcode_CBF_BITCOUNT', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_BITCOUNT = Z''`00000020''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 32')m4_dnl m4_define(`fcb_errcode_CBF_ENDOFDATA', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_ENDOFDATA = Z''`00000040''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 64')m4_dnl m4_define(`fcb_errcode_CBF_FILECLOSE', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_FILECLOSE = Z''`00000080''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 128')m4_dnl m4_define(`fcb_errcode_CBF_FILEOPEN', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_FILEOPEN = Z''`00000100''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 256')m4_dnl m4_define(`fcb_errcode_CBF_FILEREAD', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_FILEREAD = Z''`00000200''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 512')m4_dnl m4_define(`fcb_errcode_CBF_FILESEEK', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_FILESEEK = Z''`00000400''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 1024')m4_dnl m4_define(`fcb_errcode_CBF_FILETELL', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_FILETELL = Z''`00000800''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 2048')m4_dnl m4_define(`fcb_errcode_CBF_FILEWRITE', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_FILEWRITE = Z''`00001000''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 4096')m4_dnl m4_define(`fcb_errcode_CBF_IDENTICAL', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_IDENTICAL = Z''`00002000''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 8192')m4_dnl m4_define(`fcb_errcode_CBF_NOTFOUND', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_NOTFOUND = Z''`00004000''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 16384')m4_dnl m4_define(`fcb_errcode_CBF_OVERFLOW', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_OVERFLOW = Z''`00008000''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 32768')m4_dnl m4_define(`fcb_errcode_CBF_UNDEFINED', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_UNDEFINED = Z''`00010000''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 65536')m4_dnl m4_define(`fcb_errcode_CBF_NOTIMPLEMENTED', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_NOTIMPLEMENTED = Z''`00020000''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` ! 131072')m4_dnl m4_define(`fcb_errcode_LIST_ALL', m4_define(`fcb_is_last',`')m4_dnl ! ! Definitions of CBF error code parameters ! fcb_errcode_CBF_FORMAT m4_define(`fcb_not_first',`not_first')m4_dnl fcb_errcode_CBF_ALLOC fcb_errcode_CBF_ARGUMENT fcb_errcode_CBF_ASCII fcb_errcode_CBF_BINARY fcb_errcode_CBF_BITCOUNT fcb_errcode_CBF_ENDOFDATA fcb_errcode_CBF_FILECLOSE fcb_errcode_CBF_FILEOPEN fcb_errcode_CBF_FILEREAD fcb_errcode_CBF_FILESEEK fcb_errcode_CBF_FILETELL fcb_errcode_CBF_FILEWRITE fcb_errcode_CBF_IDENTICAL fcb_errcode_CBF_NOTFOUND fcb_errcode_CBF_OVERFLOW fcb_errcode_CBF_UNDEFINED m4_define(`fcb_is_last',`is_last')m4_dnl fcb_errcode_CBF_NOTIMPLEMENTED m4_define(`fcb_not_first',`')m4_dnl )m4_dnl m4_dnl m4_dnl Possible parameter values for ENCODING are: m4_define(`fcb_param_ENC_NONE', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')ENC_NONE = Z''`0001''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Use BINARY encoding')m4_dnl m4_define(`fcb_param_ENC_BASE64', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')ENC_BASE64 = Z''`0002''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Use BASE64 encoding')m4_dnl m4_define(`fcb_param_ENC_BASE32k', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')ENC_BASE32K = Z''`0004''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Use X-BASE32K encoding')m4_dnl m4_define(`fcb_param_ENC_QP', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')ENC_QP = Z''`0008''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Use QUOTED-PRINTABLE encoding')m4_dnl m4_define(`fcb_param_ENC_BASE10', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')ENC_BASE10 = Z''`0010''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Use BASE10 encoding')m4_dnl m4_define(`fcb_param_ENC_BASE16', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')ENC_BASE16 = Z''`0020''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Use BASE16 encoding')m4_dnl m4_define(`fcb_param_ENC_BASE8', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')ENC_BASE8 = Z''`0040''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Use BASE8 encoding')m4_dnl m4_define(`fcb_param_ENC_LIST_ALL', m4_define(`fcb_is_last',`')m4_dnl ! ! Definitions of CBF encodings parameters ! fcb_param_ENC_NONE m4_define(`fcb_not_first',`not_first')m4_dnl fcb_param_ENC_BASE64 fcb_param_ENC_BASE32k fcb_param_ENC_QP fcb_param_ENC_BASE10 fcb_param_ENC_BASE16 m4_define(`fcb_is_last',`is_last')m4_dnl fcb_param_ENC_BASE8 m4_define(`fcb_not_first',`')m4_dnl )m4_dnl m4_dnl m4_dnl Possible parameter values for COMPRESSION are: m4_dnl m4_define(`fcb_param_CBF_INTEGER', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_INTEGER = Z''`0010''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Uncompressed integer')m4_dnl m4_define(`fcb_param_CBF_FLOAT', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_FLOAT = Z''`0020''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Uncompressed IEEE floating point')m4_dnl m4_define(`fcb_param_CBF_CANONICAL', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_CANONICAL = Z''`0050''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Canonical compression')m4_dnl m4_define(`fcb_param_CBF_PACKED', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_PACKED = Z''`0060''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Packed compression')m4_dnl m4_define(`fcb_param_CBF_PACKED_V2', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_PACKED_V2 = Z''`0090''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Packed compression')m4_dnl m4_define(`fcb_param_CBF_BYTE_OFFSET', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_BYTE_OFFSET = Z''`0070''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Byte Offset Compression')m4_dnl m4_define(`fcb_param_CBF_PREDICTOR', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_PREDICTOR = Z''`0080''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Predictor_Huffman Compression')m4_dnl m4_define(`fcb_param_CBF_NONE', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_NONE = Z''`0040''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !No compression flag')m4_dnl m4_define(`fcb_param_CBF_COMPRESSION_MASK', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_COMPRESSION_MASK = & Z''`00FF''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Mask to sep compressiontype from flags')m4_dnl m4_define(`fcb_param_CBF_FLAG_MASK', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_FLAG_MASK = Z''`0F00''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Mask to sep flags from compression type')m4_dnl m4_define(`fcb_param_CBF_UNCORRELATED_SECTIONS', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_UNCORRELATED_SECTIONS =& Z''`0100''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Flag for uncorrelated sections')m4_dnl m4_define(`fcb_param_CBF_FLAT_IMAGE', `m4_ifelse(fcb_not_first,`',``INTEGER,PARAMETER:: & '',``'')CBF_FLAT_IMAGE = Z''`0200''`m4_ifelse(fcb_is_last,`is_last',` ',``, &'')'` !Flag for flat (linear) images')m4_dnl m4_define(`fcb_param_CBF_LIST_ALL', m4_define(`fcb_is_last',`')m4_dnl ! ! Definitions of CBF compression parameters ! fcb_param_CBF_INTEGER m4_define(`fcb_not_first',`not_first')m4_dnl fcb_param_CBF_FLOAT fcb_param_CBF_CANONICAL fcb_param_CBF_PACKED fcb_param_CBF_PACKED_V2 fcb_param_CBF_BYTE_OFFSET fcb_param_CBF_PREDICTOR fcb_param_CBF_NONE fcb_param_CBF_COMPRESSION_MASK fcb_param_CBF_FLAG_MASK fcb_param_CBF_UNCORRELATED_SECTIONS m4_define(`fcb_is_last',`is_last')m4_dnl fcb_param_CBF_FLAT_IMAGE m4_define(`fcb_not_first',`')m4_dnl )m4_dnl m4_dnl m4_dnl fcblib function interfaces m4_dnl m4_define(`fcb_interface_FCB_ATOL_WCNT', `INTERFACE INTEGER(8) FUNCTION FCB_ATOL_WCNT(ARRAY,N,CNT) !----------------------------------------------------------------------- ! Converts bytes in ARRAY to an INTEGER(8), consuming CNT bytes !----------------------------------------------------------------------- INTEGER, INTENT(OUT):: CNT INTEGER, INTENT(IN):: N INTEGER(1),INTENT(IN):: ARRAY(N) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_CI_STRNCMPARR', `INTERFACE INTEGER FUNCTION FCB_CI_STRNCMPARR(STRING, ARRAY, N, LIMIT) !----------------------------------------------------------------------- ! Compares up to LIMIT characters of STRING and ARRAY case insensitive !----------------------------------------------------------------------- CHARACTER(LEN=*),INTENT(IN):: STRING INTEGER, INTENT(IN):: N,LIMIT INTEGER(1), INTENT(IN):: ARRAY(N) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_DECOMPRESS_PACKED_I2', `INTERFACE INTEGER FUNCTION FCB_DECOMPRESS_PACKED_I2 (ARRAY,NELEM,NELEM_READ, & ELSIGN, COMPRESSION, DIM1, DIM2, & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) INTEGER(8), INTENT(IN):: DIM1,DIM2 INTEGER(2), INTENT(OUT):: ARRAY(DIM1,DIM2) INTEGER(8), INTENT(OUT):: NELEM_READ INTEGER(8), INTENT(IN):: NELEM INTEGER, INTENT(IN):: ELSIGN, COMPRESSION INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_DECOMPRESS_PACKED_I4', `INTERFACE INTEGER FUNCTION FCB_DECOMPRESS_PACKED_I4 (ARRAY,NELEM,NELEM_READ, & ELSIGN, COMPRESSION, DIM1, DIM2, & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) INTEGER(8), INTENT(IN):: DIM1,DIM2 INTEGER(4), INTENT(OUT):: ARRAY(DIM1,DIM2) INTEGER(8), INTENT(OUT):: NELEM_READ INTEGER(8), INTENT(IN):: NELEM INTEGER, INTENT(IN):: ELSIGN, COMPRESSION INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_DECOMPRESS_PACKED_3D_I2', `INTERFACE INTEGER FUNCTION FCB_DECOMPRESS_PACKED_3D_I2 (ARRAY,NELEM,NELEM_READ, & ELSIGN, COMPRESSION, DIM1, DIM2, DIM3, & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) INTEGER(8), INTENT(IN):: DIM1,DIM2,DIM3 INTEGER(2), INTENT(OUT):: ARRAY(DIM1,DIM2,DIM3) INTEGER(8), INTENT(OUT):: NELEM_READ INTEGER(8), INTENT(IN):: NELEM INTEGER, INTENT(IN):: ELSIGN, COMPRESSION INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_DECOMPRESS_PACKED_3D_I4', `INTERFACE INTEGER FUNCTION FCB_DECOMPRESS_PACKED_3D_I4 (ARRAY,NELEM,NELEM_READ, & ELSIGN, COMPRESSION, DIM1, DIM2, DIM3, & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) INTEGER(8), INTENT(IN):: DIM1,DIM2,DIM3 INTEGER(4), INTENT(OUT):: ARRAY(DIM1,DIM2,DIM3) INTEGER(8), INTENT(OUT):: NELEM_READ INTEGER(8), INTENT(IN):: NELEM INTEGER, INTENT(IN):: ELSIGN, COMPRESSION INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_EXIT_BINARY', `INTERFACE INTEGER FUNCTION FCB_EXIT_BINARY(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC,& BYTE_IN_FILE,REC_IN_FILE,BUFFER, & PADDING ) !----------------------------------------------------------------------- ! Skip to end of binary section that was just read !----------------------------------------------------------------------- INTEGER, INTENT(IN) :: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: BYTE_IN_FILE,REC_IN_FILE INTEGER(1),INTENT(INOUT):: LAST_CHAR,BUFFER(FCB_BYTES_IN_REC) INTEGER(8),INTENT(IN) :: PADDING END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_NBLEN_ARRAY', `INTERFACE INTEGER FUNCTION FCB_NBLEN_ARRAY(ARRAY, ARRAYLEN) !----------------------------------------------------------------------- ! Returns the non-blank length of an array !----------------------------------------------------------------------- INTEGER, INTENT(IN):: ARRAYLEN INTEGER(1), INTENT(IN):: ARRAY(ARRAYLEN) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_NEXT_BINARY', `INTERFACE INTEGER FUNCTION FCB_NEXT_BINARY(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC,& BYTE_IN_FILE,REC_IN_FILE,BUFFER, & ENCODING,SIZE,ID,DIGEST, & COMPRESSION,BITS,VORZEICHEN,REELL,& BYTEORDER,DIMOVER,DIM1,DIM2,DIM3, & PADDING ) !----------------------------------------------------------------------- ! Skip to the next binary and parse MIME header. !----------------------------------------------------------------------- INTEGER, INTENT(IN) :: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: BYTE_IN_FILE,REC_IN_FILE INTEGER(1),INTENT(INOUT):: LAST_CHAR,BUFFER(FCB_BYTES_IN_REC) INTEGER, INTENT(OUT) :: ENCODING,SIZE,ID,COMPRESSION,BITS, & VORZEICHEN,REELL CHARACTER(*), INTENT(OUT):: BYTEORDER,DIGEST INTEGER(8), INTENT(OUT):: DIMOVER INTEGER(8), INTENT(OUT):: DIM1 INTEGER(8), INTENT(OUT):: DIM2 INTEGER(8), INTENT(OUT):: DIM3 INTEGER(8), INTENT(OUT):: PADDING END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_OPEN_CIFIN', `INTERFACE INTEGER FUNCTION FCB_OPEN_CIFIN(FILNAM,TAPIN,LAST_CHAR, & FCB_BYTES_IN_REC,BYTE_IN_FILE,REC_IN_FILE,BUFFER) !----------------------------------------------------------------------- ! -- Open CBF file named FILNAM and connect to unit number TAPIN !----------------------------------------------------------------------- ! We have chosen to use the direct access method to read the file ! with explicit buffer handling. This approach is general but ! clumpsy. Rather than putting the buffer and its control variables ! into COMMON these are passed as local arguments to make the routines ! inherently ''`threadsafe''` in a parallel programming environment. ! Note also, that a reading error could occur for the last record ! if it did not fill a full block. This could be avoided if the ! images were padded with a sufficient number of additional bytes ! (arbitrary values) after the end of the valid binary data. ! ! The more natural method would use byte stream I/O which is, ! unfortunately, only an extension of Fortran 90 that has been ! implemented in some compilers (like the Intel ifort) but ! not in all (like the SGI IRIX f90). ! For BSD style opens, there is a special variant on the direct ! access open with a recl of 1 to give byte-by-byte access. !----------------------------------------------------------------------- ! FILNAM - Name of the file countaining the image (GIVEN) ! TAPIN - Fortran device unit number assigned to image file (GIVEN) ! LAST_CHAR - ! Last character read (RESULT) ! FCB_BYTES_IN_REC - ! Number of bytes in a record (GIVEN) ! BYTE_IN_FILE - ! Byte (counting from 1) of the byte to read (RESULT) ! REC_IN_FILE - ! Record (counting from 1) of next record to read (RESULT) ! BUFFER - Array of length FCB_BYTES_IN_REC (GIVEN) !----------------------------------------------------------------------- IMPLICIT NONE CHARACTER(len=*),INTENT(IN) :: FILNAM INTEGER, INTENT(IN) :: TAPIN,FCB_BYTES_IN_REC INTEGER(1), INTENT(OUT):: LAST_CHAR INTEGER, INTENT(OUT):: BYTE_IN_FILE,REC_IN_FILE INTEGER(1), INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_READ_BITS', `INTERFACE INTEGER FUNCTION FCB_READ_BITS(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BCOUNT,BBYTE, & BITCOUNT,IINT,LINT) !----------------------------------------------------------------------- ! Get integer value starting at BYTE_IN_FILE from file TAPIN ! continuing through BITCOUNT bits, with sign extension. ! (first byte is BYTE_IN_FILE=1) !----------------------------------------------------------------------- INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) INTEGER, INTENT(INOUT):: BCOUNT INTEGER(1),INTENT(INOUT):: BBYTE INTEGER, INTENT(IN):: BITCOUNT INTEGER, INTENT(IN):: LINT INTEGER(4), INTENT(OUT):: IINT(LINT) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_READ_BYTE', `INTERFACE INTEGER FUNCTION FCB_READ_BYTE(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,IBYTE) !----------------------------------------------------------------------- ! Get byte number BYTE_IN_FILE from file (first byte is BYTE_IN_FILE=1) !----------------------------------------------------------------------- INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) INTEGER(1), INTENT(OUT):: IBYTE END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_READ_LINE', `INTERFACE INTEGER FUNCTION FCB_READ_LINE(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC, & BYTE_IN_FILE,REC_IN_FILE,BUFFER,LINE,N,LINELEN) !----------------------------------------------------------------------- ! Reads successive bytes into byte array LINE(N), stopping at N, ! error or first CR(Z''`0D''`) or LF(Z''`0A''`), discarding a LF after a CR. !----------------------------------------------------------------------- INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC,N INTEGER, INTENT(INOUT):: BYTE_IN_FILE,REC_IN_FILE INTEGER, INTENT(OUT):: LINELEN INTEGER(1),INTENT(INOUT):: LAST_CHAR,BUFFER(FCB_BYTES_IN_REC) INTEGER(1), INTENT(OUT):: LINE(N) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_READ_IMAGE_I2', `INTERFACE INTEGER FUNCTION FCB_READ_IMAGE_I2(ARRAY,NELEM,NELEM_READ, & ELSIGN, COMPRESSION, DIM1, DIM2, PADDING, & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) !----------------------------------------------------------------------- ! Reads a 16-bit integer twos complement 2D image ! ! compressed by a BYTE_OFFSET algorithm by W. Kabsch based ! on a proposal by A. Hammersley or ! compressed by a PACKED algorithm by J. P. Abrahams as ! used in CCP4, with modifications by P. Ellis and ! H. J. Bernstein. ! ! The BYTE-OFFSET algorithm is a slightly simplified version of ! that described in Andy Hammersley''`s web page ! (http://www.esrf.fr/computing/Forum/imgCIF/cbf_definition.html) ! !----------------------------------------------------------------------- ! ARRAY - Image (RESULT) ! NELEM - The number of elements to be read (GIVEN) ! NELEM_READ ! - The number of elements actually read (RESULT) ! ELSIGN - Flag for signed (1) OR unsigned (0) data (GIVEN) ! COMPRESSION ! - The actual compression of the image (RESULT) ! DIM1 - The fastest dimension of ARRAY (GIVEN) ! DIM2 - The slowest dimension (GIVEN) ! TAPIN - Fortran device unit number assigned to image file (GIVEN) ! FCB_BYTES_IN_REC ! - The number of bytes in each bufferload to read (GIVEN) ! BYTE_IN_FILE ! - The position in the file of the next byte to read (GIVEN, ! RESULT) ! REC_IN_FILE ! - The record number from 1 of the block in BUFFER (GIVEN, ! RESULT) ! BUFFER - Buffer of bytes read from the file (GIVEN, ! RESULT) ! PADDING - Pad bytes after the binary (RESULT) ! ! Returns (as function value) (RESULT) ! CBF_FORMAT (=1): ! cannot handle this CBF format (not implemented) ! 0: No error !----------------------------------------------------------------------- INTEGER(8), INTENT(IN):: DIM1,DIM2 INTEGER(2), INTENT(OUT):: ARRAY(DIM1,DIM2) INTEGER(8), INTENT(OUT):: NELEM_READ INTEGER(8), INTENT(IN):: NELEM INTEGER, INTENT(IN):: ELSIGN INTEGER, INTENT(OUT):: COMPRESSION INTEGER(8), INTENT(OUT):: PADDING INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_READ_IMAGE_I4', `INTERFACE INTEGER FUNCTION FCB_READ_IMAGE_I4(ARRAY,NELEM,NELEM_READ, & ELSIGN, COMPRESSION, DIM1, DIM2, PADDING, & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) !----------------------------------------------------------------------- ! Reads a 32-bit integer twos complement 2D image ! ! compressed by a BYTE_OFFSET algorithm by W. Kabsch based ! on a proposal by A. Hammersley or ! compressed by a PACKED algorithm by J. P. Abrahams as ! used in CCP4, with modifications by P. Ellis and ! H. J. Bernstein. ! ! The BYTE-OFFSET algorithm is a slightly simplified version of ! that described in Andy Hammersley''`s web page ! (http://www.esrf.fr/computing/Forum/imgCIF/cbf_definition.html) ! !----------------------------------------------------------------------- ! ARRAY - Image (RESULT) ! NELEM - The number of elements to be read (GIVEN) ! NELEM_READ ! - The number of elements actually read (RESULT) ! ELSIGN - Flag for signed (1) OR unsigned (0) data (GIVEN) ! COMPRESSION ! - The actual compression of the image (RESULT) ! DIM1 - The fastest dimension of ARRAY (GIVEN) ! DIM2 - The slowest dimension (GIVEN) ! TAPIN - Fortran device unit number assigned to image file (GIVEN) ! FCB_BYTES_IN_REC ! - The number of bytes in each bufferload to read (GIVEN) ! BYTE_IN_FILE ! - The position in the file of the next byte to read (GIVEN, ! RESULT) ! REC_IN_FILE ! - The record number from 1 of the block in BUFFER (GIVEN, ! RESULT) ! BUFFER - Buffer of bytes read from the file (GIVEN, ! RESULT) ! PADDING - Pad bytes after the binary (RESULT) ! ! Returns (as function value) (RESULT) ! CBF_FORMAT (=1): ! cannot handle this CBF format (not implemented) ! 0: No error !----------------------------------------------------------------------- INTEGER(8), INTENT(IN):: DIM1,DIM2 INTEGER(4), INTENT(OUT):: ARRAY(DIM1,DIM2) INTEGER(8), INTENT(OUT):: NELEM_READ INTEGER(8), INTENT(IN):: NELEM INTEGER, INTENT(IN):: ELSIGN INTEGER, INTENT(OUT):: COMPRESSION INTEGER(8), INTENT(OUT):: PADDING INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_READ_IMAGE_3D_I2', `INTERFACE INTEGER FUNCTION FCB_READ_IMAGE_3D_I2(ARRAY,NELEM,NELEM_READ, & ELSIGN, COMPRESSION, DIM1, DIM2, DIM3, PADDING, & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) !----------------------------------------------------------------------- ! Reads a 16-bit integer twos complement 3D image ! ! compressed by a BYTE_OFFSET algorithm by W. Kabsch based ! on a proposal by A. Hammersley or ! compressed by a PACKED algorithm by J. P. Abrahams as ! used in CCP4, with modifications by P. Ellis and ! H. J. Bernstein. ! ! The BYTE-OFFSET algorithm is a slightly simplified version of ! that described in Andy Hammersley''`s web page ! (http://www.esrf.fr/computing/Forum/imgCIF/cbf_definition.html) ! !----------------------------------------------------------------------- ! ARRAY - Image (RESULT) ! NELEM - The number of elements to be read (GIVEN) ! NELEM_READ ! - The number of elements actually read (RESULT) ! ELSIGN - Flag for signed (1) OR unsigned (0) data (GIVEN) ! COMPRESSION ! - The actual compression of the image (RESULT) ! DIM1 - The fastest dimension of ARRAY (GIVEN) ! DIM2 - The slowest dimension (GIVEN) ! TAPIN - Fortran device unit number assigned to image file (GIVEN) ! FCB_BYTES_IN_REC ! - The number of bytes in each bufferload to read (GIVEN) ! BYTE_IN_FILE ! - The position in the file of the next byte to read (GIVEN, ! RESULT) ! REC_IN_FILE ! - The record number from 1 of the block in BUFFER (GIVEN, ! RESULT) ! BUFFER - Buffer of bytes read from the file (GIVEN, ! RESULT) ! PADDING - Pad bytes after the binary (RESULT) ! ! Returns (as function value) (RESULT) ! CBF_FORMAT (=1): ! cannot handle this CBF format (not implemented) ! 0: No error !----------------------------------------------------------------------- INTEGER(8), INTENT(IN):: DIM1,DIM2,DIM3 INTEGER(2), INTENT(OUT):: ARRAY(DIM1,DIM2,DIM3) INTEGER(8), INTENT(OUT):: NELEM_READ INTEGER(8), INTENT(IN):: NELEM INTEGER, INTENT(IN):: ELSIGN INTEGER, INTENT(OUT):: COMPRESSION INTEGER(8), INTENT(OUT):: PADDING INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_READ_IMAGE_3D_I4', `INTERFACE INTEGER FUNCTION FCB_READ_IMAGE_3D_I4(ARRAY,NELEM,NELEM_READ, & ELSIGN, COMPRESSION, DIM1, DIM2, DIM3, PADDING, & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) !----------------------------------------------------------------------- ! Reads a 32-bit integer twos complement 3D image ! ! compressed by a BYTE_OFFSET algorithm by W. Kabsch based ! on a proposal by A. Hammersley or ! compressed by a PACKED algorithm by J. P. Abrahams as ! used in CCP4, with modifications by P. Ellis and ! H. J. Bernstein. ! ! The BYTE-OFFSET algorithm is a slightly simplified version of ! that described in Andy Hammersley''`s web page ! (http://www.esrf.fr/computing/Forum/imgCIF/cbf_definition.html) ! !----------------------------------------------------------------------- ! ARRAY - Image (RESULT) ! NELEM - The number of elements to be read (GIVEN) ! NELEM_READ ! - The number of elements actually read (RESULT) ! ELSIGN - Flag for signed (1) OR unsigned (0) data (GIVEN) ! COMPRESSION ! - The actual compression of the image (RESULT) ! DIM1 - The fastest dimension of ARRAY (GIVEN) ! DIM2 - The slowest dimension (GIVEN) ! TAPIN - Fortran device unit number assigned to image file (GIVEN) ! FCB_BYTES_IN_REC ! - The number of bytes in each bufferload to read (GIVEN) ! BYTE_IN_FILE ! - The position in the file of the next byte to read (GIVEN, ! RESULT) ! REC_IN_FILE ! - The record number from 1 of the block in BUFFER (GIVEN, ! RESULT) ! BUFFER - Buffer of bytes read from the file (GIVEN, ! RESULT) ! PADDING - Pad bytes after the binary (RESULT) ! ! Returns (as function value) (RESULT) ! CBF_FORMAT (=1): ! cannot handle this CBF format (not implemented) ! 0: No error !----------------------------------------------------------------------- INTEGER(8), INTENT(IN):: DIM1,DIM2,DIM3 INTEGER(4), INTENT(OUT):: ARRAY(DIM1,DIM2,DIM3) INTEGER(8), INTENT(OUT):: NELEM_READ INTEGER(8), INTENT(IN):: NELEM INTEGER, INTENT(IN):: ELSIGN INTEGER, INTENT(OUT):: COMPRESSION INTEGER(8), INTENT(OUT):: PADDING INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_READ_INTEGER', `INTERFACE INTEGER FUNCTION FCB_READ_INTEGER(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BCOUNT,BBYTE, & VALSIGN,BITCOUNT,IINT,LINT) !----------------------------------------------------------------------- ! Get integer value starting at BYTE_IN_FILE from file TAPIN ! continuing through BITCOUNT bits, with optional sign extension. ! (first byte is BYTE_IN_FILE=1) !----------------------------------------------------------------------- INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) INTEGER, INTENT(INOUT):: BCOUNT INTEGER(1),INTENT(INOUT):: BBYTE INTEGER, INTENT(IN):: VALSIGN,BITCOUNT INTEGER, INTENT(IN):: LINT INTEGER(4), INTENT(OUT):: IINT(LINT) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_READ_XDS_I2', `INTERFACE INTEGER FUNCTION FCB_READ_XDS_I2(FILNAM,TAPIN,NX,NY,IFRAME,JFRAME) !----------------------------------------------------------------------- ! Reads a 32 bit integer two''`s complement image compressed by a ! BYTE-OFFSET algorithm. W. Kabsch, Version 9-2006 ! ! REVISED 1-2007, H. J. Bernstein to conform to CBFlib_0.7.7 ! (http://www.bernstein-plus-sons.com/software/CBF) ! ! The BYTE-OFFSET algorithm is a slightly simplified version of ! that described in Andy Hammersley''`s web page ! (http://www.esrf.fr/computing/Forum/imgCIF/cbf_definition.html) ! !----------------------------------------------------------------------- ! FILNAM - Name of the file countaining the image (GIVEN) ! TAPIN - Fortran device unit number assigned to image file (GIVEN) ! NX - Number of "fast" pixels of the image (GIVEN) ! NY - Number of "slow" pixels of the image (GIVEN) ! IFRAME - 16 bit coded image as needed by XDS (RESULT) ! JFRAME - 32 bit scratch array (RESULT) ! Returns (as function value) (RESULT) ! 1: cannot handle this CBF format (not implemented) ! 0: No error ! -1: Cannot determine endian architecture of this machine ! -2: Cannot open image file ! -3: Wrong image format ! -4: Cannot read image !----------------------------------------------------------------------- IMPLICIT NONE CHARACTER(len=*),INTENT(IN) :: FILNAM INTEGER, INTENT(IN) :: TAPIN,NX,NY INTEGER(2), INTENT(OUT):: IFRAME(NX*NY) INTEGER(4), INTENT(OUT):: JFRAME(NX,NY) END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_SKIP_WHITESPACE', `INTERFACE INTEGER FUNCTION FCB_SKIP_WHITESPACE(TAPIN,LAST_CHAR, & FCB_BYTES_IN_REC,BYTE_IN_FILE,REC_IN_FILE,BUFFER,& LINE,N,LINELEN,ICUR,FRESH_LINE) !----------------------------------------------------------------------- ! Skips forward on the current LINE of size N with data in ! LINE(1:LINELEN) from the current position ICUR moving over ! whitespace and comments, reading new lines into LINE if ! needed. The flag FRESH_LINE indicates that a fresh line ! should be read on entry. !----------------------------------------------------------------------- INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC,N INTEGER, INTENT(INOUT):: BYTE_IN_FILE,REC_IN_FILE,LINELEN,ICUR, & FRESH_LINE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC),LINE(N), & LAST_CHAR END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_UPDATE_JPA_POINTERS_I2', `INTERFACE INTEGER FUNCTION FCB_UPDATE_JPA_POINTERS_I2(TRAIL_INDEX_ARRAY,& NDIM1, NDIM2, ARRAY, DIM1, DIM2, AVERAGE, COMPRESSION) INTEGER(8),INTENT(INOUT):: TRAIL_INDEX_ARRAY(4), NDIM1, NDIM2 INTEGER(8), INTENT(IN):: DIM1,DIM2 INTEGER(2), INTENT(IN):: ARRAY(DIM1,DIM2) INTEGER(4), INTENT(OUT):: AVERAGE INTEGER, INTENT(IN):: COMPRESSION END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_UPDATE_JPA_POINTERS_I4', `INTERFACE INTEGER FUNCTION FCB_UPDATE_JPA_POINTERS_I4(TRAIL_INDEX_ARRAY,& NDIM1, NDIM2, ARRAY, DIM1, DIM2, AVERAGE, COMPRESSION) INTEGER(8),INTENT(INOUT):: TRAIL_INDEX_ARRAY(4), NDIM1, NDIM2 INTEGER(8), INTENT(IN):: DIM1,DIM2 INTEGER(4), INTENT(IN):: ARRAY(DIM1,DIM2) INTEGER(4), INTENT(OUT):: AVERAGE INTEGER, INTENT(IN):: COMPRESSION END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_UPDATE_JPA_POINTERS_3D_I2', `INTERFACE INTEGER FUNCTION FCB_UPDATE_JPA_POINTERS_3D_I2(TRAIL_INDEX_ARRAY,& NDIM1, NDIM2, NDIM3, ARRAY, DIM1, DIM2, DIM3, AVERAGE, COMPRESSION) INTEGER(8),INTENT(INOUT):: TRAIL_INDEX_ARRAY(8), NDIM1, NDIM2, NDIM3 INTEGER(8), INTENT(IN):: DIM1,DIM2,DIM3 INTEGER(2), INTENT(IN):: ARRAY(DIM1,DIM2,DIM3) INTEGER(4), INTENT(OUT):: AVERAGE INTEGER, INTENT(IN):: COMPRESSION END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_define(`fcb_interface_FCB_UPDATE_JPA_POINTERS_3D_I4', `INTERFACE INTEGER FUNCTION FCB_UPDATE_JPA_POINTERS_3D_I4(TRAIL_INDEX_ARRAY,& NDIM1, NDIM2, NDIM3, ARRAY, DIM1, DIM2, DIM3, AVERAGE, COMPRESSION) IMPLICIT NONE INTEGER(8),INTENT(INOUT):: TRAIL_INDEX_ARRAY(8), NDIM1, NDIM2, NDIM3 INTEGER(8), INTENT(IN):: DIM1,DIM2,DIM3 INTEGER(4), INTENT(IN):: ARRAY(DIM1,DIM2,DIM3) INTEGER(4), INTENT(OUT):: AVERAGE INTEGER, INTENT(IN):: COMPRESSION END FUNCTION !----------------------------------------------------------------------- END INTERFACE')m4_dnl m4_dnl m4_dnl macro version of cbf file open to be used both in the library m4_dnl and in applications that wish to avoid the long argument list m4_dnl m4_dnl The macro should be called with 3 arguments m4_dnl $1 should give any additional parameters to OPEN m4_dnl such as ERR=120 or IOSTAT=IOS m4_dnl $2 should give any additional parameters for the m4_dnl first read such as ERR=140 or IOSTAT=IOS m4_dnl $3 should give any the action to take if the file m4_dnl does not begin with "###CBF: " m4_define(`fcb_macro_FCB_OPEN_CIFIN', ``!----------------------------------------------------------------------- ! -- Open CBF file named FILNAM and connect to unit number TAPIN !----------------------------------------------------------------------- ! We have chosen to use the direct access method to read the file ! with explicit buffer handling. This approach is general but ! clumpsy. Rather than putting the buffer and its control variables ! into COMMON these are passed as local arguments to make the routines ! inherently '''``threadsafe'''`` in a parallel programming environment. ! Note also, that a reading error could occur for the last record ! if it did not fill a full block. This could be avoided if the ! images were padded with a sufficient number of additional bytes ! (arbitrary values) after the end of the valid binary data. ! ! The more natural method would use byte stream I/O which is, ! unfortunately, only an extension of Fortran 90 that has been ! implemented in some compilers (like the Intel ifort) but ! not in all (like the SGI IRIX f90). ! For BSD style opens, there is a special variant on the direct ! access open with a recl of 1 to give byte-by-byte access. !----------------------------------------------------------------------- INQUIRE(IOLENGTH=FCB_RECORD_SIZE)BUFFER OPEN(UNIT=TAPIN,FILE=TRIM(FILNAM),STATUS='''``OLD'''``,ACTION='''``READ'''``, & ACCESS='''``DIRECT'''``,FORM='''``UNFORMATTED'''``,RECL=FCB_RECORD_SIZE, & $1) ! *** DEBUG *** PRINT *, "RECL: ", FCB_RECORD_SIZE DO BYTE_IN_FILE = 1, FCB_BYTES_IN_REC BUFFER(BYTE_IN_FILE) = 0 END DO READ(TAPIN,REC=1,$2)BUFFER !Read the first record' m4_ifelse($3,`',`',` IF (FCB_CI_STRNCMPARR("###CBF: ",BUFFER,FCB_BYTES_IN_REC,8).NE.0) & '$3` !Check for presence of the CBF-format keyword')` REC_IN_FILE=1 BYTE_IN_FILE=0 LAST_CHAR=0 '')m4_dnl m4_define(`fcb_interface_LIST_ALL',` ! ! Definitions of fcblib interfaces ! fcb_interface_FCB_ATOL_WCNT fcb_interface_FCB_CI_STRNCMPARR fcb_interface_FCB_DECOMPRESS_PACKED_I2 fcb_interface_FCB_DECOMPRESS_PACKED_I4 fcb_interface_FCB_DECOMPRESS_PACKED_3D_I2 fcb_interface_FCB_DECOMPRESS_PACKED_3D_I4 fcb_interface_FCB_EXIT_BINARY fcb_interface_FCB_NBLEN_ARRAY fcb_interface_FCB_NEXT_BINARY fcb_interface_FCB_OPEN_CIFIN fcb_interface_FCB_READ_BITS fcb_interface_FCB_READ_BYTE fcb_interface_FCB_READ_INTEGER fcb_interface_FCB_READ_LINE fcb_interface_FCB_READ_XDS_I2 fcb_interface_FCB_SKIP_WHITESPACE fcb_interface_FCB_UPDATE_JPA_POINTERS_I2 fcb_interface_FCB_UPDATE_JPA_POINTERS_I4 fcb_interface_FCB_UPDATE_JPA_POINTERS_3D_I2 fcb_interface_FCB_UPDATE_JPA_POINTERS_3D_I4 ') ./CBFlib-0.9.2.2/m4/fcb_read_image.m4 0000644 0000765 0000765 00000026332 11603702103 015252 0 ustar yaya yaya m4_dnl fcb_read_image.m4 -- m4 macro file to generate I2, I4, m4_dnl and 3D_I2 and 3D_I4 versions m4_dnl of FCB_READ_IMAGE m4_include(`fcblib_defines.m4') m4_define(`fcb_macro_FCB_READ_IMAGE', `! FCB_READ_IMAGE_$1.F90 ! ! Derived from f90 test code by W. Kabsch ! H. J. Bernstein, 24 March 2007 ! ! Reads the next binary image from a CIF files that ! has already been opened. Leaves the file open and ! positioned just after the binary and still within ! the text field ! ! This version is for ! ! m4_ifelse($1,`I2',`2-D INTEGER*2 arrays', $1,`I4',`2-D INTEGER*4 arrays', $1,`3D_I2',`3-D INTEGER*2 arrays', $1,`3D_I4',`3-D INTEGER*4 arrays',`2-D INTEGER*2 arrays') m4_define(`fcb_3d_flag',`2D')m4_dnl m4_ifelse($1,`3D_I2',`m4_define(`fcb_3d_flag',`3D')', $1,`3D_I4',`m4_define(`fcb_3d_flag',`3D')')m4_dnl ! ! with function ! ! FCB_READ_IMAGE_$1 INTEGER FUNCTION FCB_READ_IMAGE_$1(ARRAY,NELEM,NELEM_READ, & ELSIGN, COMPRESSION, DIM1, DIM2, m4_ifelse(fcb_3d_flag,`3D', `DIM3, ') & PADDING,TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) !----------------------------------------------------------------------- m4_ifelse($1,`I2', `! Reads a 16-bit integer twos complement 2D image', $1,`I4', `! Reads a 32-bit integer twos complement 2D image', $1,`3D_I2', `! Reads a 16-bit integer twos complement 3D image', $1,`3D_I4', `! Reads a 32-bit integer twos complement 3D image') ! ! compressed by a BYTE_OFFSET algorithm by W. Kabsch based ! on a proposal by A. Hammersley or ! compressed by a PACKED algorithm by J. P. Abrahams as ! used in CCP4, with modifications by P. Ellis and ! H. J. Bernstein. ! ! The BYTE-OFFSET algorithm is a slightly simplified version of ! that described in Andy Hammersley''`s web page ! (http://www.esrf.fr/computing/Forum/imgCIF/cbf_definition.html) ! !----------------------------------------------------------------------- ! ARRAY - Image (RESULT) ! NELEM - The number of elements to be read (GIVEN) ! NELEM_READ ! - The number of elements actually read (RESULT) ! ELSIGN - Flag for signed (1) OR unsigned (0) data (GIVEN) ! COMPRESSION ! - The actual compression of the image (RESULT) ! DIM1 - The fastest dimension of ARRAY (GIVEN) m4_ifelse(`fcb_3d_flag',`3D', `! DIM2 - The next slower dimension (GIVEN) ! DIM3 - The slowest dimension (GIVEN)', `! DIM2 - The slowest dimension (GIVEN)') ! TAPIN - Fortran device unit number assigned to image file (GIVEN) ! FCB_BYTES_IN_REC ! - The number of bytes in each bufferload to read (GIVEN) ! BYTE_IN_FILE ! - The position in the file of the next byte to read (GIVEN, ! RESULT) ! REC_IN_FILE ! - The record number from 1 of the block in BUFFER (GIVEN, ! RESULT) ! BUFFER - Buffer of bytes read from the file (GIVEN, ! RESULT) ! PADDING - Pad bytes after the binary (RESULT) ! ! Returns (as function value) (RESULT) ! CBF_FORMAT (=1): ! cannot handle this CBF format (not implemented) ! 0: No error !----------------------------------------------------------------------- IMPLICIT NONE INTEGER(8), INTENT(IN):: DIM1,DIM2`'m4_ifelse(fcb_3d_flag,`3D', `,DIM3') INTEGER(m4_ifelse($1,`I2',2,$1,`3D_I2',2,4)), INTENT(OUT):: ARRAY(DIM1,DIM2`'m4_ifelse(fcb_3d_flag,`3D', `,DIM3')) INTEGER(8), INTENT(OUT):: NELEM_READ INTEGER(8), INTENT(IN):: NELEM INTEGER, INTENT(IN):: ELSIGN INTEGER, INTENT(OUT):: COMPRESSION INTEGER(8), INTENT(OUT):: PADDING INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) ! -- Definition of CBF_FORMAT fcb_errcode_CBF_FORMAT ! -- External functions called fcb_interface_FCB_READ_BYTE fcb_interface_FCB_NEXT_BINARY fcb_interface_FCB_CI_STRNCMPARR fcb_interface_FCB_DECOMPRESS_PACKED_$1 ! -- Local variables INTEGER STEP,FIRST2,LAST2,FIRST4,LAST4,II,I,J`'m4_ifelse(fcb_3d_flag, `3D',`,K') INTEGER(4) DIFF,PIXVALUE,MARKER,IADR INTEGER(2) SHORTINT INTEGER(1) LAST_CHAR,ONEBYTE, & TWOBYTES(2),FOURBYTES(4),ENDIANORDER(4), & MARKBYTES(4) INTEGER ENCODING fcb_param_ENC_LIST_ALL INTEGER SIZE INTEGER ID fcb_param_CBF_LIST_ALL INTEGER BITS,VORZEICHEN,REELL CHARACTER(len=24) DIGEST CHARACTER(len=14) BYTEORDER !Possible parameter values for BYTEORDER are: !"LITTLE_ENDIAN" supported !"BIG_ENDIAN" not supported INTEGER(8) DIMOVER INTEGER(8) LDIM1 !Number of "fast" pixels of the image INTEGER(8) LDIM2 !Number of "slow" pixels of the image INTEGER(8) LDIM3 INTEGER(4) PREV_ELEMENT DATA ENDIANORDER/Z''`12''`,Z''`34''`,Z''`56''`,Z''`78''`/ DATA MARKBYTES/Z''`0C''`,Z''`1A''`,Z''`04''`,Z''`D5''`/ !----------------------------------------------------------------------- ! -- Determine endian architecture of this machine !----------------------------------------------------------------------- ! Definition: If the lowest memory address of multi-byte data is ! considered the starting address of the data, the least ! significant byte (LSB) is at the lowest memory address ! for a ''`little_endian''` cpu architecture. ! ! Example: The 32 bit hex value Z''`12345678''` is stored as follows: ! ENDIAN ORDER BYTE0 BYTE1 BYTE2 BYTE3 ! Big Endian 12 34 56 78(LSB) ! Little Endian 78(LSB) 56 34 12 !----------------------------------------------------------------------- PIXVALUE=TRANSFER(ENDIANORDER,PIXVALUE) STEP=0 IF (PIXVALUE .EQ. Z''`78563412''`) THEN !Little Endian machine STEP=1 FIRST2=1;LAST2=2 FIRST4=1;LAST4=4 ENDIF IF (PIXVALUE .EQ. Z''`12345678''`) THEN ! Big Endian machine STEP=-1 FIRST2=2;LAST2=1 FIRST4=4;LAST4=1 ENDIF IF (STEP.EQ.0)GO TO 110 !----------------------------------------------------------------------- ! -- Skip to the next binary and parse the MIME header !----------------------------------------------------------------------- IF (FCB_NEXT_BINARY(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC,BYTE_IN_FILE,& REC_IN_FILE,BUFFER,ENCODING,SIZE,ID,DIGEST,COMPRESSION,BITS, & VORZEICHEN,REELL,BYTEORDER,DIMOVER,LDIM1,LDIM2,LDIM3,PADDING).NE.0) & GO TO 130 IF ((DIM1.NE.LDIM1).OR.(DIM2.NE.LDIM2)`'m4_ifelse(`fcb_3d_flag', `3D',`.OR.(DIM3.NE.LDIM3)'))GO TO 130 !----------------------------------------------------------------------- ! -- Advance to start of binary image data !----------------------------------------------------------------------- ! In CBF the binary data begins immediately after the first occurence ! of the following 4 bytes (MARKBYTES) in the image file ! Octet Hex Decimal Purpose ! 1 0C 12 (ctrl-L) End the current page ! 2 1A 26 (ctrl-Z) Stop listings in MS-DOS ! 3 04 04 (Ctrl-D) Stop listings in UNIX ! 4 D5 213 Binary section begins ! 5..5+n-1 Binary data (n octets) !----------------------------------------------------------------------- MARKER=TRANSFER(MARKBYTES,MARKER) FOURBYTES=0 DO DO I=1,3 FOURBYTES(I)=FOURBYTES(I+1) ENDDO BYTE_IN_FILE=BYTE_IN_FILE+1 IF (FCB_READ_BYTE(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,FOURBYTES(4)).NE.0) GO TO 140 PIXVALUE=TRANSFER(FOURBYTES,PIXVALUE) IF (PIXVALUE.EQ.MARKER)EXIT ENDDO ! *** DEBUG *** PRINT *, "fwa-1 address of IMAGE at: " ! *** DEBUG *** PRINT *, "BYTE_IN_FILE: ", BYTE_IN_FILE ! *** DEBUG *** PRINT *, "REC_IN_FILE: ", REC_IN_FILE !----------------------------------------------------------------------- ! -- Read data image of 32 bit two''`s complement integers, compressed ! -- by the BYTE-OFFSET algorithm. ! -- After the expansion the original pixel values are coded by 16 bit ! -- in a special way suitable for XDS (see INTEGER*2 FUNCTION CNT2PIX). !----------------------------------------------------------------------- FCB_READ_IMAGE_$1=CBF_FORMAT !Cannot handle this CBF format IF ((BYTEORDER.EQ."LITTLE_ENDIAN").AND.(ENCODING.EQ.ENC_NONE).AND.& (IAND(COMPRESSION,CBF_COMPRESSION_MASK).EQ.CBF_BYTE_OFFSET))THEN PIXVALUE=0 NELEM_READ=0 m4_ifelse(fcb_3d_flag, `3D',`DO K = 1, DIM3') DO J = 1, DIM2 DO I = 1, DIM1 BYTE_IN_FILE=BYTE_IN_FILE+1 IF (FCB_READ_BYTE(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,ONEBYTE).NE.0) GO TO 140 DIFF=ONEBYTE IF (DIFF.EQ.-128)THEN DO II=FIRST2,LAST2,STEP BYTE_IN_FILE=BYTE_IN_FILE+1 IF (FCB_READ_BYTE(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,TWOBYTES(II)).NE.0)GO TO 140 ENDDO SHORTINT=TRANSFER(TWOBYTES,SHORTINT) DIFF=SHORTINT IF (DIFF.EQ.-32768)THEN DO II=FIRST4,LAST4,STEP BYTE_IN_FILE=BYTE_IN_FILE+1 IF (FCB_READ_BYTE(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,FOURBYTES(II)).NE.0) & GO TO 140 ENDDO DIFF=TRANSFER(FOURBYTES,DIFF) ENDIF ENDIF PIXVALUE=PIXVALUE+DIFF ARRAY(I,J`'m4_ifelse(fcb_3d_flag,`3D',`,K')) = PIXVALUE NELEM_READ=NELEM_READ+1 ENDDO ENDDO`'m4_ifelse(fcb_3d_flag,`3D',` ENDDO') FCB_READ_IMAGE_$1=0 !No error ELSE IF ((BYTEORDER.EQ."LITTLE_ENDIAN").AND.(ENCODING.EQ.ENC_NONE).AND. & ((IAND(COMPRESSION,CBF_COMPRESSION_MASK).EQ.CBF_PACKED) .OR. & (IAND(COMPRESSION,CBF_COMPRESSION_MASK).EQ.CBF_PACKED_V2)))THEN FCB_READ_IMAGE_$1=FCB_DECOMPRESS_PACKED_$1 (ARRAY,NELEM,NELEM_READ, & VORZEICHEN, COMPRESSION, DIM1, DIM2,`'m4_ifelse(fcb_3d_flag,`3D',`DIM3,') & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) IF (NELEM_READ.NE.NELEM) PRINT *, "EARLY TERMINATION AT ",NELEM_READ PREV_ELEMENT = 0 END IF END IF !----------------------------------------------------------------------- 100 RETURN 110 FCB_READ_IMAGE_$1=-1 !Cannot determine endian architecture of this machine RETURN 130 FCB_READ_IMAGE_$1=-3 !Wrong image format GO TO 100 140 FCB_READ_IMAGE_$1=-4 !Cannot read image GO TO 100 END FUNCTION FCB_READ_IMAGE_$1') fcb_macro_FCB_READ_IMAGE(`I2') fcb_macro_FCB_READ_IMAGE(`I4') fcb_macro_FCB_READ_IMAGE(`3D_I2') fcb_macro_FCB_READ_IMAGE(`3D_I4') ./CBFlib-0.9.2.2/m4/test_fcb_read_image.m4 0000644 0000765 0000765 00000015101 11603702103 016301 0 ustar yaya yaya m4_include(`fcblib_defines.m4')` PROGRAM TEST IMPLICIT NONE CHARACTER(LEN=100) LINE INTEGER(2) IFRAME(1000,1000), DPREV INTEGER(4) JFRAME(1000,1000) INTEGER(4) KFRAME(50,60,70) INTEGER,PARAMETER:: FCB_BYTES_IN_REC='m4_ifelse(`fcb_bytes_in_rec',`',4096,`fcb_bytes_in_rec')` INTEGER IER, I, J, K, TAPIN, SIZE INTEGER BYTE_IN_FILE, REC_IN_FILE, DTARG, ID INTEGER(1) LAST_CHAR, BUFFER(FCB_BYTES_IN_REC) INTEGER COMPRESSION, BITS, VORZEICHEN, REELL, ENCODING INTEGER(8) DIM1, DIM2, DIM3, DIMOVER, PADDING INTEGER(8) NELEM, NELEM_READ CHARACTER(len=24) DIGEST CHARACTER(len=14) BYTEORDER ' fcb_interface_FCB_EXIT_BINARY fcb_interface_FCB_OPEN_CIFIN fcb_interface_FCB_NEXT_BINARY fcb_interface_FCB_READ_IMAGE_I2 fcb_interface_FCB_READ_IMAGE_I4 fcb_interface_FCB_READ_IMAGE_3D_I2 fcb_interface_FCB_READ_IMAGE_3D_I4 TAPIN=9 ` PRINT *,''` NAME OF TEST CBF ''` READ *, LINE IER = FCB_OPEN_CIFIN(LINE,TAPIN,LAST_CHAR, & FCB_BYTES_IN_REC,BYTE_IN_FILE,REC_IN_FILE,BUFFER) IF (IER.NE.0) THEN PRINT *,"FILE OPEN ERROR: ", IER STOP END IF ! Read an array 1000 x 1000 INTEGER(4) in a flat field of 1000 PRINT *, " 1000 x 1000 I4 TEST " NELEM = 1000*1000 DIM1 = 1000 DIM2 = 1000 IER = FCB_READ_IMAGE_I4(JFRAME,NELEM,NELEM_READ, & 1, COMPRESSION, DIM1, DIM2, PADDING, & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) IF (IER.NE.0) THEN PRINT *," FCB_READ_IMAGE_I4 ERROR: ", IER STOP ELSE DPREV = 0 DO J = 1,1000 DO I = 1,1000 DTARG = 1000 IF (JFRAME(I,J).NE.DTARG) THEN PRINT *, "IFRAME(",I,",",J,") = ", & JFRAME(I,J), ", SHOULD BE ",DTARG END IF END DO END DO END IF IER = FCB_EXIT_BINARY(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC,& BYTE_IN_FILE,REC_IN_FILE,BUFFER, PADDING ) IF (IER.NE.0) THEN PRINT *," FCB_EXIT_BINARY ERROR: ", IER STOP END IF ! Read an array 1000 x 1000 INTEGER(2) in a flat field of 1000 PRINT *, " 1000 x 1000 I2 TEST " IER = FCB_READ_IMAGE_I2(IFRAME,NELEM,NELEM_READ, & 1, COMPRESSION, DIM1, DIM2, PADDING, & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) IF (IER.NE.0) THEN PRINT *," FCB_READ_IMAGE_I2 ERROR: ", IER STOP ELSE DPREV = 0 DO J = 1,1000 DO I = 1,1000 DTARG = 1000 IF (IFRAME(I,J).NE.DTARG) THEN PRINT *, "IFRAME(",I,",",J,") = ", & IFRAME(I,J), ", SHOULD BE ",DTARG END IF END DO END DO END IF IER = FCB_EXIT_BINARY(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC,& BYTE_IN_FILE,REC_IN_FILE,BUFFER, PADDING ) IF (IER.NE.0) THEN PRINT *," FCB_EXIT_BINARY ERROR: ", IER STOP END IF ! Read an array 1000 x 1000 INTEGER(4) in a flat field of 1000 ! except for -3 along the main diagonal and its transpose PRINT *, " 1000 x 1000 I4 TEST, WITH -3 on diag and transpose " IER = FCB_READ_IMAGE_I4(JFRAME,NELEM,NELEM_READ, & 1, COMPRESSION, DIM1, DIM2, PADDING, & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) IF (IER.NE.0) THEN PRINT *," FCB_READ_IMAGE_I4 ERROR: ", IER STOP ELSE DPREV = 0 DO J = 1,1000 DO I = 1,1000 DTARG = 1000 IF (I .EQ. J .OR. 1001-I .EQ. J) THEN DTARG = -3 END IF IF (JFRAME(I,J).NE.DTARG) THEN PRINT *, "IFRAME(",I,",",J,") = ", & JFRAME(I,J), ", SHOULD BE ",DTARG END IF END DO END DO END IF IER = FCB_EXIT_BINARY(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC,& BYTE_IN_FILE,REC_IN_FILE,BUFFER, PADDING ) IF (IER.NE.0) THEN PRINT *," FCB_EXIT_BINARY ERROR: ", IER STOP END IF ! Read an array 1000 x 1000 INTEGER(2) in a flat field of 1000 ! except for -3 along the main diagonal and its transpose PRINT *, " 1000 x 1000 I2 TEST, WITH -3 on diag and transpose " IER = FCB_READ_IMAGE_I2(IFRAME,NELEM,NELEM_READ, & 1, COMPRESSION, DIM1, DIM2, PADDING, & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) IF (IER.NE.0) THEN PRINT *," FCB_READ_IMAGE_I2 ERROR: ", IER STOP ELSE DPREV = 0 DO J = 1,1000 DO I = 1,1000 DTARG = 1000 IF (I .EQ. J .OR. 1001-I .EQ. J) THEN DTARG = -3 END IF IF (IFRAME(I,J).NE.DTARG) THEN PRINT *, "IFRAME(",I,",",J,") = ", & IFRAME(I,J), ", SHOULD BE ",DTARG END IF END DO END DO END IF IER = FCB_EXIT_BINARY(TAPIN,LAST_CHAR,FCB_BYTES_IN_REC,& BYTE_IN_FILE,REC_IN_FILE,BUFFER, PADDING ) IF (IER.NE.0) THEN PRINT *," FCB_EXIT_BINARY ERROR: ", IER STOP END IF ! Read an array 50 x 60 x 70 INTEGER(4) in a flat field of 1000, ! except for -3 along the main diagonal and the values i+j+k-3 ! every 1000th pixel PRINT *, " 50 x 60 x 70 3D_I4 TEST " DIM1 = 50 DIM2 = 60 DIM3 = 70 NELEM = DIM1*DIM2*DIM3 IER = FCB_READ_IMAGE_3D_I4(KFRAME,NELEM,NELEM_READ, & 1, COMPRESSION, DIM1, DIM2, DIM3, PADDING, & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) IF (IER.NE.0) THEN PRINT *," FCB_READ_IMAGE_3D_I4 ERROR: ", IER STOP ELSE DPREV = 0 DO K = 1,70 DO J = 1,60 DO I = 1,50 DTARG = 1000 IF (I .EQ. J .OR. J .EQ. K) THEN DTARG = -3 END IF IF (MOD(I-1+(J-1)*50+(K-1)*50*60,1000).EQ.0) THEN DTARG = I+J+K-3 END IF IF (KFRAME(I,J,K).NE.DTARG) THEN PRINT *, "KFRAME(",I,",",J,",",K,") = ", & KFRAME(I,J,K), ", SHOULD BE ",DTARG END IF END DO END DO END DO END IF PRINT *, "TESTS COMPLETED" STOP END ' ./CBFlib-0.9.2.2/m4/fcb_read_bits.m4 0000644 0000765 0000765 00000013345 11603702103 015131 0 ustar yaya yaya m4_include(`fcblib_defines.m4')m4_dnl ` INTEGER FUNCTION FCB_READ_BITS(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BCOUNT,BBYTE, & BITCOUNT,IINT,LINT) !----------------------------------------------------------------------- ! Get integer value starting at BYTE_IN_FILE from file TAPIN ! continuing through BITCOUNT bits, with sign extension. ! (first byte is BYTE_IN_FILE=1) !----------------------------------------------------------------------- IMPLICIT NONE INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) INTEGER, INTENT(INOUT):: BCOUNT INTEGER(1),INTENT(INOUT):: BBYTE INTEGER, INTENT(IN):: BITCOUNT INTEGER, INTENT(IN):: LINT INTEGER(4), INTENT(OUT):: IINT(LINT) INTEGER I,J,LBITCOUNT,COUNT,KINTS INTEGER(8) BITCODE,TBITCODE, M, MASK8 !----------------------------------------------------------------------- INTEGER MAXBITS, NUMINTS ' fcb_interface_FCB_READ_BYTE ` MAXBITS = 32 NUMINTS = (BITCOUNT+MAXBITS-1)/MAXBITS MASK8 = Z''`000000FF''` DO KINTS = 1,NUMINTS LBITCOUNT = MAXBITS IF (KINTS.EQ.NUMINTS) LBITCOUNT = BITCOUNT-(NUMINTS-1)*32 COUNT = BCOUNT BITCODE = BBYTE BITCODE = IAND(BITCODE,MASK8) DO IF (COUNT .GE. LBITCOUNT) EXIT BYTE_IN_FILE=BYTE_IN_FILE+1 FCB_READ_BITS = & FCB_READ_BYTE(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BBYTE) IF (FCB_READ_BITS.NE.0) RETURN BCOUNT=8 TBITCODE = BBYTE TBITCODE = IAND(TBITCODE,MASK8) CALL MVBITS(TBITCODE,0,MIN(8,32-COUNT),BITCODE,COUNT) COUNT = COUNT+8 END DO ! SIGN EXTEND IF (LBITCOUNT .LT. MAXBITS) THEN M = 1 M = ISHFT(M,LBITCOUNT-1) IF (IAND(BITCODE,M).NE.0) THEN IINT(KINTS) = IOR(BITCODE,-M) ELSE IINT(KINTS) = IAND(BITCODE,NOT(-M)) ENDIF ELSE IINT(KINTS) = BITCODE ENDIF ! SAVE THE REMAINING BITS FOR NEXT TIME TBITCODE = BBYTE TBITCODE = ISHFT(IAND(TBITCODE,MASK8),-(BCOUNT-(COUNT-LBITCOUNT)) ) BBYTE = TBITCODE BCOUNT = COUNT-LBITCOUNT END DO FCB_READ_BITS = 0 RETURN END FUNCTION FCB_READ_BITS INTEGER FUNCTION FCB_READ_INTEGER(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BCOUNT,BBYTE, & VALSIGN,BITCOUNT,IINT,LINT) !----------------------------------------------------------------------- ! Get integer value starting at BYTE_IN_FILE from file TAPIN ! continuing through BITCOUNT bits, with optional sign extension. ! (first byte is BYTE_IN_FILE=1) !----------------------------------------------------------------------- IMPLICIT NONE INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) INTEGER, INTENT(INOUT):: BCOUNT INTEGER(1),INTENT(INOUT):: BBYTE INTEGER, INTENT(IN):: VALSIGN,BITCOUNT INTEGER, INTENT(IN):: LINT INTEGER(4), INTENT(OUT):: IINT(LINT) INTEGER SIGNBITS, VALBITS, NUMINTS, FRI INTEGER I,J,LBITCOUNT,COUNT INTEGER(4) TVAL(4), BITCODE,TBITCODE, M INTEGER(4) XSIGN(1) ' fcb_errcode_CBF_OVERFLOW fcb_interface_FCB_READ_BITS ` !----------------------------------------------------------------------- IF (BITCOUNT .LE. 0) THEN IINT(1) = 0 FCB_READ_INTEGER = 0 RETURN END IF SIGNBITS = BITCOUNT-32 IF (SIGNBITS .GT. 0) THEN VALBITS = BITCOUNT-SIGNBITS ELSE VALBITS = BITCOUNT END IF ! READ THE VALUE FRI = & FCB_READ_BITS(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BCOUNT,BBYTE, & VALBITS,IINT,LINT) FCB_READ_INTEGER = FRI IF (FCB_READ_INTEGER .NE. 0) RETURN IF (VALBITS .LT. 32 .AND. VALSIGN .EQ. 0) THEN IINT(1) = IAND(IINT(1),NOT(-ISHFT(1,VALBITS)) ) ENDIF DO IF (SIGNBITS .LE. 0) EXIT IF (SIGNBITS .LT. 32) THEN FRI = & FCB_READ_BITS(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BCOUNT,BBYTE, & SIGNBITS,XSIGN,1) FCB_READ_INTEGER = FRI IF (FCB_READ_INTEGER .NE. 0) RETURN ELSE FRI = & FCB_READ_BITS(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BCOUNT,BBYTE, & 32,XSIGN,1) FCB_READ_INTEGER = FRI IF (FCB_READ_INTEGER .NE. 0) RETURN END IF SIGNBITS = SIGNBITS-32 IF ((IINT(1) .LT. 0 .AND. VALSIGN.NE.0 .AND. XSIGN(1).NE.-1) & .OR. ((IINT(1) .GE. 0 .OR. VALSIGN.EQ.0) .AND. XSIGN(1).NE.0)& ) THEN FCB_READ_INTEGER = CBF_OVERFLOW IINT(1) = -1 IF (VALSIGN.NE.0) THEN IF (XSIGN(1).GE. 0) THEN IINT(1) = Z''`7FFFFFFF''` ELSE IINT(1) = Z''`80000000''` END IF END IF RETURN END IF END DO FCB_READ_INTEGER = 0 RETURN END FUNCTION FCB_READ_INTEGER' ./CBFlib-0.9.2.2/m4/fcb_packed.m4 0000644 0000765 0000765 00000044450 11603702103 014425 0 ustar yaya yaya m4_dnl fcb_packed.m4 -- m4 macro file to generate I2, I4, m4_dnl and 3D_I2 and 3D_I4 versions m4_dnl of FCB_DECOMPRESS_PACKED m4_include(`fcblib_defines.m4')m4_dnl m4_define(`fcb_macro_FCB_PACKED', `! FCB_PACKED_$1.f90 ! ! Derived from CBFlib cbf_packed.c ! H. J. Bernstein, 25 February 2007 ! ! Based on J. P. Abrahams pack_c.c ! incorporated under GPL and LGPL in ! CBFlib with permission from CCP4 and ! from J. P. Abramhams ! ! Also based in part on test_pack.f90 ! translation of an earlier pack_c.c ! by W. Kabsch and K. Rohm ! Update pointers for averaging in J. P. Abrahams CCP4 compression ! algorithm. These f90 routines are derived from ! cbf_update_jpa_pointers, reworked as one routine ! for 2-dimensional arrays and one routine for 3-dimensional ! arrays, with I2 and I4 variants for each. ! ! This version is for ! ! m4_ifelse($1,`I2',`2-D INTEGER*2 arrays', $1,`I4',`2-D INTEGER*4 arrays', $1,`3D_I2',`3-D INTEGER*2 arrays', $1,`3D_I4',`3-D INTEGER*4 arrays',`2-D INTEGER*2 arrays') m4_define(`fcb_3d_flag',`2D')m4_dnl m4_ifelse($1,`3D_I2',`m4_define(`fcb_3d_flag',`3D')', $1,`3D_I4',`m4_define(`fcb_3d_flag',`3D')')m4_dnl m4_define(`fcb_i2_flag',`I2')m4_dnl m4_ifelse($1,`I4',`m4_define(`fcb_i2_flag',`I4')', $1,`3D_I4',`m4_define(`fcb_i2_flag',`I4')')m4_dnl ! ! with functions ! ! FCB_UPDATE_JPA_POINTERS_$1 ! FCB_DECOMPRESS_PACKED_$1 ! ! In the f90 implementation TRAIL_INDEX_ARRAY(1..8) has been ! replaced by TRAIL_INDEX_ARRAY(1..4) for 2-dimensional ! arrays and TRAIL_INDEX_ARRAY(1..8) for 3-dimensional arrays ! containing array indices or 0, for the array as if it ! were a linear array. ! ! On entry, TRAIL_INDEX_ARRAY(1) should point to the data element ! immediately prior to the next data element to be processed, either ! in the same row (fastest index) or, at the end of the prior row ! if the next data element to be processed is at the end of a row ! ! ndim1, ndim2, ndim3 should point to the indices of the same ! data element as TRAIL_INDEX_ARRAY(1) points to. These values ! will be incremented to be the indices of the next data element ! to be processed before populating TRAIL_INDEX_ARRAY. ! ! On exit, TRAIL_INDEX_ARRAY(1..8) will have been populated with ! pointers to the data elements to be used in forming the average. ! Elements that will not be used will be set to NULL. Note ! that TRAIL_INDEX_ARRAY(1) may be set to NULL. ! ! If we mark the next element to be processed with a "*" and the ! entries in TRAIL_INDEX_ARRAY with their array indices 1 .. 8, the ! possible patterns of settings in the general case are: ! ! current section: ! ! - - - - 1 * - - - - ! - - - - 4 3 2 - - - ! - - - - - - - - - - ! ! prior section: ! ! - - - - - 5 - - - - ! - - - - 8 7 6 - - - ! - - - - - - - - - - ! ! If there is no prior section (i.e. ndim3 is 0, or ! the CBF_UNCORRELATED_SECTIONS flag is set ! to indicate discontinuous sections), the values ! for TRAIL_INDEX_ARRAY (5..8) will all be NULL. When ! there is a prior section, TRAIL_INDEX_ARRAY(6..8) are ! pointers to the elements immediately below the ! elements pointed to by TRAIL_INDEX_ARRAY(2..4), but ! TRAIL_INDEX_ARRAY(5) is one element further along ! its row to be directly below the next element to ! be processed. ! ! The first element of the first row of the first section ! is a special case, with no averaging. This function ! should not be called for that case. ! ! In the first row of the first section (ndim2 == 1, ! and ndim3 == 1), after the first element (ndim1 > 1), ! only TRAIL_INDEX_ARRAY(1) is used ! ! current section: ! ! - - - - 1 * - - - - ! For subsequent rows of the first section (ndim2 > 1, ! and ndim3 == 1), for the first element (ndim1 == 1), ! two elements from the prior row are used: ! ! current section: ! ! * - - - - - - - - - ! 3 2 - - - - - - - - ! - - - - - - - - - - ! while for element after the first element, but before ! the last element of the row, a full set of 4 elements ! is used: ! ! current section: ! ! - - - - 1 * - - - - ! - - - - 4 3 2 - - - ! - - - - - - - - - - ! ! For the last element of a row (ndim1 == dim1-1), two ! elements are used ! ! current section: ! ! - - - - - - - - 1 * ! - - - - - - - - - 3 ! - - - - - - - - - - ! ! For sections after the first section, provided the ! CBF_UNCORRELATED_SECTIONS flag is not set in compression, ! for each non-NULL entry in TRAIL_INDEX_ARRAY (1..4) an entry ! is made in TRAIL_INDEX_ARRAY (5..8), except for the ! first element of the first row of a section. In that ! case an entry is made in TRAIL_INDEX_ARRAY(5). INTEGER FUNCTION FCB_UPDATE_JPA_POINTERS_$1(TRAIL_INDEX_ARRAY,& NDIM1, NDIM2, m4_ifelse(fcb_3d_flag,`3D', `NDIM3, ')ARRAY, DIM1, DIM2, m4_ifelse(fcb_3d_flag,`3D', `DIM3, ')AVERAGE, COMPRESSION) IMPLICIT NONE INTEGER(8), INTENT(IN):: DIM1,DIM2`'m4_ifelse(fcb_3d_flag,`3D',`,DIM3') INTEGER(8),INTENT(INOUT):: TRAIL_INDEX_ARRAY(`'m4_ifelse(fcb_3d_flag, `3D',`8',`4')), NDIM1, NDIM2`'m4_ifelse(fcb_3d_flag,`3D',`, NDIM3',` ') INTEGER(m4_ifelse($1,`I2',2,$1,`3D_I2',2,4)), INTENT(IN):: ARRAY(DIM1,DIM2`'m4_ifelse(fcb_3d_flag,`3D',`,DIM3')) INTEGER(4), INTENT(OUT):: AVERAGE INTEGER, INTENT(IN):: COMPRESSION INTEGER I, J, K, IFAST, m4_ifelse(fcb_3d_flag,`3D',`IMID, ')ISLOW INTEGER LOGTWO(4) m4_ifelse(fcb_i2_flag,`I2', ` INTEGER(4), PARAMETER:: SIGNMASK=Z'''``00008000'''`` INTEGER(4), PARAMETER:: LIMMASK=Z'''``0000FFFF'''``') fcb_param_CBF_LIST_ALL DATA LOGTWO / 1,2,0,3 / AVERAGE = 0 NDIM1 = NDIM1+1 IF (NDIM1 .EQ. DIM1+1) THEN NDIM1 = 1 NDIM2 = NDIM2+1 m4_ifelse(fcb_3d_flag,`3D', `` IF (NDIM2 .EQ. DIM2+1) THEN NDIM2 = 1 NDIM3 = NDIM3+1 END IF '') END IF DO I = 2,m4_ifelse(fcb_3d_flag,`3D',`8',`4') TRAIL_INDEX_ARRAY(I) = 0 END DO IF (NDIM2 > 1) THEN ! NOT IN THE FIRST ROW TRAIL_INDEX_ARRAY(2) = TRAIL_INDEX_ARRAY(1)-(DIM1-2) ! DOWN 1 RIGHT 2 TRAIL_INDEX_ARRAY(3) = TRAIL_INDEX_ARRAY(1)-(DIM1-1) ! DOWN 1 RIGHT 1 IF (NDIM1 > 1) THEN ! NOT IN THE FIRST COLUMN TRAIL_INDEX_ARRAY(4) = TRAIL_INDEX_ARRAY(1)-DIM1 ! DOWN 1 IF (NDIM1 .EQ. DIM1) THEN ! LAST COLUMN TRAIL_INDEX_ARRAY(2) = 0 TRAIL_INDEX_ARRAY(4) = 0 END IF ELSE ! FIRST COLUMN TRAIL_INDEX_ARRAY(1) = 0 END IF m4_ifelse(fcb_3d_flag,`3D', `` IF (NDIM3 .GT. 1 .AND. & IAND(COMPRESSION,CBF_UNCORRELATED_SECTIONS).EQ.0 ) THEN IF (TRAIL_INDEX_ARRAY(1).NE.0) THEN TRAIL_INDEX_ARRAY(5) = & TRAIL_INDEX_ARRAY(1) - DIM1*DIM2 + 1 END IF DO I = 2,4 IF (TRAIL_INDEX_ARRAY(I).NE.0) THEN TRAIL_INDEX_ARRAY(I+4) = & TRAIL_INDEX_ARRAY(I) - DIM1*DIM2 END IF END DO END IF '') ELSE ! FIRST ROW OF A SECTION IF (NDIM1 .EQ. 1 ) THEN m4_ifelse(fcb_3d_flag,`3D', `` TRAIL_INDEX_ARRAY(5) = TRAIL_INDEX_ARRAY(1) - (DIM1*DIM2-1) '') TRAIL_INDEX_ARRAY(1) = 0 END IF END IF J = 0 m4_ifelse(fcb_3d_flag,`3D', ` DO I = 1,8 IF (TRAIL_INDEX_ARRAY(I).NE.0) THEN J = J+1 ISLOW = 1+(TRAIL_INDEX_ARRAY(I)-1)/(DIM1*DIM2) IMID = 1+MOD(TRAIL_INDEX_ARRAY(I)-1,DIM1*DIM2) IMID = 1+(IMID-1)/DIM1 IFAST = 1+MOD(TRAIL_INDEX_ARRAY(I)-1,DIM1) AVERAGE = AVERAGE+ARRAY(IFAST,IMID,ISLOW) END IF END DO ', ` DO I = 1,4 IF (TRAIL_INDEX_ARRAY(I).NE.0) THEN J = J+1 ISLOW = 1+(TRAIL_INDEX_ARRAY(I)-1)/DIM1 IFAST = 1+MOD(TRAIL_INDEX_ARRAY(I)-1,DIM1) AVERAGE = AVERAGE+ARRAY(IFAST,ISLOW) END IF END DO ') K = ISHFT(J,-1) IF ( K .GT. 0 ) THEN m4_ifelse(fcb_i2_flag,`I2', ` AVERAGE = IAND(AVERAGE,LIMMASK) IF (IAND(AVERAGE+K,SIGNMASK).NE.0) AVERAGE = IOR(AVERAGE,NOT(LIMMASK))') IF (AVERAGE .GE.0) THEN AVERAGE = ISHFT(AVERAGE+K,-LOGTWO(K)) ELSE AVERAGE = NOT(ISHFT(NOT(AVERAGE+K),-LOGTWO(K))) ENDIF END IF FCB_UPDATE_JPA_POINTERS_$1 = 0 RETURN END FUNCTION FCB_UPDATE_JPA_POINTERS_$1 INTEGER FUNCTION FCB_DECOMPRESS_PACKED_$1 (ARRAY,NELEM,NELEM_READ, & ELSIGN, COMPRESSION, DIM1, DIM2, m4_ifelse(fcb_3d_flag,`3D', ``DIM3, '') & TAPIN,FCB_BYTES_IN_REC,BYTE_IN_FILE, & REC_IN_FILE,BUFFER) IMPLICIT NONE INTEGER(8), INTENT(IN):: DIM1,DIM2`'m4_ifelse(fcb_3d_flag,`3D', `,DIM3') INTEGER(m4_ifelse($1,`I2',2,$1,`3D_I2',2,4)), INTENT(OUT):: ARRAY(DIM1,DIM2`'m4_ifelse(fcb_3d_flag,`3D', `,DIM3')) INTEGER(8), INTENT(OUT):: NELEM_READ INTEGER(8), INTENT(IN):: NELEM INTEGER, INTENT(IN):: ELSIGN, COMPRESSION INTEGER, INTENT(IN):: TAPIN,FCB_BYTES_IN_REC INTEGER, INTENT(INOUT):: REC_IN_FILE,BYTE_IN_FILE INTEGER(1),INTENT(INOUT):: BUFFER(FCB_BYTES_IN_REC) INTEGER(8) TRAIL_INDEX_ARRAY(m4_ifelse(fcb_3d_flag,`3D',8,4)) INTEGER I, V2FLAG, AVGFLAG, CLIPBITS, BITS INTEGER(8) NDIM1, NDIM2, m4_ifelse(fcb_3d_flag,`3D', `NDIM3,')LDIM1, LDIM2`'m4_ifelse(fcb_3d_flag,`3D', `, LDIM3') INTEGER COUNT, PIXEL, NEXT(1), IINT, IBITS INTEGER BCOUNT INTEGER(1) BBYTE INTEGER ERRORCODE, KBITS, KSIGN, PIXELCOUNT INTEGER(4) VORZEICHEN, UNSIGN, ELEMENT, LIMIT INTEGER(4) LAST_ELEMENT INTEGER(4) DISCARD(2), OFFSET(3) ! *** DEBUG *** INTEGER(4) PREV_ELEMENT, PREV_INDEX fcb_interface_FCB_READ_INTEGER fcb_interface_FCB_READ_BITS fcb_interface_FCB_UPDATE_JPA_POINTERS_$1 fcb_param_CBF_LIST_ALL fcb_errcode_LIST_ALL ! Version 1 bit lengths INTEGER(4),PARAMETER:: & CBF_PACKED_BITS1 = 4, & CBF_PACKED_BITS2 = 5, & CBF_PACKED_BITS3 = 6, & CBF_PACKED_BITS4 = 7, & CBF_PACKED_BITS5 = 8, & CBF_PACKED_BITS6 = 16 ! Version 2 bit lengths INTEGER(4),PARAMETER:: & CBF_PACKED_V2_BITS1 = 3, & CBF_PACKED_V2_BITS2 = 4, & CBF_PACKED_V2_BITS3 = 5, & CBF_PACKED_V2_BITS4 = 6, & CBF_PACKED_V2_BITS5 = 7, & CBF_PACKED_V2_BITS6 = 8, & CBF_PACKED_V2_BITS7 = 9, & CBF_PACKED_V2_BITS8 = 10, & CBF_PACKED_V2_BITS9 = 11, & CBF_PACKED_V2_BITS10 = 12, & CBF_PACKED_V2_BITS11 = 13, & CBF_PACKED_V2_BITS12 = 14, & CBF_PACKED_V2_BITS13 = 15, & CBF_PACKED_V2_BITS14 = 16 INTEGER(4) CBF_PACKED_BITS(8), CBF_PACKEDV2_BITS(16) DATA CBF_PACKED_BITS/ 0, CBF_PACKED_BITS1, & CBF_PACKED_BITS2, CBF_PACKED_BITS3, CBF_PACKED_BITS4, & CBF_PACKED_BITS5, CBF_PACKED_BITS6, 65 / DATA CBF_PACKEDV2_BITS/ 0, CBF_PACKED_V2_BITS1, & CBF_PACKED_V2_BITS2, CBF_PACKED_V2_BITS3, & CBF_PACKED_V2_BITS4, CBF_PACKED_V2_BITS5, & CBF_PACKED_V2_BITS6, CBF_PACKED_V2_BITS7, & CBF_PACKED_V2_BITS8, CBF_PACKED_V2_BITS9, & CBF_PACKED_V2_BITS10, CBF_PACKED_V2_BITS11, & CBF_PACKED_V2_BITS12, CBF_PACKED_V2_BITS13, & CBF_PACKED_V2_BITS14, 65 / BCOUNT = 0 BBYTE = 0 ! Discard the file_nelem entry (64 bits) */ FCB_DECOMPRESS_PACKED_$1 = & FCB_READ_INTEGER(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BCOUNT,BBYTE, & 0,64,DISCARD,2) IF (FCB_DECOMPRESS_PACKED_$1 .NE. 0) RETURN ! Discard the minimum element entry (64 bits) */ FCB_DECOMPRESS_PACKED_$1 = & FCB_READ_INTEGER(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BCOUNT,BBYTE, & 0,64,DISCARD,2) IF (FCB_DECOMPRESS_PACKED_$1 .NE. 0) RETURN ! Discard the maximum element entry (64 bits) */ FCB_DECOMPRESS_PACKED_$1 = & FCB_READ_INTEGER(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BCOUNT,BBYTE, & 0,64,DISCARD,2) IF (FCB_DECOMPRESS_PACKED_$1 .NE. 0) RETURN ! Discard the reserved entry (64 bits) */ FCB_DECOMPRESS_PACKED_$1 = & FCB_READ_INTEGER(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BCOUNT,BBYTE, & 0,64,DISCARD,2) IF (FCB_DECOMPRESS_PACKED_$1 .NE. 0) RETURN V2FLAG = 0 IF (IAND(COMPRESSION,CBF_COMPRESSION_MASK).EQ.CBF_PACKED_V2) & V2FLAG = 1 AVGFLAG = 1 IF (DIM1 .EQ. 0 .AND. DIM2 .EQ. 0 `'m4_ifelse(fcb_3d_flag,`3D',`.AND. DIM3 .EQ. 0')) AVGFLAG = 0 BITS = m4_ifelse($1,`I2',16,$1,`3D_I2',16,32) CLIPBITS = 0 IF (AVGFLAG .NE. 0) CLIPBITS=BITS DO I =1,m4_ifelse(fcb_3d_flag,`3D',8,4) TRAIL_INDEX_ARRAY(I) = 0 END DO VORZEICHEN = m4_ifelse($1,`I2',Z''`00008000''`,$1,`3D_I2',Z''`00008000''`,Z''`80000000''`) UNSIGN = 0 IF (ELSIGN.NE.0) UNSIGN=VORZEICHEN LIMIT = m4_ifelse($1,`I2',Z''`0000FFFF''`,$1,`3D_I2',Z''`0000FFFF''`,Z''`FFFFFFFF''`) ! Initialise the first element LAST_ELEMENT = UNSIGN ! *** DEBUG *** PREV_ELEMENT = 0 ! *** DEBUG *** PREV_INDEX = 0 m4_ifelse(fcb_3d_flag,`3D',` LDIM3 = DIM3 IF (DIM3.EQ.0) LDIM3 = 1') LDIM2 = DIM2 IF (DIM2.EQ.0) LDIM2 = 1 LDIM1 = DIM1 m4_ifelse(fcb_3d_flag,`3D',` IF (DIM1.EQ.0) LDIM1 = NELEM/(LDIM2*LDIM3) IF (LDIM1*LDIM2*LDIM3.NE.NELEM) THEN ', ` IF (DIM1.EQ.0) LDIM1 = NELEM/LDIM2 IF (LDIM1*LDIM2.NE.NELEM) THEN') FCB_DECOMPRESS_PACKED_$1 = CBF_ARGUMENT RETURN END IF ! Read the elements COUNT = 0 PIXEL = 0 NDIM1 = 1 NDIM2 = 1 m4_ifelse(fcb_3d_flag,`3D',` NDIM3 = 1') DO IF (COUNT .GE. NELEM) EXIT ! GET THE NEXT 6 BITS OF DATA FCB_DECOMPRESS_PACKED_$1 = & FCB_READ_INTEGER(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BCOUNT,BBYTE, & 0,6+V2FLAG,NEXT,1) IF (FCB_DECOMPRESS_PACKED_$1 .NE. 0) THEN NELEM_READ=COUNT+PIXEL RETURN END IF PIXELCOUNT = ISHFT(1,IAND(NEXT(1),7)) IF (V2FLAG.NE.0) THEN BITS = CBF_PACKEDV2_BITS(1+IAND(ISHFT(NEXT(1),-3),15) ) ELSE BITS = CBF_PACKED_BITS(1+IAND(ISHFT(NEXT(1),-3),7) ) END IF IF (AVGFLAG.NE.0 .AND. BITS.EQ. 65) BITS = CLIPBITS ! READ THE OFFSETS IF ( PIXELCOUNT + COUNT .GT. NELEM ) & PIXELCOUNT = NELEM - COUNT DO PIXEL = 0, PIXELCOUNT-1 ELEMENT = LAST_ELEMENT OFFSET(1) = 0 OFFSET(2) = 0 OFFSET(3) = 0 ERRORCODE = 0 IF (BITS .NE. 0) THEN IF (BITS .GT. 32 ) THEN IINT = 1 DO IBITS=0,BITS-1,32 KSIGN = 1 IF (IBITS .LT. BITS-32) KSIGN = 0 KBITS = BITS-32*(IINT-1) IF (IBITS .LT. BITS-32) KBITS = 32 ERRORCODE=IOR(ERRORCODE, & FCB_READ_INTEGER(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BCOUNT,BBYTE, & KSIGN,KBITS,OFFSET(IINT:IINT),1) ) IINT = IINT+1 END DO ELSE ERRORCODE = FCB_READ_BITS(TAPIN,FCB_BYTES_IN_REC,BUFFER, & REC_IN_FILE,BYTE_IN_FILE,BCOUNT,BBYTE, & BITS,OFFSET(1:1),1) END IF END IF IF (ERRORCODE.NE.0) THEN NELEM_READ = COUNT+PIXEL FCB_DECOMPRESS_PACKED_$1 = ERRORCODE RETURN END IF ELEMENT = ELEMENT+OFFSET(1) ELEMENT = IAND(ELEMENT,LIMIT) ELEMENT = ELEMENT-UNSIGN TRAIL_INDEX_ARRAY(1) = NDIM1+(NDIM2-1)*LDIM1`'m4_ifelse(fcb_3d_flag,`3D',` & +(NDIM3-1)*LDIM1*LDIM2') ARRAY(NDIM1,NDIM2`'m4_ifelse(fcb_3d_flag,`3D',`,NDIM3')) = ELEMENT ! *** DEBUG *** IF (PREV_ELEMENT.NE.ELEMENT.OR.PREV_INDEX.NE.TRAIL_INDEX_ARRAY(1)-1) THEN ! *** DEBUG *** PREV_ELEMENT = ELEMENT ! *** DEBUG *** PRINT *, "ARRAY(",TRAIL_INDEX_ARRAY(1),") = ", ELEMENT ! *** DEBUG *** END IF ! *** DEBUG *** PREV_INDEX= TRAIL_INDEX_ARRAY(1) IF (AVGFLAG.NE.0) THEN FCB_DECOMPRESS_PACKED_$1 = & FCB_UPDATE_JPA_POINTERS_$1(TRAIL_INDEX_ARRAY,& NDIM1, NDIM2, m4_ifelse(fcb_3d_flag,`3D', `NDIM3,')ARRAY, LDIM1, LDIM2, m4_ifelse(fcb_3d_flag,`3D', `LDIM3,')LAST_ELEMENT, COMPRESSION) LAST_ELEMENT = LAST_ELEMENT + UNSIGN LAST_ELEMENT = IAND(LAST_ELEMENT,LIMIT) ELSE LAST_ELEMENT = ELEMENT+UNSIGN NDIM1 = NDIM1+1 IF (NDIM1 .GT. LDIM1) THEN NDIM1 = 1 NDIM2 = NDIM2+1 m4_ifelse(fcb_3d_flag,`3D', ` IF(NDIM2 .GT. LDIM2) THEN NDIM2 = 1 NDIM3 = NDIM3+1 END IF') END IF ENDIF END DO COUNT = COUNT+PIXELCOUNT END DO NELEM_READ = COUNT FCB_DECOMPRESS_PACKED_$1 = 0 RETURN END FUNCTION FCB_DECOMPRESS_PACKED_$1') fcb_macro_FCB_PACKED(`I2') fcb_macro_FCB_PACKED(`I4') fcb_macro_FCB_PACKED(`3D_I2') fcb_macro_FCB_PACKED(`3D_I4') ./CBFlib-0.9.2.2/bin/ 0000755 0000765 0000765 00000000000 11603703065 012353 5 ustar yaya yaya ./CBFlib-0.9.2.2/bin/.keepme 0000644 0000765 0000765 00000000000 11603702115 013603 0 ustar yaya yaya ./CBFlib-0.9.2.2/doc/ 0000755 0000765 0000765 00000000000 11603751102 012343 5 ustar yaya yaya ./CBFlib-0.9.2.2/doc/Iarray_intensities.gain.html 0000644 0000765 0000765 00000005403 11603702115 020015 0 ustar yaya yaya
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Definition:
Detector 'gain'. The factor by which linearized intensity count values should be divided to produce true photon counts.
Type: float
Mandatory item: yes
Related item: _array_intensities.gain_esd (associated_value)
Category: array_intensities
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Definition:
The value of this data item is the identifier of one of the axes in the set of axes for which settings are being specified. Multiple axes may be specified for the same value of _array_structure_list_axis.axis_set_id. This item is a pointer to _axis.id in the AXIS category.
Type: code
Mandatory item: yes
Category: array_structure_list_axis
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Description:
Data items in the ARRAY_DATA category are the containers for the array data items described in the category ARRAY_STRUCTURE. It is recognized that the data in this category needs to be used in two distinct ways. During a data collection the lack of ancillary data and timing constraints in processing data may dictate the need to make a 'miniCBF' nothing more than an essential minimum of information to record the results of the data collection. In that case it is proper to use the ARRAY_DATA category as a container for just a single image and a compacted, beam-line dependent list of data collection parameter values. In such a case, only the tags '_array_data.header_convention', '_array_data.header_contents' and '_array_data.data' need be populated. For full processing and archiving, most of the tags in this dictionary will need to be populated.Examples:
Example 1 -
This example shows two binary data blocks. The first one
was compressed by the CBF_CANONICAL compression algorithm and is
presented as hexadecimal data. The first character 'H' on the
data lines means hexadecimal. It could have been 'O' for octal
or 'D' for decimal. The second character on the line shows
the number of bytes in each word (in this case '4'), which then
requires eight hexadecimal digits per word. The third character
gives the order of octets within a word, in this case '<'
for the ordering 4321 (i.e. 'big-endian'). Alternatively, the
character '>' could have been used for the ordering 1234
(i.e. 'little-endian'). The block has a 'message digest'
to check the integrity of the data.
The second block is similar, but uses CBF_PACKED compression
and BASE64 encoding. Note that the size and the digest are
different.
loop_ _array_data.array_id _array_data.binary_id _array_data.data image_1 1 ; --CIF-BINARY-FORMAT-SECTION-- Content-Type: application/octet-stream; conversions="X-CBF_CANONICAL" Content-Transfer-Encoding: X-BASE16 X-Binary-Size: 3927126 X-Binary-ID: 1 Content-MD5: u2sTJEovAHkmkDjPi+gWsg== # Hexadecimal encoding, byte 0, byte order ...21 # H4< 0050B810 00000000 00000000 00000000 000F423F 00000000 00000000 ... .... --CIF-BINARY-FORMAT-SECTION---- ; image_2 2 ; --CIF-BINARY-FORMAT-SECTION-- Content-Type: application/octet-stream; conversions="X-CBF-PACKED" Content-Transfer-Encoding: BASE64 X-Binary-Size: 3745758 X-Binary-ID: 2 Content-MD5: 1zsJjWPfol2GYl2V+QSXrw== ELhQAAAAAAAA... ... --CIF-BINARY-FORMAT-SECTION---- ; |
Example 2 -
This example shows a single image in a miniCBF, provided by
E. Eikenberry. The entire CBF consists of one data block
containing one category and three tags. The CBFlib
program convert_miniCBF and a suitable template file
can be used to convert this miniCBF to a full imgCIF
file.
###CBF: VERSION 1.5 # CBF file written by CBFlib v0.7.8 data_insulin_pilatus6m _array_data.header_convention SLS_1.0 _array_data.header_contents ; # Detector: PILATUS 6M SN: 60-0001 # 2007/Jun/17 15:12:36.928 # Pixel_size 172e-6 m x 172e-6 m # Silicon sensor, thickness 0.000320 m # Exposure_time 0.995000 s # Exposure_period 1.000000 s # Tau = 194.0e-09 s # Count_cutoff 1048575 counts # Threshold_setting 5000 eV # Wavelength 1.2398 A # Energy_range (0, 0) eV # Detector_distance 0.15500 m # Detector_Voffset -0.01003 m # Beam_xy (1231.00, 1277.00) pixels # Flux 22487563295 ph/s # Filter_transmission 0.0008 # Start_angle 13.0000 deg. # Angle_increment 1.0000 deg. # Detector_2theta 0.0000 deg. # Polarization 0.990 # Alpha 0.0000 deg. # Kappa 0.0000 deg. # Phi 0.0000 deg. # Chi 0.0000 deg. # Oscillation_axis X, CW # N_oscillations 1 ; _array_data.data ; --CIF-BINARY-FORMAT-SECTION-- Content-Type: application/octet-stream; conversions="x-CBF_BYTE_OFFSET" Content-Transfer-Encoding: BINARY X-Binary-Size: 6247567 X-Binary-ID: 1 X-Binary-Element-Type: "signed 32-bit integer" X-Binary-Element-Byte-Order: LITTLE_ENDIAN Content-MD5: 8wO6i2+899lf5iO8QPdgrw== X-Binary-Number-of-Elements: 6224001 X-Binary-Size-Fastest-Dimension: 2463 X-Binary-Size-Second-Dimension: 2527 X-Binary-Size-Padding: 4095 ... --CIF-BINARY-FORMAT-SECTION---- ; |
Mandatory category: no
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Definition:
The value of _diffrn_data_frame.details should give a description of special aspects of each frame of data. DEPRECATED -- DO NOT USE
Type: text
Mandatory item: no
Category: diffrn_frame_data
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Definition:
The value of _diffrn_measurement.number_of_axes gives the number of axes of the positioner for the goniometer or other sample orientation or positioning device identified by _diffrn_measurement.id. The description of the axes should be provided by entries in DIFFRN_MEASUREMENT_AXIS.
Type: int
Mandatory item: no
Category: diffrn_measurement
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Definition:
Polarization ratio of the diffraction beam incident on the crystal. This is the ratio of the perpendicularly polarized to the parallel polarized component of the radiation. The perpendicular component forms an angle of _diffrn_radiation.polarisn_norm to the normal to the diffraction plane of the sample (i.e. the plane containing the incident and reflected beams).
Type: float
Mandatory item: no
Alias:Category: diffrn_radiation
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Description:
Data items in the DIFFRN_MEASUREMENT_AXIS category associate axes with goniometers.Category groups:
Mandatory category: no
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Description:
Data items in the ARRAY_ELEMENT_SIZE category record the physical size of array elements along each array dimension.Example:
Example 1 - A regular 2D array with a uniform element dimension
of 1220 nanometres.
loop_ _array_element_size.array_id _array_element_size.index _array_element_size.size image_1 1 1.22e-6 image_1 2 1.22e-6 |
Mandatory category: no
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Definition:
The setting of the specified axis in millimetres against which measurements of the reference beam center and reference detector distance should be made. In general, this will agree with _diffrn_scan_frame_axis.reference_displacement. If the individual frame values vary, then the value of _diffrn_scan_axis.reference_displacement will be representative of the ensemble of values of _diffrn_scan_frame_axis.reference_displacement (e.g. the mean). If not specified, the value defaults to to the value of _diffrn_scan_axis.displacement.
Type: float
Mandatory item: implicit
Category: diffrn_scan_axis
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Definition:
The value of _map_segment.id must uniquely identify each segment of a map.
Type: code
Mandatory item: yes
Category: map_segment
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Description:
Data items in the DIFFRN_MEASUREMENT category record details about the device used to orient and/or position the crystal during data measurement and the manner in which the diffraction data were measured.Examples:
Example 1 - based on PDB entry 5HVP and laboratory records for the
structure corresponding to PDB entry 5HVP
_diffrn_measurement.diffrn_id 'd1' _diffrn_measurement.device '3-circle camera' _diffrn_measurement.device_type 'Supper model X' _diffrn_measurement.device_details 'none' _diffrn_measurement.method 'omega scan' _diffrn_measurement.details ; 440 frames, 0.20 degrees, 150 sec, detector distance 12 cm, detector angle 22.5 degrees ; |
Example 2 - based on data set TOZ of Willis, Beckwith & Tozer
[Acta Cryst. (1991), C47, 2276-2277].
_diffrn_measurement.diffrn_id 's1' _diffrn_measurement.device_type 'Philips PW1100/20 diffractometer' _diffrn_measurement.method 'theta/2theta (\q/2\q)' |
Mandatory category: no
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Definition:
This item is an text field for use in minimal CBF files to carry essential header information to be kept with image data in _array_data.data when the tags that normally carry the structured metadata for the image have not been populated. Normally this data item should not appear when the full set of tags have been populated and _diffrn_data_frame.details appears.
Type: text
Mandatory item: no
Category: array_data
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Definition:
This item is an identifier for the convention followed in constructing the contents of _array_data.header_contents The permitted values are of the of an image creator identifier followed by an underscore and a version string. To avoid confusion about conventions, all creator identifiers should be registered with the IUCr and the conventions for all identifiers and versions should be posted on the MEDSBIO.org web site.
Type: code
Mandatory item: no
Category: array_data
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Definition:
The value of _diffrn_detector_element.reference_center_slow is the slow index axis beam center position relative to the detector element face in the units specified in the data item '_diffrn_detector_element.reference_center_units' along the slow axis of the detector from the center of the first pixel to the point at which the Z-axis (which should be colinear with the beam) intersects the face of the detector, if in fact is does. At the time of the measurement all settings of the detector positioner should be at their reference settings. If more than one reference setting has been used the value givien whould be representive of the beam center as determined from the ensemble of settings. It is important to note that the sense of the axis is used, rather than the sign of the pixel-to-pixel increments.
Type: float
Mandatory item: no
Category: diffrn_detector_element
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Definition:
This item is a pointer to _entry.id in the ENTRY category.
Type: code
Mandatory item: implicit
Category: map
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Definition:
The starting position for the specified axis in degrees.
Type: float
Mandatory item: no
Category: diffrn_scan_axis
Copyright © 2005 International Union of Crystallography
DRAFT DICTIONARY CBF/imgCIF Extensions Dictionary |
Draft version 1.5 for comment |
Definition:
The starting position for the specified axis in millimetres.
Type: float
Mandatory item: no
Category: diffrn_scan_axis
Copyright © 2005 International Union of Crystallography