[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ccp4bb]: Problem with AMORE in a monoclinic space group



***  For details on how to be removed from this list visit the  ***
***    CCP4 home page http://www.dl.ac.uk/CCP/CCP4/main.html    ***


Amore users,

Below are details of a possible problem (and fix) with AMORE when
searching in a monoclinic space group. This problem is not believed
to be unique to ccp4 version 4.1* but is post 3.5*.

for complete instructions on fixing the problem please see the CCP4
problems page:
http://www.dl.ac.uk/CCP/CCP4/problems.html

Many thanks to those who reported the problem and Eleanor for fixing the
code and supplying the below message.

Alun
________________________________________________________  
Alun Ashton,      awa@ccp4.ac.uk    Tel: +44 1925 603528
CCP4,             ccp4@ccp4.ac.uk   Fax: +44 1925 603825
                  http://www.dl.ac.uk/CCP/CCP4/main.html
Daresbury Laboratory, Daresbury, Warrington, UK, WA4 4AD

---------- Forwarded message ----------
Reply-To: E.Dodson@ysbl.york.ac.uk

 There is a bug in Amore which shows itself only when the search is in a
monoclinic space group where b is shorter than c. The fix is ????
In an attempt to reduce the amount of memory required we set different
limits for Hmax, Kmax and Lmax.

The explanation is this: 
 Since the Cheshire cell for a monoclinic space group is 
0 to 1/2 along a; 
0 to 1/2 along c, and 
undetermined along b, 
Amore reindexes the reflection list as  h' l' k' where k'=0.

 Unfortunately the limits on h' k' l' are pre-calculated and did not
take the possibility of exchanging k' and l' into account.

 A new version of the subroutine SETPAK is attached: 
please substiute etc etc..

C     =============================
      subroutine setpak(ASP,BSP,CSP,NSMP,drmins)
C     =============================
C   This resets the PACO common block
      integer id,neq,km,lm,nh,nk,nl,nm,kprt,iecr,ilec,iout,hmm,nts,hm,
     +        klmax
      real xlam,a,b,c,rbid1,rbid2
c      COMMON /ALLFUN/IVERB,ITABB(5),FMINC(5),FMAXC(5),TFACC(5),NSYM,
c     +       NSYMP,RSYM(4,4,96)
      COMMON /IOPRG/KPRT
C      COMMON /CELL/A,B,C,ALPHA,BETA,GAMMA
C      common/simt/ rbid2(153),ibid1(432),neq,nts
      common/paco/ hm,km,lm,nh,nk,nl,nm
C
      id=((2**30)+(2**30-1))/(2*nsmp+1)
c      id=((2**30)+(2**30-1))/(2*neq+1)
C   Needto allow a packing in TRAFUN of half the data resolution.
C ie - if RESOL is 2A, then indices for TRAFUN could need 1A grid
C  drmins is maximum resolution of data;
       xlamchk = 2.0/(drmins/2.0)
      xlammax=(id/(asp*bsp*csp))**(1./3)
      xlam = xlammax
C  Resmax = d; check if resmax > 1/sqrt(smax)
      if (xlammax.gt.xlamchk) then
        Write(6,'(2a,F10.4)') ' Maximum data resolution ',
     + 'allowing for packing TRANSLATIOn fn could be', 2.0/xlammax
        xlam = xlamchk
      end if
      hmm= int(xlam*asp/2) +1
      kmm= int(xlam*bsp/2) +1
      lmm= int(xlam*csp/2) +1
C   Need a bit of cunning to handle translation limits for monoclinic
spacegroups.
C  Here k and l will be swapped!
C recognise them because nsmp = 2
      if(nsmp.le. 2) then
       klmax = max(kmm,lmm)
       kmm = klmax
       lmm = klmax
      end if
C  Choose a grid divisible by 4
      nhh= 2*hmm+1
      nkk= 2*kmm+1
      nll= 2*lmm+1
      nhh = 4*(1+ int(nhh/4))
      nkk = 4*(1+ int(nkk/4))
      nll = 4*(1+ int(nll/4))
      nmm=2*nsmp+1
      write(6,2010)
     + ' Setpak: max resn in As allowed with 32 bit arithmetic=',
     +   4/xlam,
     +  ' Current "cell" = ', asp,bsp,csp,
     +  ' Symmetry counter set to 2NSMP + 1: =', nmm,
     +  ' Maximum required H K L',hmm,kmm,lmm,
     +  ' Maximum required Grid ',nhh,nkk,nll
      IF( HM.LT.HMM .OR. KM.LT.KMM .OR. LM.LT.LMM .OR.
     +    NH.LT.NHH .OR. NK.LT.NKK .OR.NL.LT.NLL.OR.NM.LT.NMM) then
       write(6,'(a,/,a,7I5,/,a,7i5)')
     +  ' Need to reset H K L NM limits',
     +   ' hm  km  lm  nh  nk  nl  nm ',hm,km,lm,nh,nk,nl,nm,
     +   ' hmm kmm lmm nhh nkk nll nmm',hmm,kmm,lmm,nhh,nkk,nll,nmm
c       call ccperr(1,' Error: Need to reset H K L NM limits')
       end if
       HM = HMM
       KM = KMM
       LM = LMM
       NH = NHH
       NK = NKK
       NL = NLL
       NM = NMM
      return
2010  format(/,a,f10.6,/,a,3F10.3,/,a,I5,/,a,3I5,/,a,3I5)
      end
C


 My apologies to all.
   Eleanor Dodson