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, [email protected]
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