Changeset 3144
- Timestamp:
- Oct 30, 2017 3:39:15 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/fsource/pack_f.for
r3136 r3144 15 15 INTEGER*4 SPILL,ROW,COL,PIXNUM,MM1 16 16 INTEGER*2 TMP 17 LOGICAL*1 CMPR(0:N-1)17 CHARACTER*1 CMPR(0:N-1) 18 18 DATA BITDECODE /0,4,5,6,7,8,16,32/ 19 19 DATA SETBITS /Z'0000',Z'0001',Z'0003',Z'0007', … … 40 40 SPILLBITS = 0 41 41 ELSE 42 SPILL = CMPR(IN) 43 C SPILL = ICHAR(CMPR(IN)) 42 SPILL = ICHAR(CMPR(IN)) 44 43 IN = IN+1 45 44 SPILLBITS = 8 … … 65 64 END IF 66 65 ELSE 67 SPILL = CMPR(IN) 68 C SPILL = ICHAR(CMPR(IN)) 66 SPILL = ICHAR(CMPR(IN)) 69 67 IN = IN+1 70 68 SPILLBITS = 8 … … 119 117 120 118 119 SUBROUTINE PACK_F3(N,CMPR,MX,MY,IMG) 120 121 Cf2py intent(in) N 122 Cf2py intent(in) CMPR 123 Cf2py depend(N) CMPR 124 Cf2py intent(in) MX 125 Cf2py intent(in) MY 126 Cf2py intent(in,out) IMG 127 Cf2py 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 68 68 END 69 69 70 70 SUBROUTINE UNPACK_CBF3(N,CMPR,MXY,IMG) 71 72 Cf2py intent(in) N 73 Cf2py intent(in) CMPR 74 Cf2py depend(N) CMPR 75 Cf2py intent(in) MXY 76 Cf2py intent(in,out) IMG 77 Cf2py 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 133 c 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 17 17 import GSASIIobj as G2obj 18 18 import GSASIIpath 19 import struct as st 20 import numpy as np 19 21 import unpack_cbf as cbf 20 22 GSASIIpath.SetVersionNumber("$Revision: 2133 $") … … 48 50 'Read cif binarydetector data cbf file' 49 51 50 import numpy as np51 52 if GSASIIpath.GetConfigValue('debug'): 52 53 print ('Read cif binary detector data cbf file: '+filename) … … 95 96 img = File.read()[imageBeg:imageBeg+compImageSize] 96 97 nimg = len(img) 97 if 'bytes' in str(type(img)):98 img = np.array(img,dtype='a')99 98 image = np.zeros(nxy,dtype=np.int32) 100 99 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) 103 105 image = np.reshape(image,(sizexy[1],sizexy[0])) 104 106 print ('import time: %.3f'%(time.time()-time0)) -
trunk/imports/G2img_MAR.py
r3136 r3144 89 89 pos += 37 90 90 File.seek(pos) 91 image = np.zeros(shape=(sizex,sizey),dtype=np.int32) 91 92 if '2' in platform.python_version_tuple()[0]: 92 93 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 93 95 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 98 98 File.close() 99 99 if imageOnly:
Note: See TracChangeset
for help on using the changeset viewer.