Adxv: Difference between revisions
Jump to navigation
Jump to search
(New page: == Visualizing XDS data reduction == The latest beta versions of ADXV (from http://www.scripps.edu/~arvai/adxv/) can read spot files (whose name ends with .adx) and display them together ...) |
No edit summary |
||
Line 24: | Line 24: | ||
frmnam=adjustl(string(30:)) | frmnam=adjustl(string(30:)) | ||
i1=index(frmnam,'!') | i1=index(frmnam,'!') | ||
if (i1>0) frmnam=frmnam(:i1-1) | |||
frmnam=frmnam(:index(frmnam,'.',back))//'adx' ! exchange extension | if (index(frmnam,'.',back)>index(frmnam,'?',back)) then | ||
frmnam=frmnam(:index(frmnam,'.',back))//'adx' ! exchange extension | |||
else | |||
frmnam=frmnam(:len_trim(frmnam))//'.adx' ! add extension | |||
endif | |||
endif | endif | ||
end do | end do | ||
Line 60: | Line 64: | ||
print*,'working',num | print*,'working',num | ||
num=num*2 | num=num*2 | ||
endif | |||
if (iframe/=j) then ! new frame | if (iframe/=j) then ! new frame | ||
write(frmnam(i1:i2),form) iframe | write(frmnam(i1:i2),form) iframe |
Revision as of 14:04, 16 June 2009
Visualizing XDS data reduction
The latest beta versions of ADXV (from http://www.scripps.edu/~arvai/adxv/) can read spot files (whose name ends with .adx) and display them together with the frames.
This is Fortran code for generating these files in the same directory where the frames are (i.e. you need write permission in that directory!):
! generate .adx files from existing XDS.INP and XDS_ASCII.HKL implicit none integer :: hkl(3),iframe,j=-10000,mini=huge(mini),maxi=-huge(maxi),& nref=0,i,i1,i2,num real intensity,sigi,x,y,z character :: string*80,frmnam*80,form*6='(i0.0)' logical :: back=.true. 100 format(5i5) 101 format(a) ! find out NAME_TEMPLATE_OF_DATA_FRAMES open(1,file='XDS.INP') do read(1,101,end=98) string string=adjustl(string) if (string(:29)=='NAME_TEMPLATE_OF_DATA_FRAMES=') then frmnam=adjustl(string(30:)) i1=index(frmnam,'!') if (i1>0) frmnam=frmnam(:i1-1) if (index(frmnam,'.',back)>index(frmnam,'?',back)) then frmnam=frmnam(:index(frmnam,'.',back))//'adx' ! exchange extension else frmnam=frmnam(:len_trim(frmnam))//'.adx' ! add extension endif endif end do 98 close(1) print*,'.adx names :',frmnam(:len_trim(frmnam)) ! prepare modification of framename i1=index(frmnam,'?') i2=0 do i=i1,80 if (frmnam(i:i)=='?') then i2=i else exit endif end do if (i2==0) stop 'template should contain a ?' write(form(3:3),'(i1)') i2-i1+1 form(5:5)=form(3:3) ! sort XDS_ASCII.HKL by frame number print*,'sorting XDS_ASCII.HKL ...' call system('grep -v \! XDS_ASCII.HKL | sort -k 8n > temp_adx.sort') open(1,file='temp_adx.sort') print*,'sorting XDS_ASCII.HKL done' num=10000 do read(1,*,end=99)hkl,intensity,sigi,x,y,z iframe=int(z)+1 mini=min(iframe,mini) maxi=max(iframe,maxi) nref=nref+1 if (mod(nref,num)==0) then print*,'working',num num=num*2 endif if (iframe/=j) then ! new frame write(frmnam(i1:i2),form) iframe if (j/=-10000) close(2) open(2,file=frmnam) j=iframe endif ! XDS starts counting at 1, whereas ADXV starts at 0: write(string,100) nint(x)-1,nint(y)-1,hkl call removeblanks(string) write(2,101)string(:len_trim(string)) end do 99 print*,'first frame, last frame, nref=',mini,maxi,nref close(1,status='delete') close(2) end ! subroutine removeblanks(string) ! Removes leading and trailing blanks, and turns multiple blanks into one blank. implicit none character string*(*),copy*80 integer i,j logical first j=0 first=.false. do i=1,len_trim(string) if (string(i:i) /= ' ') then j=j+1 copy(j:j)=string(i:i) first=.true. elseif (first) then j=j+1 copy(j:j)=string(i:i) first=.false. endif end do string=copy(1:j) end