Dear Herman, please find attached a patch for sftools that will add support for the following non-standard space group settings:
A2, C21, I21, P2122, P2212, P21221, P22121 Note: the number for I21 follows the upcomming change to syminfo.lib: 3004 -> 5005. diffstat -p0 < CCP4-20091104-src-sftools_-sftools.f-Add-some-non-standard-spgrps-v1.patch src/sftools_/sftools.f | 52 ++++++++++++++++++++++++++++++++----------------- 1 files changed, 35 insertions(+), 17 deletions(-) The patch applies equally well to series-6_1 and trunk. Regards, ClAuS P.S. After applying the patch and compiling sftools, you can use it in BUSTER with this command line option: % refine autoBUSTER_Exe_sftools=/path/to/patched-sftools/sftools ... On Wed, Sep 01, 2010 at 12:29:55PM +0200, herman.schreu...@sanofi-aventis.com wrote: > Dear CCP4, > > In our automated data processing and refinement pipeline, phaser > sometimes comes up with solutions in non-standard settings (e.g. P 21 2 > 21). These solutions subsequently fail in autobuster and it turned out > that this is because autobuster invokes sftools and sftools apparently > is not able to handle non-standard settings. > > I am really puzzled. We upgraded to the latest CCP4 version (6.1.13) and > the symmetry libraries have P 21 2 21 (space group 2018) in them. Other > programs like reindex and coot handle this setting without any problems. > Is sftools still supported by ccp4, or should we ask the buster people > to switch to some other program? > > Thank you for your help, > Herman Schreuder
--- src/sftools_/sftools.f-orig 2008-09-19 09:12:11.000000000 +0100 +++ src/sftools_/sftools.f 2009-11-04 08:50:05.000000000 +0000 @@ -4169,8 +4169,9 @@ implicit none - integer maxop, maxgrp - parameter (maxop=45, maxgrp=73) + integer maxop, maxgrp, maxops, maxcen + parameter (maxops=45, maxcen=5) + parameter (maxop=maxops+maxcen, maxgrp=80) c subroutine arguments integer spnum,klass,nsym,nprim @@ -4267,7 +4268,15 @@ data syminf( 70) /' 214 I4132 40 8 25 0 0'/ data syminf( 71) /' 1146 R3R 25 0 0 0 0'/ data syminf( 72) /' 1155 R32R 25 26 0 0 0'/ - data syminf( 73) /' 4005 I2 1 0 0 0 0'/ + data syminf( 73) /' 2005 A2 1 0 0 0 0'/ + data syminf( 74) /' 3005 C21 41 0 0 0 0'/ + data syminf( 75) /' 4005 I2 1 0 0 0 0'/ + data syminf( 76) /' 5005 I21 42 0 0 0 0'/ + data syminf( 77) /' 1017 P2122 1 43 0 0 0'/ + data syminf( 78) /' 2017 P2212 2 44 0 0 0'/ + data syminf( 79) /' 2018 P21221 1 7 0 0 0'/ + data syminf( 80) /' 3018 P22121 8 45 0 0 0'/ +c 5005 (I21) used to be 3004 in syminfo.lib! c the matrices for each generator data (g(n, 1),n=1,12) /-1, 0, 0, 0, 0, 1, 0, 0, 0, 0,-1, 0/ @@ -4310,12 +4319,17 @@ data (g(n, 38),n=1,12) / 0,-1, 0,18, 1, 0, 0,18, 0, 0, 1, 6/ data (g(n, 39),n=1,12) / 0,-1, 0,18, 1, 0, 0, 6, 0, 0, 1,18/ data (g(n, 40),n=1,12) / 0,-1, 0, 6, 1, 0, 0,18, 0, 0, 1, 6/ + data (g(n, 41),n=1,12) /-1, 0, 0,12, 0, 1, 0, 0, 0, 0,-1, 0/ + data (g(n, 42),n=1,12) /-1, 0, 0,12, 0, 1, 0, 0, 0, 0,-1,12/ + data (g(n, 43),n=1,12) / 1, 0, 0,12, 0,-1, 0, 0, 0, 0,-1, 0/ + data (g(n, 44),n=1,12) / 1, 0, 0, 0, 0,-1, 0,12, 0, 0,-1, 0/ + data (g(n, 45),n=1,12) / 1, 0, 0, 0, 0,-1, 0, 0, 0, 0,-1, 0/ c centering operators - data (g(n, 41),n=1,12) / 1, 0, 0, 0, 0, 1, 0,12, 0, 0, 1,12/ - data (g(n, 42),n=1,12) / 1, 0, 0,12, 0, 1, 0, 0, 0, 0, 1,12/ - data (g(n, 43),n=1,12) / 1, 0, 0,12, 0, 1, 0,12, 0, 0, 1, 0/ - data (g(n, 44),n=1,12) / 1, 0, 0,12, 0, 1, 0,12, 0, 0, 1,12/ - data (g(n, 45),n=1,12) / 1, 0, 0,16, 0, 1, 0, 8, 0, 0, 1, 8/ + data (g(n, maxops+1),n=1,12) / 1, 0, 0, 0, 0, 1, 0,12, 0, 0, 1,12/ + data (g(n, maxops+2),n=1,12) / 1, 0, 0,12, 0, 1, 0, 0, 0, 0, 1,12/ + data (g(n, maxops+3),n=1,12) / 1, 0, 0,12, 0, 1, 0,12, 0, 0, 1, 0/ + data (g(n, maxops+4),n=1,12) / 1, 0, 0,12, 0, 1, 0,12, 0, 0, 1,12/ + data (g(n, maxops+5),n=1,12) / 1, 0, 0,16, 0, 1, 0, 8, 0, 0, 1, 8/ c point group names according to CCP4 data pgnams / 'PG1' ,'PG2' ,'PG222', 'PG4' ,'PG422', 'PG3', @@ -4407,7 +4421,9 @@ c monoclinic and rhombohedral use the cell parameters to distinguish settings if(spnum2.eq.1)then klass2 = 1 - else if((spnum2.ge.3 .and. spnum2.le.5) .or. spnum2.eq.4005)then + else if( (spnum2.ge.3 .and. spnum2.le.5) .or. + $ (spnum2.eq.2005 .or. spnum2.eq.3005 .or. + $ spnum2.eq.4005 .or. spnum2.eq.5005) ) then if(cell(4).ne.90.0)then write(*,*)' !!! Illegal, monoclinic A unique is not valid !!!' return @@ -4424,7 +4440,9 @@ write(*,*)' to work with C-unique (e.g. -3, -4 or -5)' endif klass2 = 2 - else if(16.le.spnum2 .and. spnum2.le.24)then + else if( (16.le.spnum2 .and. spnum2.le.24) .or. + $ (spnum2.eq.1017 .or. spnum2.eq.2017 .or. + $ spnum2.eq.2018 .or. spnum2.eq.3018) ) then klass2=3 else if(75.le.spnum2 .and. spnum2.le.80)then klass2=4 @@ -4527,19 +4545,19 @@ centr2 = spgnam2(1:1) nprim2 = 2 if(centr2.eq.'A')then - ops(nop)=41 + ops(nop)=maxops+1 else if(centr2.eq.'B')then - ops(nop)=42 + ops(nop)=maxops+2 else if(centr2.eq.'C')then - ops(nop)=43 + ops(nop)=maxops+3 else if(centr2.eq.'I')then - ops(nop)=44 + ops(nop)=maxops+4 else if(centr2.eq.'F')then - ops(nop)=41 - ops(nop+1)=42 + ops(nop)=maxops+1 + ops(nop+1)=maxops+2 nprim2=4 else if(centr2.eq.'R'.and.(cell(6).ne.cell(5)))then - ops(nop)=45 + ops(nop)=maxops+5 nprim2=3 else c no centering, explicitly set centr2 to 'P' for R3(2) rhombohedral