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

Extending solomon output masks



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

Byron Delabarre writes:
 >  Space-group .....................................    1

As you can see, the space group is marked as P1 in the mask header. As
a result, mapmask expects a whole unit cell of data.

Actually this is a bug in both programs: Solomon should give the
correct space group in the mask header, and mapmask should allow the
SYMM card to override the map/mask header.

Here is an (untested) patch which should fix mapmask. It also adds a
'mode' keyword, which contains the names of the input assignments
(like sfall).

MODE [logical name 1] [logical name 2]
 -overrides the default mapmask bahaviour of looking for any
 assignment or file with a likely name. The two names given on the
 mode line may be file names or names of logical assingments on the
 command line.

Kevin

----------------------------------------------------------------------

*** /y/programs/xtal/ccp4/src/mapmask_/mapmask.f	Tue Apr 28 21:19:07 1998
--- mapmask.f	Thu Jun 11 11:47:26 1998
***************
*** 108,117 ****
        character xyz*4,axisf*20,axism*20,axiss*20,axisp*20
        logical cont,lxyzasu,lsclsig,lsclmea,lsclrat,
       +  lprtmap,lprtmsk,lmapadd,lmapmul,lsolven,
!      +  lextcpy,lextxtl,lextovl
  c
        real uvwlim(2,3),mskvol
!       integer i,j,k,iu,iv,iw,ntok,ou,ov,ow
        character name1(0:4)*8,name2(0:4)*8,file1*8,file2*8,key*6,line*600
  c
        common /filenames/file1,file2
--- 108,117 ----
        character xyz*4,axisf*20,axism*20,axiss*20,axisp*20
        logical cont,lxyzasu,lsclsig,lsclmea,lsclrat,
       +  lprtmap,lprtmsk,lmapadd,lmapmul,lsolven,
!      +  lextcpy,lextxtl,lextovl,lmode
  c
        real uvwlim(2,3),mskvol
!       integer i,j,k,iu,iv,iw,ntok,ou,ov,ow,xspgrp
        character name1(0:4)*8,name2(0:4)*8,file1*8,file2*8,key*6,line*600
  c
        common /filenames/file1,file2
***************
*** 143,148 ****
--- 143,149 ----
        means=0.330
        ratio=1.0
        attnu=1.0
+       xspgrp=0
        nspgrp=1
        namspg=' '
        axiss=' '
***************
*** 166,171 ****
--- 167,173 ----
        lextcpy=.false.
        lextxtl=.false.
        lextovl=.false.
+       lmode=.false.
  c
        do 920 k=1,192
         do 910 i=1,4
***************
*** 178,190 ****
  
        file1=' '
        file2=' '
-       do 950 i=1,4
- 
-        call ugtenv(name1(i),line)
-        if (line.ne.' ') file1=name1(i)
-        call ugtenv(name2(i),line)
-        if (line.ne.' ') file2=name2(i)
-  950  continue
        call ugtenv('XYZIN',line)
        if (line.ne.' ') border=10.0
  c
--- 180,185 ----
***************
*** 192,198 ****
  c
   1000 call memoparse(.true.)
  c SYMM
!       call parsesymm(namspg,nspgrp,nampg,nsym,nsymp,rsym)
  c XYZLIM
        call parsesubkey('XYZL','ASU ',lxyzasu)
        call parsesubreal('XYZL','    ',1,.false.,uvwlim(1,1))
--- 187,193 ----
  c
   1000 call memoparse(.true.)
  c SYMM
!       call parsesymm(namspg,xspgrp,nampg,nsym,nsymp,rsym)
  c XYZLIM
        call parsesubkey('XYZL','ASU ',lxyzasu)
        call parsesubreal('XYZL','    ',1,.false.,uvwlim(1,1))
***************
*** 242,247 ****
--- 237,246 ----
        call parsesubkey ('SOLV','    ',lsolven)
        call parsesubreal('SOLV','FLIP',1,.true.,flipfac)
        call parsesubreal('SOLV','ATTN',1,.true.,attnu)
