Changeset 3144


Ignore:
Timestamp:
Oct 30, 2017 3:39:15 PM (4 years ago)
Author:
vondreele
Message:

fix MAR345 & CBF importers to work for python 3.6 as well as python 2.7; revised importers & new fortran decompression routines for py3.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/fsource/pack_f.for

    r3136 r3144  
    1515      INTEGER*4 SPILL,ROW,COL,PIXNUM,MM1
    1616      INTEGER*2 TMP
    17       LOGICAL*1 CMPR(0:N-1)
     17      CHARACTER*1 CMPR(0:N-1)
    1818      DATA BITDECODE /0,4,5,6,7,8,16,32/
    1919      DATA SETBITS /Z'0000',Z'0001',Z'0003',Z'0007',
     
    4040            SPILLBITS = 0
    4141          ELSE
    42             SPILL = CMPR(IN)
    43 C            SPILL = ICHAR(CMPR(IN))
     42            SPILL = ICHAR(CMPR(IN))
    4443            IN = IN+1
    4544            SPILLBITS = 8
     
    6564                END IF
    6665              ELSE
    67                 SPILL = CMPR(IN)
    68 C                SPILL = ICHAR(CMPR(IN))
     66                SPILL = ICHAR(CMPR(IN))
    6967                IN = IN+1
    7068                SPILLBITS = 8
     
    119117
    120118     
     119      SUBROUTINE PACK_F3(N,CMPR,MX,MY,IMG)
     120
     121Cf2py intent(in) N
     122Cf2py intent(in) CMPR
     123Cf2py depend(N) CMPR
     124Cf2py intent(in) MX
     125Cf2py intent(in) MY
     126Cf2py intent(in,out) IMG
     127Cf2py depend(MX,MY) IMG
     128
     129      IMPLICIT NONE
     130      INTEGER*4 BITDECODE(0:7),SETBITS(0:16),IN,N,MX,MY,BITNUM
     131      INTEGER*4 PIXEL,SPILLBITS,USEDBITS,VALIDS,WINDOW,TOTAL
     132      INTEGER*4 IMG(0:MX-1,0:MY-1),NEXTINT
     133      INTEGER*4 SPILL,ROW,COL,PIXNUM,MM1
     134      INTEGER*2 TMP
     135      INTEGER*1 CMPR(0:N-1)
     136      DATA BITDECODE /0,4,5,6,7,8,16,32/
     137      DATA SETBITS /Z'0000',Z'0001',Z'0003',Z'0007',
     138     1  Z'000F',Z'001F',Z'003F',Z'007F',Z'00FF',
     139     1  Z'01FF',Z'03FF',Z'07FF',Z'0FFF',Z'1FFF',
     140     1  Z'3FFF',Z'7FFF',Z'FFFF'/
     141
     142      PIXEL = 0
     143      SPILLBITS = 0
     144      SPILL = 0
     145      USEDBITS = 0
     146      VALIDS = 0
     147      WINDOW = 0
     148      ROW = 0
     149      COL = 0
     150      TOTAL = MX*MY
     151      MM1 = MX-1
     152      IN = 0
     153      DO WHILE (PIXEL .LT. TOTAL)
     154        IF (VALIDS .LT. 6) THEN
     155          IF (SPILLBITS .GT. 0) THEN
     156            WINDOW = IOR(WINDOW,ISHFT(SPILL,VALIDS))
     157            VALIDS = VALIDS + SPILLBITS
     158            SPILLBITS = 0
     159          ELSE
     160            SPILL = ICHAR(CHAR(CMPR(IN)))
     161            IN = IN+1
     162            SPILLBITS = 8
     163          END IF
     164        ELSE
     165          PIXNUM = ISHFT(1,IAND(WINDOW,SETBITS(3)))
     166          WINDOW = ISHFT(WINDOW,-3)
     167          BITNUM = BITDECODE(IAND(WINDOW,SETBITS(3)))
     168          WINDOW = ISHFT(WINDOW,-3)
     169          VALIDS = VALIDS-6
     170          DO WHILE ( (PIXNUM .GT. 0) .AND. (PIXEL .LT. TOTAL) )
     171            IF ( VALIDS .LT. BITNUM ) THEN
     172              IF ( SPILLBITS .GT. 0 ) THEN
     173                WINDOW = IOR(WINDOW,ISHFT(SPILL,VALIDS))
     174                IF ( (32-VALIDS) .GT. SPILLBITS ) THEN
     175                  VALIDS = VALIDS + SPILLBITS
     176                  SPILLBITS = 0
     177                ELSE
     178                  USEDBITS = 32-VALIDS
     179                  SPILL = ISHFT(SPILL,-USEDBITS)
     180                  SPILLBITS = SPILLBITS-USEDBITS
     181                  VALIDS = 32
     182                END IF
     183              ELSE
     184                SPILL = ICHAR(CHAR(CMPR(IN)))
     185                IN = IN+1
     186                SPILLBITS = 8
     187              END IF               
     188            ELSE
     189              PIXNUM = PIXNUM-1
     190              IF ( BITNUM .EQ. 0 ) THEN
     191                NEXTINT = 0
     192              ELSE
     193                NEXTINT = IAND(WINDOW,SETBITS(BITNUM))
     194                VALIDS = VALIDS-BITNUM
     195                WINDOW = ISHFT(WINDOW,-BITNUM)
     196                IF ( BTEST(NEXTINT,BITNUM-1) )
     197     1            NEXTINT = IOR(NEXTINT,NOT(SETBITS(BITNUM)))
     198              END IF
     199
     200              ROW = PIXEL/MX
     201              COL = MOD(PIXEL,MX)
     202              IF ( PIXEL .GT. MX ) THEN
     203                IF ( COL .EQ. 0 ) THEN
     204                  TMP = NEXTINT +
     205     1              (IMG(MM1,ROW-1)+IMG(COL+1,ROW-1)+
     206     1              IMG(COL,ROW-1)+IMG(MM1,ROW-2) +2)/4
     207                ELSE IF ( COL.EQ.MM1 ) THEN
     208                  TMP = NEXTINT +
     209     1              (IMG(COL-1,ROW)+IMG(0,ROW)+
     210     1              IMG(MM1,ROW-1)+IMG(MM1-1,ROW-1) +2)/4
     211                ELSE
     212                  TMP = NEXTINT +
     213     1              (IMG(COL-1,ROW)+IMG(COL+1,ROW-1)+
     214     1              IMG(COL,ROW-1)+IMG(COL-1,ROW-1) +2)/4
     215                END IF
     216              ELSE IF (PIXEL .NE. 0) THEN
     217                TMP = IMG(COL-1,ROW)+NEXTINT
     218              ELSE
     219                TMP = NEXTINT
     220              END IF
     221              IMG(COL,ROW) = TMP
     222              PIXEL = PIXEL+1
     223            END IF
     224          END DO
     225        END IF     
     226      END DO
     227      DO ROW=0,MM1
     228        DO COL=0,MM1
     229            IF ( IMG(COL,ROW).LT.0 ) IMG(COL,ROW) = IMG(COL,ROW)+65536
     230        END DO
     231      END DO
     232     
     233      RETURN
     234      END
     235
  • trunk/fsource/unpack_cbf.for

    r2445 r3144  
    6868      END
    6969
    70      
     70      SUBROUTINE UNPACK_CBF3(N,CMPR,MXY,IMG)
     71
     72Cf2py intent(in) N
     73Cf2py intent(in) CMPR
     74Cf2py depend(N) CMPR
     75Cf2py intent(in) MXY
     76Cf2py intent(in,out) IMG
     77Cf2py depend(MXY) IMG
     78
     79      IMPLICIT NONE
     80      INTEGER*4 N,MXY
     81      INTEGER*1 CMPR(0:N-1)
     82      INTEGER*4 IMG(0:MXY-1),BASEPIXEL
     83      INTEGER*4 I,J,ISIZE
     84      CHARACTER*1 C1,E1
     85      CHARACTER*2 C2,E2
     86      CHARACTER*4 C4,E4
     87      INTEGER*1 IONEBYTE
     88      INTEGER*2 ITWOBYTES
     89      INTEGER*4 IFOURBYTES
     90
     91      E1 = CHAR(128)
     92      E2 = CHAR(0)//CHAR(128)
     93      E4 = CHAR(0)//CHAR(0)//CHAR(0)//CHAR(128)
     94
     95      I = 0
     96      J = 0
     97      BASEPIXEL = 0
     98      DO WHILE ( I.LT.N )
     99        C1 = CHAR(CMPR(I))
     100        ISIZE = 1
     101        IF ( C1.EQ.E1 ) THEN
     102           ISIZE = 2
     103           I = I+1
     104           C2 = CHAR(CMPR(I))//CHAR(CMPR(I+1))
     105           IF ( C2.EQ.E2 ) THEN
     106              ISIZE = 4
     107              I = I+2
     108              C4 = CHAR(CMPR(I))//CHAR(CMPR(I+1))//
     109     1            CHAR(CMPR(I+2))//CHAR(CMPR(I+3))
     110              IF ( C4.EQ.E4 ) THEN
     111                 ISIZE = 8
     112                 I = I+4
     113              END IF
     114           END IF
     115        END IF
     116        IF ( ISIZE .EQ. 1 ) THEN
     117           IONEBYTE = ICHAR(CHAR(CMPR(I)))
     118           I = I+1
     119           BASEPIXEL = BASEPIXEL+IONEBYTE
     120        ELSE IF ( ISIZE .EQ. 2 ) THEN
     121           ITWOBYTES = ICHAR(CHAR(CMPR(I)))
     122           ITWOBYTES = ITWOBYTES+ISHFT(ICHAR(CHAR(CMPR(I+1))),8)
     123           I = I+2
     124           BASEPIXEL = BASEPIXEL+ITWOBYTES
     125        ELSE IF ( ISIZE.EQ.4 ) THEN
     126           IFOURBYTES = ICHAR(CHAR(CMPR(I)))
     127           IFOURBYTES = IFOURBYTES+ISHFT(ICHAR(CHAR(CMPR(I+1))),8)
     128           IFOURBYTES = IFOURBYTES+ISHFT(ICHAR(CHAR(CMPR(I+2))),16)
     129           IFOURBYTES = IFOURBYTES+ISHFT(ICHAR(CHAR(CMPR(I+3))),24)
     130           I = I+4
     131           BASEPIXEL = BASEPIXEL+IFOURBYTES
     132        END IF
     133c        IF ( MOD(J,100000).EQ.0 ) PRINT *,I,J,BASEPIXEL
     134        IMG(J) = BASEPIXEL
     135        J = J+1
     136      END DO
     137      RETURN
     138      END
  • trunk/imports/G2img_CBF.py

    r3141 r3144  
    1717import GSASIIobj as G2obj
    1818import GSASIIpath
     19import struct as st
     20import numpy as np
    1921import unpack_cbf as cbf
    2022GSASIIpath.SetVersionNumber("$Revision: 2133 $")
     
    4850    'Read cif binarydetector data cbf file'
    4951   
    50     import numpy as np
    5152    if GSASIIpath.GetConfigValue('debug'):
    5253        print ('Read cif binary detector data cbf file: '+filename)
     
    9596    img = File.read()[imageBeg:imageBeg+compImageSize]
    9697    nimg = len(img)
    97     if 'bytes' in str(type(img)):
    98         img = np.array(img,dtype='a')
    9998    image = np.zeros(nxy,dtype=np.int32)
    10099    time0 = time.time()
    101 #    GSASIIpath.IPyBreak()
    102     image = cbf.unpack_cbf(nimg,img,nxy,image)
     100    if 'bytes' in str(type(img)):
     101        img = np.frombuffer(img,dtype=np.uint8)
     102        image = cbf.unpack_cbf3(nimg,img,nxy,image)
     103    else:
     104        image = cbf.unpack_cbf(nimg,img,nxy,image)
    103105    image = np.reshape(image,(sizexy[1],sizexy[0]))
    104106    print ('import time: %.3f'%(time.time()-time0))
  • trunk/imports/G2img_MAR.py

    r3136 r3144  
    8989    pos += 37
    9090    File.seek(pos)
     91    image = np.zeros(shape=(sizex,sizey),dtype=np.int32)   
    9192    if '2' in platform.python_version_tuple()[0]:
    9293        raw = File.read()
     94        image = np.flipud(pf.pack_f(len(raw),raw,sizex,sizey,image).T)  #transpose to get it right way around & flip
    9395    else:
    94         raw = File.read()
    95         print (type(raw),sys.getsizeof(raw),raw[:10])
    96     image = np.zeros(shape=(sizex,sizey),dtype=np.int32)   
    97     image = np.flipud(pf.pack_f(len(raw),raw,sizex,sizey,image).T)  #transpose to get it right way around & flip
     96        raw = np.frombuffer(File.read(),dtype=np.uint8)
     97        image = np.flipud(pf.pack_f3(len(raw),raw,sizex,sizey,image).T)  #transpose to get it right way around & flip
    9898    File.close()
    9999    if imageOnly:
Note: See TracChangeset for help on using the changeset viewer.