+ c MODE
+       call parsesubkey ('MODE','    ',lmode)
+       call parsesubchar('MODE','    ',1,.false.,file1)
+       call parsesubchar('MODE','    ',2,.false.,file2)
  c
        call parsediagnose(cont)
        if (cont) goto 1000
***************
*** 248,254 ****
  c
  c NOW SET UP THINGS --------------------
  c
-       if (lxyzasu) call setlim(nspgrp,uvwlim)
        if (lmapadd) mapcmb=1
        if (lmapmul) mapcmb=2
        if (lsolven) mapcmb=3
--- 247,252 ----
***************
*** 261,282 ****
        if (lextxtl) mapext=2
        if (lextovl) mapext=3
  c
! c Sort out input files
!       if (lsolven) then
!         file1 = 'MAPIN1'
!         file2 = 'MSKIN2'
!       else if (mapscl .eq. 2) then
!         file2 = 'MSKIN2'
!       endif
! 
!       if (file1 .eq. ' ') then
!         file1 = 'MAPIN'
        endif
! c
        call ccpmaphead(file1,file2)
        if (axisf.eq.' ') axisf=xyz(jfmsi(1):jfmsi(1))
        if (axism.eq.' ') axism=xyz(jfmsi(2):jfmsi(2))
        if (axiss.eq.' ') axiss=xyz(jfmsi(3):jfmsi(3))
  c
  c matrics
        call calcmetric()
--- 259,281 ----
        if (lextxtl) mapext=2
        if (lextovl) mapext=3
  c
! c get map names
!       if (.not.lmode) then
!        do 950 i=1,4
!         call ugtenv(name1(i),line)
!         if (line.ne.' ') file1=name1(i)
!         call ugtenv(name2(i),line)
!         if (line.ne.' ') file2=name2(i)
!  950   continue
        endif
!       if (mapcmb.eq.0.and.mapscl.eq.0) file2=' '
! c get map headers
        call ccpmaphead(file1,file2)
        if (axisf.eq.' ') axisf=xyz(jfmsi(1):jfmsi(1))
        if (axism.eq.' ') axism=xyz(jfmsi(2):jfmsi(2))
        if (axiss.eq.' ') axiss=xyz(jfmsi(3):jfmsi(3))
+       if (xspgrp.ne.0) nspgrp=xspgrp
+       if (lxyzasu) call setlim(nspgrp,uvwlim)
  c
  c matrics
        call calcmetric()
***************
*** 368,374 ****
        character name1*8,name2*8
  c
        integer mxyz(3),juvwi(3),msec,mode,m1(3),m2(3)
!       integer qxyz(3),qfmsi(3),qsec,qode,q1(3),q2(3)
        integer i,ifail,iprint
        real rmin,rmax,rmean,rrms,qmin,qmax,qmean,qrms,qcell(6)
        character title*80,qtitle*80
--- 367,373 ----
        character name1*8,name2*8
  c
        integer mxyz(3),juvwi(3),msec,mode,m1(3),m2(3)
!       integer qxyz(3),qfmsi(3),qsec,qode,q1(3),q2(3),mspgrp
        integer i,ifail,iprint
        real rmin,rmax,rmean,rrms,qmin,qmax,qmean,qrms,qcell(6)
        character title*80,qtitle*80
***************
*** 384,390 ****
  c .. second file - if present
        if (name2.ne.' ') then
         call mrdhds(lmap1,name2,qtitle,qsec,qfmsi,qxyz,q1(3),q1(1),q2(1),
!      +  q1(2),q2(2),qcell,nspgrp,qode,qmin,qmax,qmean,qrms,ifail,iprint)
         call mrclos(lmap1)
         q2(3)=q1(3)+qsec-1
         do 100 i=1,3
--- 383,389 ----
  c .. second file - if present
        if (name2.ne.' ') then
         call mrdhds(lmap1,name2,qtitle,qsec,qfmsi,qxyz,q1(3),q1(1),q2(1),
!      +  q1(2),q2(2),qcell,mspgrp,qode,qmin,qmax,qmean,qrms,ifail,iprint)
         call mrclos(lmap1)
         q2(3)=q1(3)+qsec-1
         do 100 i=1,3