Skip to content
Commits on Source (7)
......@@ -72,11 +72,16 @@
* indicators and residue insertions.
* 2013/05/11: Fixed a bug in array overflow.
* 2014/06/01: Added 'TM.sup_all_atm_lig' to display ligand structures
* 2015/09/14: optimized I/O which increased speed by ~100%
* 2016/05/21: fixed a bug on conformation output
* 2015/09/14: Optimized I/O which increased speed by ~100%
* 2016/05/21: Fixed a bug on conformation output
* 2017/07/08: Added one iteration in initial4 to avoid asymmetric alignment
* 2019/07/08: Enable TM-align to support both PDB and mmCIF formats, and
* fixed a bug on file output
**************************************************************************
c 1 2 3 4 5 6 7 !
c 3456789012345678901234567890123456789012345678901234567890123456789012345678
program TMalign
PARAMETER(nmax=5000) !maximum length of the sequence
PARAMETER(nmax2=10000) !for alignment output
......@@ -92,27 +97,37 @@
common/alignment/m_alignment,sequence(10),TM_ali,L_ali,rmsd_ali
common/alignment1/m_alignment_stick
character*10000 sequence
character ins1(nmax),ins2(nmax),ains1(90000),ains2(90000)
common/sequence/seq1(0:nmax),seq2(0:nmax)
character seq1,seq2,du1
character seq1(0:nmax),seq2(0:nmax),du1,du3,du4*2
character*500 fnam,pdb(100),outname,falign,fmatrix
character*3 aa(-1:20),aanam,ss1(nmax),ss2(nmax)
character*3 aa(-1:20),aanam,ss(2,nmax)
character*500 s,du,dum1,dum2
character*504 outnameall_tmp,outnameall
character aseq1(nmax2),aseq2(nmax2),aseq3(nmax2)
character*8 version
character*5000 s1 !maximum length of protein is 5000
dimension m1(nmax),m2(nmax)
ccc mmCIF
character*500 ctmp(1000),ch(nmax),ent(nmax),mn(nmax)
character*500 ch_t,ent_t,mn_t
character*20 Aatom(2,90000)
character Agroup(2,90000)*6
character Ares(2,90000)*3,Aalt(2,90000)
character Ains(2,9000),Ach(2,90000),Aent(2,90000)
character Cins(2,nmax),Cch(2)
integer Aatomi(2,90000),Aresi(2,90000),n_cut(2)
dimension iform(10),xx(2,90000),yy(2,90000),zz(2,90000),nL(2)
ccc
dimension m1(nmax),m2(nmax),m12(2,nmax)
dimension xtm1(nmax),ytm1(nmax),ztm1(nmax)
dimension xtm2(nmax),ytm2(nmax),ztm2(nmax)
common/init/invmap_i(nmax)
common/TM/TM,TMmax
common/d8/d8
common/initial4/mm1(nmax),mm2(nmax)
common/initial4/mm(2,nmax)
character*10 aa1,ra1,aa2,ra2,du2
dimension ia1(90000),aa1(90000),ra1(90000),ir1(90000)
......@@ -123,9 +138,8 @@
dimension ma1(nmax),ma2(nmax)
dimension nc1(nmax),nc2(nmax)
dimension nres1(nmax,32:122),nres2(nmax,32:122) !number of atoms
character*500 atom1(nmax,30),atom2(nmax,30) !atom name
c here atom1(i,j) should be atom2(i,j,k) but will beyond dimension
dimension nres1(2,nmax,32:122),nres2(2,nmax,32:122,32:122) !number of atoms
character*5 atom1(50) !atom name
ccc RMSD:
double precision r_1(3,nmax),r_2(3,nmax),w(nmax)
......@@ -200,7 +214,7 @@ ccc
goto 9999
endif
version='20170708'
version='20190708'
if(fnam.eq.'-v')then
write(*,*)'TM-align Version ',version
goto 9999
......@@ -264,218 +278,186 @@ ccc
irmx=1
endif
ccccccccc read data from first CA file:
if(m_out.eq.-1)then !no output so no need to read all atoms (time-saving)
open(unit=10,file=pdb(1),status='old')
i=0
do while (.true.)
read(10,9001,end=1013) s
if(i.gt.0.and.s(1:3).eq.'TER')goto 1013
if(s(1:3).eq.'ATO')then
if(s(13:16).eq.'CA '.or.s(13:16).eq.' CA '.or
& .s(13:16).eq.' CA')then
du1=s(27:27) !read insertion tag
mk=1
if(s(17:17).ne.' ')then !with Alternate atom
read(s(23:26),*)i8 !res ID
if(nres1(i8,ichar(du1)).ge.1)then
mk=-1 !this residue was already read
endif
endif
if(mk.eq.1)then
i=i+1
read(s,9000)du,ma1(i),du,aanam,du,mm1(i),du,
$ xa(1,i,0),xa(2,i,0),xa(3,i,0)
nres1(mm1(i),ichar(du1))=nres1(mm1(i),ichar(du1))+1
do j=-1,20
if(aanam.eq.aa(j))then
seq1(i)=slc(j)
goto 121
**********decide file format (PDB or mmCIF) ------------------->
do j=1,2
iform(j)=0 !format of pdb(j)
open(unit=10,file=pdb(j),status='old')
do while(iform(j).eq.0)
read(10,*)s
if(s(1:6).eq.'HEADER'.or.s(1:4).eq.'ATOM'.or.
& s(1:6).eq.'REMARK')then
iform(j)=1 !PDB format
elseif(s(1:4).eq.'data'.or.s(1:1).eq.'#'.or.
& s(1:5).eq.'loop_')then
iform(j)=2 !mmCIF format
endif
enddo
seq1(i)=slc(-1)
121 continue
ss1(i)=aanam
if(i.ge.nmax)goto 1013
endif
if(iform(j).eq.0)then
write(*,*)'error: file must in PDB or mmCIF format!'
endif
endif
enddo
1013 continue
close(10)
nseq1=i
enddo
*******^^^^ format is decided ^^^^^^^^^^^^^^^^^^^^^^^^^^
open(unit=10,file=pdb(2),status='old')
cccccccccRead data from CA file ---------------->
c we only need to read following (keep first chain, keep only one altLoc):
c xa(i,j,k)----(x,y,z)
c mm(2,nmax)---residue order number, for gapless threading
c ss(2,nmax)---residue name ('GLY') for seq_ID calculation and output
c seq1(0,nmax),seq2(0,nmax)----single characters ('G', 'N')
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
do 1001 ic=1,2 !ic=1,2 for file1 and file2
i=0
do while (.true.)
read(10,9001,end=1014) s
if(i.gt.0.and.s(1:3).eq.'TER')goto 1014
if(s(1:3).eq.'ATO')then
if(s(13:16).eq.'CA '.or.s(13:16).eq.' CA '.or
& .s(13:16).eq.' CA')then
du1=s(27:27) !read insertion tag
open(unit=10,file=pdb(ic),status='old')
if(iform(ic).eq.1)then !file in PDB format------->
do while (.true.) !start do-while ---------->
read(10,'(A500)',end=1013) s
if(i.gt.0)then
if(s(1:3).eq.'TER'.or.s(1:3).eq.'MOD'.
& or.s(1:3).eq.'END')then
goto 1013 !only read the first chain
endif
endif
if(s(1:4).eq.'ATOM')then !read 'ATOM' =======>
read(s(13:16),*)du4 !will remove space before 'CA'
if(du4.eq.'CA')then !read 'CA' ---------->
du1=s(27:27) !residue insertion tag
*******remove repeated altLoc atoms -------->
mk=1
if(s(17:17).ne.' ')then !with Alternate atom
read(s(23:26),*)i8 !res ID
if(nres2(i8,ichar(du1)).ge.1)then
mk=-1 !this residue was already read
if(nres1(ic,i8,ichar(du1)).ge.1)then !since CA, cannot be >1
mk=-1 !this residue was already read, skip it
endif
endif
if(mk.eq.1)then
c^^^^^^^^^altLoc checked (mk.ne.1 will be skipped) ^^^^^^^^^
if(mk.eq.1)then !mk=1 ------------>
i=i+1
read(s,9000)du,ma2(i),du,aanam,du,mm2(i),du,
$ xa(1,i,1),xa(2,i,1),xa(3,i,1)
nres2(mm2(i),ichar(du1))=nres2(mm2(i),ichar(du1))+1
do j=-1,20
if(aanam.eq.aa(j))then
seq2(i)=slc(j)
goto 122
endif
enddo
seq2(i)=slc(-1)
122 continue
ss2(i)=aanam
if(i.ge.nmax)goto 1014
endif
endif
read(s,'(a6,I5,a6,A3,A2,i4,A1,a3,3F8.3)')
& du,itmp,du,aanam,du,mm(ic,i),
& Cins(ic,i),du,
& xa(1,i,ic-1),xa(2,i,ic-1),xa(3,i,ic-1)
***
i8=mm(ic,i)
nres1(ic,i8,ichar(du1))=
& nres1(ic,i8,ichar(du1))+1 !nres1 only for check altLoc
***
ss(ic,i)=aanam !residue name, 'GLY', for seq_ID
if(i.ge.nmax)goto 1013
endif !<-----mk=1
endif !<---- read 'CA'
endif !<==== read 'ATOM'
enddo !<----end do-while
else !<----mmCIF format,if(iform(1).eq.2)
in=0 !number of entries
do while (.true.) !start do-while ---------->
read(10,'(A500)',end=1013) s
if(i.gt.0)then !skip unuseful read to save time
if(s(1:1).eq.'#'.or.s(1:5).eq.'loop_'.or.
& s(1:6).eq.'HETATM')goto 1013
endif
if(s(1:11).eq.'_atom_site.')then
in=in+1
read(s,*)du
if(du.eq.'_atom_site.label_atom_id')i_atom=in !CA,O, no need
if(du.eq.'_atom_site.label_alt_id')i_alt=in !'.',A,B
if(du.eq.'_atom_site.label_comp_id')i_res=in !GLY,LEU
if(du.eq.'_atom_site.label_asym_id')i_ch=in !A,B
if(du.eq.'_atom_site.label_entity_id')i_ent=in !1,2,a,b
if(du.eq.'_atom_site.label_seq_id')i_resi=in !1,2,3
if(du.eq.'_atom_site.pdbx_PDB_ins_code')i_ins=in !A,?
if(du.eq.'_atom_site.Cartn_x')i_x=in !x, 1.234
if(du.eq.'_atom_site.Cartn_y')i_y=in !y, 1.234
if(du.eq.'_atom_site.Cartn_z')i_z=in !z, 1.234
if(du.eq.'_atom_site.pdbx_PDB_model_num')i_mn=in !model number, 1,2,3
endif
if(s(1:4).eq.'ATOM')then !read 'ATOM' =======>
read(s,*)(ctmp(j),j=1,in) !no space before characters
if(ctmp(i_atom).eq.'CA')then !read 'CA' ---------->
if(i.gt.0)then
if(i_mn.gt.1)then !sometimes it may have no i_mn
read(ctmp(i_mn),*)mn_t
if(mn_t.ne.mn(i)) goto 1013 !only read first model
endif
enddo
1014 continue
close(10)
nseq2=i
goto 1017
read(ctmp(i_ch),*)ch_t
if(ch_t.ne.ch(i)) goto 1013 !only read first chain
read(ctmp(i_ent),*)ent_t
if(ent_t.ne.ent(i)) goto 1013 !only read first entity
endif
c^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cccccccc read full-atom structure that is needed only for output ---->
open(unit=10,file=pdb(1),status='old')
i=0
na1=0
ntt=0
do while (.true.)
read(10,9001,end=1010) s
if(i.gt.0.and.s(1:3).eq.'TER')goto 1010
if(s(1:3).eq.'ATO')then
***
du1=s(27:27) !read insertion tag
*******remove repeated altLoc atoms (this does not care inserted residues) -------->
mk=1
if(s(17:17).ne.' ')then !with Alternate atom
du2=s(13:16) !atom ID
read(s(23:26),*)i8 !res ID
do i1=1,nres1(i8,ichar(du1)) !#of atoms for res_insert
if(du2.eq.atom1(i8,i1))then !such atom was already read
mk=-1
du1=ctmp(i_ins) !read insertion tag
if(ctmp(i_alt).ne.'.')then !with Alternate atom
read(ctmp(i_resi),*)i8 !res ID
if(nres1(ic,i8,ichar(du1)).ge.1)then !since CA, cannot be >1
mk=-1 !this residue was already read, skip it
endif
enddo
endif
if(mk.eq.1)then
***
ntt=ntt+1
if(ntt.ge.90000)goto 1010
na1=na1+1
read(s,8999)du,ia1(na1),du,aa1(na1),du,ra1(na1),du,
& ir1(na1),du,xa1(na1),ya1(na1),za1(na1)
i8=ir1(na1)
if(nres1(i8,ichar(du1)).lt.30)then
nres1(i8,ichar(du1))=nres1(i8,ichar(du1))+1 !#of atoms for res_ins
atom1(i8,nres1(i8,ichar(du1)))=aa1(na1) !atom ID
endif
ains1(na1)=du1
if(s(13:16).eq.'CA '.or.s(13:16).eq.' CA '.or
& .s(13:16).eq.' CA')then
c^^^^^^^^^altLoc checked (mk.ne.1 will be skipped) ^^^^^^^^^
if(mk.eq.1)then !mk=1 ------------>
i=i+1
read(s,9000)du,ma1(i),du,aanam,du,mm1(i),du,
$ xa(1,i,0),xa(2,i,0),xa(3,i,0)
ins1(i)=du1
read(ctmp(i_ch),*)ch(i) !for check other chain
read(ctmp(i_ent),*)ent(i) !for check other entity
read(ctmp(i_mn),*)mn(i) !for check model number
***
read(ctmp(i_x),*)xa(1,i,ic-1)
read(ctmp(i_y),*)xa(2,i,ic-1)
read(ctmp(i_z),*)xa(3,i,ic-1)
read(ctmp(i_resi),*)mm(ic,i) !residue order, 4,5,6
read(ctmp(i_ins),*)Cins(ic,i) !residue insertion, A, ?
if(Cins(ic,i).eq.'?')Cins(ic,i)=' '
ss(ic,i)=ctmp(i_res) !residue name, 'GLY', for seq_ID
***
i8=mm(ic,i)
nres1(ic,i8,ichar(du1))=
& nres1(ic,i8,ichar(du1))+1 !nres1 only for check altLoc
***
if(i.ge.nmax)goto 1013
endif !<-----mk=1
endif !<-----read 'CA'
endif !<==== read 'ATOM'
enddo !<----end do-while
endif !if(iform(ic).eq.2)
1013 continue
close(10)
c-------convert 'GLY' to 'G' ------------>
if(ic.eq.1)then
nseq1=i
do i=1,nseq1
do j=-1,20
if(aanam.eq.aa(j))then
if(ss(1,i).eq.aa(j))then
seq1(i)=slc(j)
goto 21
goto 121
endif
enddo
seq1(i)=slc(-1)
21 continue
ss1(i)=aanam
if(i.ge.nmax)goto 1010
endif
endif
endif
enddo
1010 continue
8999 format(a6,I5,a1,A4,a1,A3,a2,I4,a4,3F8.3)
9000 format(a6,I5,a6,A3,A2,i4,A4,3F8.3)
9001 format(A100)
close(10)
nseq1=i
c^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ccccccccc read data from the second structure file:
open(unit=10,file=pdb(2),status='old')
i=0
na2=0
ntt=0
do while (.true.)
read(10,9001,end=1011) s
if(i.gt.0.and.s(1:3).eq.'TER')goto 1011
if(s(1:3).eq.'ATO')then
***
du1=s(27:27) !read insertion tag
mk=1
if(s(17:17).ne.' ')then
du2=s(13:16)
read(s(23:26),*)i8
do i1=1,nres2(i8,ichar(du1))
if(du2.eq.atom2(i8,i1))then
mk=-1
endif
121 continue
enddo
endif
if(mk.eq.1)then
***
ntt=ntt+1
if(ntt.ge.90000)goto 1011
na2=na2+1
read(s,8999)du,ia2(na2),du,aa2(na2),du,ra2(na2),du,
& ir2(na2),du,xa2(na2),ya2(na2),za2(na2)
i8=ir2(na2)
if(nres2(i8,ichar(du1)).lt.30)then
nres2(i8,ichar(du1))=nres2(i8,ichar(du1))+1
atom2(i8,nres2(i8,ichar(du1)))=aa2(na2)
endif
ains2(na2)=du1
if(s(13:16).eq.'CA '.or.s(13:16).eq.' CA '.or.
& s(13:16).eq.' CA')then
i=i+1
read(s,9000)du,ma2(i),du,aanam,du,mm2(i),du,
$ xa(1,i,1),xa(2,i,1),xa(3,i,1)
ins2(i)=du1
else
nseq2=i
do i=1,nseq2
do j=-1,20
if(aanam.eq.aa(j))then
if(ss(2,i).eq.aa(j))then
seq2(i)=slc(j)
goto 22
goto 122
endif
enddo
seq2(i)=slc(-1)
22 continue
ss2(i)=aanam
if(i.ge.nmax)goto 1011
endif
endif
endif
122 continue
enddo
1011 continue
close(10)
nseq2=i
c^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1017 continue
endif
1001 continue !ic=1,2 for file1 and file2
c^^^^^^^^^^^^^read input files completed ^^^^^^^^^^^^^^^^^^^^^^
ccccccccc read initial alignment file from 'alignment.txt':
if(m_alignment.eq.1.or.m_alignment_stick.eq.1)then
open(unit=10,file=falign,status='old')
n_p=0
do while (.true.)
read(10,9002,end=1012)s1
c write(*,*)'s1=',trim(s1)
read(10,'(A5000)',end=1012)s1
if(s1(1:1).eq.">")then
n_p=n_p+1
sequence(n_p)=''
......@@ -484,14 +466,11 @@ c write(*,*)'s1=',trim(s1)
if(n_p.gt.0)then
sequence(n_p)=sequence(n_p)(1:len_trim(sequence(n_p)))
& //s1(1:len_trim(s1))
c write(*,*)n_p,trim(sequence(n_p))
endif
endif
enddo
1012 continue
close(10)
c write(*,*)trim(sequence(1))
c write(*,*)trim(sequence(2))
if(n_p.lt.2)then
write(*,*)'ERROR: FASTA format is wrong, two proteins',
& ' should be included'
......@@ -503,7 +482,6 @@ c write(*,*)trim(sequence(2))
& ' run it anyway'
endif
endif
9002 format(A5000)
c^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* Scale of TM-score in search based on length of smaller protein --------->
......@@ -517,7 +495,6 @@ c^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
endif
d0_min=d0+0.8 !best for search, this should be changed when calculate real TM-score
if(d0.lt.d0_min)d0=d0_min !min d0 in search=0.968, min d0 in output=0.5
c write(*,*)'d0 in search=',d0
d00=d0 !for quickly calculate TM-score in searching
if(d00.gt.8)d00=8
if(d00.lt.4.5)d00=4.5
......@@ -570,7 +547,7 @@ c write(*,*)'d0 in search=',d0
m1(j)=m1(i) !record alignment
m2(j)=m2(i)
if(ss1(m1(i)).eq.ss2(m2(i)))then
if(ss(1,m1(i)).eq.ss(2,m2(i)))then
n_eq=n_eq+1
endif
endif
......@@ -579,7 +556,6 @@ c write(*,*)'d0 in search=',d0
seq_id=float(n_eq)/(n8_al+0.00000001)
call u3b(w,r_1,r_2,n8_al,0,rms,u,t,ier)
rmsd=dsqrt(rms/n8_al)
c write(*,*)'---------',rms,n8_al,RMSD,u(1,1),t(1)
*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*^^^^^^^ alignment is done, all cutoffs were based on shorter chain^^^^^^^^
......@@ -651,7 +627,9 @@ c write(*,*)'---------',rms,n8_al,RMSD,u(1,1),t(1)
TMfix=TM8*n8_al/nseq2
endif
*********for output summary ******************************
*****************************************
* screen output of TM-align results *
*****************************************
write(*,*)
write(*,*)'*****************************************************',
& '*********************'
......@@ -755,243 +733,8 @@ c write(*,*)'---------',rms,n8_al,RMSD,u(1,1),t(1)
write(1,*)' enddo'
write(1,*)
close(1)
209 format(I2,f18.10,f15.10,f15.10,f15.10)
endif
********* output superposition ******************************
if(m_out.eq.1)then
c 11, output superimpostion in the aligned regions ------------->
1236 format('ATOM ',i5,' CA ',A3,' A',I4,A1,3X,3F8.3)
1237 format('ATOM ',i5,' CA ',A3,' B',I4,A1,3X,3F8.3)
1238 format('TER')
1239 format('CONECT',I5,I5)
900 format(A)
902 format('select ',I4,':A,',I4,':B')
903 format('REMARK TM-align Version ',A8,'')
104 format('REMARK Chain 1:',A10,' Size=',I4)
105 format('REMARK Chain 2:',A10,' Size=',I4,
& ' (TM-score is normalized by ',I4,', d0=',f6.2,')')
106 format('REMARK Aligned length=',I4,', RMSD=',f6.2,
& ', TM-score=',f7.5,', ID=',f5.3)
OPEN(unit=7,file=outname,status='unknown') !TM.sup=pdb1.aln + pdb2.aln
*** script:
write(7,900)'load inline'
write(7,900)'select *A'
write(7,900)'wireframe .45'
write(7,900)'select *B'
write(7,900)'wireframe .20'
write(7,900)'select all'
write(7,900)'color white'
do i=1,n8_al
dis2=sqrt((xtm1(i)-xtm2(i))**2+
& (ytm1(i)-ytm2(i))**2+(ztm1(i)-ztm2(i))**2)
if(dis2.le.d0_out)then
write(7,902)mm1(m1(i)),mm2(m2(i))
write(7,900)'color red'
endif
enddo
write(7,900)'select all'
write(7,900)'exit'
write(7,903)version
write(7,104)pdb(1),nseq1
write(7,105)pdb(2),nseq2,int(anseq),d0
write(7,106)n8_al,rmsd,TM2,seq_id
*** chain1:
do i=1,n8_al
write(7,1236)m1(i),ss1(m1(i)),mm1(m1(i)),ins1(m1(i)),
& xtm1(i),ytm1(i),ztm1(i)
enddo
write(7,1238) !TER
do i=2,n8_al
write(7,1239)m1(i-1),m1(i) !connect atoms
enddo
*** chain2:
do i=1,n8_al
write(7,1237)5000+m2(i),ss2(m2(i)),mm2(m2(i)),ins2(m2(i)),
$ xtm2(i),ytm2(i),ztm2(i)
enddo
write(7,1238)
do i=2,n8_al
write(7,1239)5000+m2(i-1),5000+m2(i)
enddo
close(7)
c 22, output CA-trace of whole chain in 'TM.sup_all' -------->
outnameall=outname(1:len_trim(outname))//'_all'
OPEN(unit=8,file=outnameall,status='unknown') !pdb1.aln + pdb2.aln
*** script:
write(8,900)'load inline'
write(8,900)'select *A'
write(8,900)'wireframe .45'
write(8,900)'select none'
write(8,900)'select *B'
write(8,900)'wireframe .20'
write(8,900)'color white'
do i=1,n8_al
dis2=sqrt((xtm1(i)-xtm2(i))**2+
& (ytm1(i)-ytm2(i))**2+(ztm1(i)-ztm2(i))**2)
if(dis2.le.d0_out)then
write(8,902)mm1(m1(i)),mm2(m2(i)) !select residue
write(8,900)'color red'
endif
enddo
write(8,900)'select all'
write(8,900)'exit'
write(8,903)version
write(8,104)pdb(1),nseq1
write(8,105)pdb(2),nseq2,int(anseq),d0
write(8,106)n8_al,rmsd,TM2,seq_id
*** chain1:
do i=1,nseq1
ax=t(1)+u(1,1)*xa(1,i,0)+u(1,2)*xa(2,i,0)+u(1,3)*xa(3,i,0)
ay=t(2)+u(2,1)*xa(1,i,0)+u(2,2)*xa(2,i,0)+u(2,3)*xa(3,i,0)
az=t(3)+u(3,1)*xa(1,i,0)+u(3,2)*xa(2,i,0)+u(3,3)*xa(3,i,0)
write(8,1236)i,ss1(i),mm1(i),ins1(i),ax,ay,az
enddo
write(8,1238) !TER
do i=2,nseq1
write(8,1239)i-1,i !CONECT atom numbers
enddo
*** chain2:
do i=1,nseq2
write(8,1237)5000+i,ss2(i),mm2(i),ins2(i),
$ xa(1,i,1),xa(2,i,1),xa(3,i,1)
enddo
write(8,1238)
do i=2,nseq2
write(8,1239)5000+i-1,5000+i
enddo
close(8)
c 33, output full-atomic structure of whole chain in 'TM.sup_atm' -------->
outnameall=outname(1:len_trim(outname))//'_atm'
OPEN(unit=8,file=outnameall,status='unknown') !pdb1.aln + pdb2.aln
*** script:
write(8,900)'load inline'
write(8,900)'select *A'
write(8,900)'color blue'
write(8,900)'select *B'
write(8,900)'color red'
write(8,900)'select all'
write(8,900)'cartoon'
write(8,900)'exit'
write(8,903)version
write(8,104)pdb(1),nseq1
write(8,105)pdb(2),nseq2,int(anseq),d0
write(8,106)n8_al,rmsd,TM2,seq_id
*** chain1:
do i=1,na1
do j=1,n8_al
if(ir1(i).eq.mm1(m1(j)))then !aligned residues
if(ains1(i).eq.ins1(m1(j)))then
ax=t(1)+u(1,1)*xa1(i)+u(1,2)*ya1(i)+u(1,3)*za1(i)
ay=t(2)+u(2,1)*xa1(i)+u(2,2)*ya1(i)+u(2,3)*za1(i)
az=t(3)+u(3,1)*xa1(i)+u(3,2)*ya1(i)+u(3,3)*za1(i)
write(8,8888)ia1(i),aa1(i),ra1(i),ir1(i),ains1(i),
& ax,ay,az
endif
endif
enddo
enddo
write(8,1238) !TER
*** chain2:
do i=1,na2
do j=1,n8_al
if(ir2(i).eq.mm2(m2(j)))then !aligned residues
if(ains2(i).eq.ins2(m2(j)))then
write(8,8889)ia2(i),aa2(i),ra2(i),ir2(i),ains2(i),
& xa2(i),ya2(i),za2(i)
endif
endif
enddo
enddo
write(8,1238) !TER
close(8)
c 44, output full-atomic structure of whole chain in 'TM.sup_all_atm' -------->
outnameall=outname(1:len_trim(outname))//'_all_atm'
OPEN(unit=8,file=outnameall,status='unknown') !pdb1.aln + pdb2.aln
*** script:
write(8,900)'load inline'
write(8,900)'select *A'
write(8,900)'color blue'
write(8,900)'select *B'
write(8,900)'color red'
write(8,900)'select all'
write(8,900)'cartoon'
write(8,900)'exit'
write(8,903)version
write(8,104)pdb(1),nseq1
write(8,105)pdb(2),nseq2,int(anseq),d0
write(8,106)n8_al,rmsd,TM2,seq_id
*** chain1:
do i=1,na1
ax=t(1)+u(1,1)*xa1(i)+u(1,2)*ya1(i)+u(1,3)*za1(i)
ay=t(2)+u(2,1)*xa1(i)+u(2,2)*ya1(i)+u(2,3)*za1(i)
az=t(3)+u(3,1)*xa1(i)+u(3,2)*ya1(i)+u(3,3)*za1(i)
write(8,8888)ia1(i),aa1(i),ra1(i),ir1(i),ains1(i),
& ax,ay,az
enddo
write(8,1238) !TER
*** chain2:
do i=1,na2
write(8,8889)ia2(i),aa2(i),ra2(i),ir2(i),ains2(i),
& xa2(i),ya2(i),za2(i)
enddo
write(8,1238) !TER
close(8)
c 55, output full-atomic structure of whole chain in 'TM.sup_all_atm_lig' ---->
outnameall=outname(1:len_trim(outname))//'_all_atm_lig'
OPEN(unit=8,file=outnameall,status='unknown') !pdb1.aln + pdb2.aln
*** script:
write(8,900)'load inline'
write(8,900)'select all'
write(8,900)'cartoon'
write(8,900)'select *A'
write(8,900)'color blue'
write(8,900)'select *B'
write(8,900)'color red'
write(8,900)'select ligand'
write(8,900)'wireframe 0.25'
write(8,900)'select solvent'
write(8,900)'spacefill 0.25'
write(8,900)'select all'
write(8,900)'exit'
write(8,903)version
write(8,104)pdb(1),nseq1
write(8,105)pdb(2),nseq2,int(anseq),d0
write(8,106)n8_al,rmsd,TM2,seq_id
*** chain1:
open(unit=10,file=pdb(1),status='old')
do while (.true.)
read(10,9001,end=1015) s
if(s(1:6).eq.'ATOM '.or.s(1:6).eq.'HETATM')then
read(s,8900)du,xxx,yyy,zzz
xxn=t(1)+u(1,1)*xxx+u(1,2)*yyy+u(1,3)*zzz
yyn=t(2)+u(2,1)*xxx+u(2,2)*yyy+u(2,3)*zzz
zzn=t(3)+u(3,1)*xxx+u(3,2)*yyy+u(3,3)*zzz
write(8,8901)du(1:21),'A',du(23:30),xxn,yyn,zzn
endif
enddo
1015 continue
close(10)
write(8,1238) !TER
*** chain2:
open(unit=10,file=pdb(2),status='old')
do while (.true.)
read(10,9001,end=1016) s
if(s(1:6).eq.'ATOM '.or.s(1:6).eq.'HETATM')then
read(s,8900)du,xxx,yyy,zzz
write(8,8901)du(1:21),'B',du(23:30),xxx,yyy,zzz
endif
enddo
1016 continue
close(10)
write(8,1238) !TER
close(8)
8888 format('ATOM ',I5,1x,A4,1x,A3,' A',I4,A1,3x,3F8.3)
8889 format('ATOM ',I5,1x,A4,1x,A3,' B',I4,A1,3x,3F8.3)
8900 format(a30,3F8.3)
8901 format(a21,a1,a8,3F8.3)
endif
*^^^^^^^^^^^^^^^^^^ output finished ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
209 format(I2,f18.10,f15.10,f15.10,f15.10)
************ output aligned sequences **************************
ii=0
......@@ -1044,6 +787,369 @@ c 55, output full-atomic structure of whole chain in 'TM.sup_all_atm_lig' --
10 format(10000A1)
write(*,*)
c^^^^^^^^^^screen output is done ^^^^^^^^^^^^^^^^^^^^^^^^^^
if(m_out.ne.1)then
stop
endif
*******************************************************
* output alignment structure for Rasmal review *
*******************************************************
c*****************************************************************
c************* Step-1: read all-atom structures ******************
c*****************************************************************
do 1002 ic=1,2 !ic=1,2 for file1 and file2
nL(ic)=0 !number of lines in PDB file
n_cut(ic)=0 !end of first chain, decide to show aaa_all_atm_lig
open(unit=10,file=pdb(ic),status='old')
if(iform(ic).eq.1)then !file in PDB format %%%%%%%%%%------->
do while (.true.)
read(10,'(A500)',end=1015) s
if(n_cut(ic).eq.0.and.nL(ic).gt.0)then !decide n_cut
if(s(1:3).eq.'TER'.or.s(1:3).eq.'MOD'.
& or.s(1:3).eq.'END')then
n_cut(ic)=nL(ic)
endif
endif
*** skip model_number >=2 ----------->
if(s(1:5).eq.'MODEL')then
read(s,*)du,model_num
if(model_num.gt.1)then
do while(.true.)
read(10,'(A500)',end=1015) s
if(s(1:6).eq.'ENDMDL')goto 1014
enddo
endif
endif
*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if(s(1:6).eq.'ATOM '.or.s(1:6).eq.'HETATM')then !read ATOM/HETATM ====>
*******remove repeated altLoc atoms -------->
mk=1
du1=s(27:27) !read insertion tag
du3=s(22:22) !chain ID
if(s(17:17).ne.' ')then !with Alternate atom
du2=s(13:16) !atom ID
c read(s(13:16),*)du2
read(s(23:26),*)i8 !res ID
do i1=1,nres2(ic,i8,ichar(du1),ichar(du3)) !#of atoms for res_insert
if(du2.eq.atom1(i1))then !such atom was already read
mk=-1
endif
enddo
endif
c^^^^^^^^^altLoc checked (mk.ne.1) will be skipped) ^^^^^^^^^
if(mk.eq.1)then !mk=1--------->
nL(ic)=nL(ic)+1
read(s,8999)Agroup(ic,nL(ic)),Aatomi(ic,nL(ic)),
& du,Aatom(ic,nL(ic)),Aalt(ic,nL(ic)),
& Ares(ic,nL(ic)),du,Ach(ic,nL(ic)),
& Aresi(ic,nL(ic)),Ains(ic,nL(ic)),du,
& xx(ic,nL(ic)),yy(ic,nL(ic)),zz(ic,nL(ic))
c read(Aatom(ic,nL(ic)),*)Aatom(ic,nL(ic)) !remove space before ' CA'
***
i8=Aresi(ic,nL(ic))
if(nres2(ic,i8,ichar(du1),ichar(du3)).lt.50)then
nres2(ic,i8,ichar(du1),ichar(du3))=
& nres2(ic,i8,ichar(du1),ichar(du3))+1 !#of atoms for res_ins
atom1(nres2(ic,i8,ichar(du1),ichar(du3)))=
& Aatom(ic,nL(ic)) !atom ID
endif
***
if(nL(ic).ge.90000)goto 1015
endif !<------mk=1
endif !<======read ATOM/HETATM
1014 continue !skip model_num >1
enddo !do while
else !<----mmCIF format,if(iform(1).eq.2) %%%%%%%%%%%%%%%%
in=0 !number of entries
do while (.true.) !start do-while ---------->
read(10,'(A500)',end=1015) s
if(nL(ic).gt.0)then !skip unuseful read to save time
if(s(1:1).eq.'#'.or.s(1:5).eq.'loop_')goto 1015
endif
if(s(1:11).eq.'_atom_site.')then
in=in+1
read(s,*)du
if(du.eq.'_atom_site.group_PDB')i_group=in !'ATOM','HETATM'
if(du.eq.'_atom_site.id')i_atomi=in !1,2,3,4
if(du.eq.'_atom_site.type_symbol')i_type=in !N,C,O
if(du.eq.'_atom_site.label_atom_id')i_atom=in !CA,O
if(du.eq.'_atom_site.label_alt_id')i_alt=in !'.',A,B
if(du.eq.'_atom_site.label_comp_id')i_res=in !GLY,LEU
if(du.eq.'_atom_site.label_asym_id')i_ch=in !A,B
if(du.eq.'_atom_site.label_entity_id')i_ent=in !1,2,a,b
if(du.eq.'_atom_site.label_seq_id')i_resi=in !1,2,3
if(du.eq.'_atom_site.pdbx_PDB_ins_code')i_ins=in !A,?
if(du.eq.'_atom_site.Cartn_x')i_x=in !x, 1.234
if(du.eq.'_atom_site.Cartn_y')i_y=in !y, 1.234
if(du.eq.'_atom_site.Cartn_z')i_z=in !z, 1.234
if(du.eq.'_atom_site.pdbx_PDB_model_num')i_mn=in !model number, 1,2,3
endif
if(s(1:4).eq.'ATOM'.or.s(1:6).eq.'HETATM')then !read 'ATOM' =======>
read(s,*)(ctmp(j),j=1,in)
*** skip model_num >1 --------------------------------------->
if(i_mn>1)then
read(ctmp(i_mn),*)model_num
if(model_num.gt.1)goto 1016 !skip model_num >1
endif
*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if(n_cut(ic).eq.0.and.nL(ic).gt.0)then !decide n_cut
read(ctmp(i_ch),*)ch_t
read(ctmp(i_ent),*)ent_t
if(ch_t.ne.Ach(ic,nL(ic)).or.ent_t.ne.
& Aent(ic,nL(ic)))then
n_cut(ic)=nL(ic)
endif
endif
*******remove repeated altLoc atoms (this does not care inserted residues) -------->
mk=1
du1=ctmp(i_ins) !read insertion tag
du3=ctmp(i_ch) !chain ID
if(ctmp(i_alt).ne.'.')then !with Alternate atom
du2=ctmp(i_atom) !atom ID
read(ctmp(i_resi),*)i8 !res ID
do i1=1,nres2(ic,i8,ichar(du1),ichar(du3)) !#of atoms for res_insert
if(du2.eq.atom1(i1))then !such atom was already read
mk=-1
endif
enddo
endif
c^^^^^^^^^altLoc checked (mk.ne.1) will be skipped) ^^^^^^^^^
if(mk.eq.1)then !mk=1 -------------->
nL(ic)=nL(ic)+1
read(ctmp(i_group),*)Agroup(ic,nL(ic))
read(ctmp(i_atomi),*)Aatomi(ic,nL(ic))
read(ctmp(i_atom),*)Aatom(ic,nL(ic))
********add space before Aatom(ic,nL(ic)) for output ------>
if(Aatom(ic,nL(ic))(4:4).eq.' ')then
Aatom(ic,nL(ic))=' '//Aatom(ic,nL(ic))
endif
c read(ctmp(i_alt),*)Aalt(ic,nL(ic)) ! not used, because we alway use 1 atom for altLoc
c if(Aalt(ic,nL(ic)).eq.'.')Aalt(ic,nL(ic))=' '
read(ctmp(i_res),*)Ares(ic,nL(ic))
read(ctmp(i_ch),*)Ach(ic,nL(ic)) !for check other chain
read(ctmp(i_ent),*)Aent(ic,nL(ic)) !for check other entity
if(ctmp(i_resi)(1:1).eq.'.')ctmp(i_resi)='0' !for HETATM
read(ctmp(i_resi),*)Aresi(ic,nL(ic))
read(ctmp(i_ins),*)Ains(ic,nL(ic))
if(Ains(ic,nL(ic)).eq.'?')Ains(ic,nL(ic))=' '
***
read(ctmp(i_x),*)xx(ic,nL(ic))
read(ctmp(i_y),*)yy(ic,nL(ic))
read(ctmp(i_z),*)zz(ic,nL(ic))
***
i8=Aresi(ic,nL(ic))
if(nres2(ic,i8,ichar(du1),ichar(du3)).lt.50)then
nres2(ic,i8,ichar(du1),ichar(du3))=
& nres2(ic,i8,ichar(du1),ichar(du3))+1 !#of atoms for res_ins
atom1(nres2(ic,i8,ichar(du1),ichar(du3)))=
& Aatom(ic,nL(ic)) !atom ID
endif
***
if(nL(ic).ge.90000)goto 1015
endif !<---- mk=1
1016 continue !skip model_num >1
endif !<==== read 'ATOM'
enddo !<----end do-while
endif !<----mmCIF format,if(iform(1).eq.2) %%%%%%%%%
1015 continue
close(10)
1002 continue !ic=1,2 for file1 and file2
8999 format(a6,I5,a1,A4,a1,A3,a1,A1,I4,A1,a3,3F8.3)
********** mark aligned residues --------------->
do i=1,n8_al
m12(1,i)=m1(i)
m12(2,i)=m2(i)
enddo
Cch(1)='A'
Cch(2)='B'
c^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
c*********************************************************************
c************* Step-2: output structures for Rasmol ******************
c*********************************************************************
do 1019 ip=1,5
if(ip.eq.1) outnameall=outname(1:len_trim(outname)) !'aaa', aligned CA
if(ip.eq.2) outnameall=outname(1:len_trim(outname))//'_all' !'aaa_all', all CA
if(ip.eq.3) outnameall=outname(1:len_trim(outname))//'_atm' !'aaa_atm', all aligned atoms
if(ip.eq.4) outnameall=outname(1:len_trim(outname))
& //'_all_atm' !'aaa_all_atm', all atoms
if(ip.eq.5) outnameall=outname(1:len_trim(outname))
& //'_all_atm_lig' !'aaa_all_atm_lig', all atom + ligand
OPEN(unit=10,file=outnameall,status='unknown')
*** script:
if(ip.eq.1.or.ip.eq.2)then !'aaa','aaa_all'
write(10,'(A)')'load inline'
write(10,'(A)')'select *A'
write(10,'(A)')'wireframe .45'
write(10,'(A)')'select *B'
write(10,'(A)')'wireframe .20'
write(10,'(A)')'select all'
write(10,'(A)')'color white'
do i=1,n8_al
dis2=sqrt((xtm1(i)-xtm2(i))**2+
& (ytm1(i)-ytm2(i))**2+(ztm1(i)-ztm2(i))**2)
if(dis2.le.d0_out)then
write(10,902)mm(1,m1(i)),mm(2,m2(i)) !select residue
write(10,'(A)')'color red'
endif
enddo
write(10,'(A)')'select all'
elseif(ip.eq.3.or.ip.eq.4)then !'aaa_atm', 'aaa_all_atm'
write(10,'(A)')'load inline'
write(10,'(A)')'select *A'
write(10,'(A)')'color blue'
write(10,'(A)')'select *B'
write(10,'(A)')'color red'
write(10,'(A)')'select all'
write(10,'(A)')'cartoon'
else !'aaa_all_atm_lig
write(10,'(A)')'load inline'
write(10,'(A)')'select all'
write(10,'(A)')'cartoon'
write(10,'(A)')'select *A'
write(10,'(A)')'color blue'
write(10,'(A)')'select *B'
write(10,'(A)')'color red'
write(10,'(A)')'select ligand'
write(10,'(A)')'wireframe 0.25'
write(10,'(A)')'select solvent'
write(10,'(A)')'spacefill 0.25'
write(10,'(A)')'select all'
endif
write(10,'(A)')'exit'
write(10,903)version
write(10,104)pdb(1),nseq1
write(10,105)pdb(2),nseq2,int(anseq),d0
write(10,106)n8_al,rmsd,TM2,seq_id
c------------output coordinates ----------->
do ic=1,2
if(ic.eq.1)then !na=1-5000
na=0 !for CONECT
else !na=5001-10000
na=5000 !for CONECT
endif
c write(*,*)'ip=',ip,'ic=',ic,nL(ic)
if(n_cut(ic).eq.0)then
n_cut(ic)=nL(ic) !there is no cut
endif
do i=1,nL(ic)
c---------- decide if we should output this line ------------>
mk=0
if(ip.eq.1)then !'aaa', aligned CA
if(i.le.n_cut(ic))then
if(Aatom(ic,i).eq.' CA')then
do j=1,n8_al
if(Aresi(ic,i).eq.mm(ic,m12(ic,j)))then
if(Ains(ic,i).eq.Cins(ic,m12(ic,j)))then
mk=1
goto 120 !each line output once
endif
endif
enddo
endif
endif
elseif(ip.eq.2)then !'aaa_all', all CA
if(i.le.n_cut(ic))then
if(Aatom(ic,i).eq.' CA')then
mk=1
endif
endif
elseif(ip.eq.3)then !'aaa_atm', all aligned atoms
if(i.le.n_cut(ic))then
do j=1,n8_al
if(Aresi(ic,i).eq.mm(ic,m12(ic,j)))then
if(Ains(ic,i).eq.Cins(ic,m12(ic,j)))then
mk=1
goto 120 !each line output once
endif
endif
enddo
endif
elseif(ip.eq.4)then !'aaa_all_atm', all atoms
if(i.le.n_cut(ic))then
mk=1
endif
elseif(ip.eq.5)then !'aaa_all_atm_lig', all atoms and ligands
mk=1
endif
120 continue
c^^^^^^^^^^
c write(*,*)ip,ic,i,'mk=',mk,n_cut(ic)
if(mk.eq.1)then !mk=1----------->
if(ic.eq.1)then
ax=t(1)+u(1,1)*xx(ic,i)+u(1,2)*yy(ic,i)+
& u(1,3)*zz(ic,i)
ay=t(2)+u(2,1)*xx(ic,i)+u(2,2)*yy(ic,i)+
& u(2,3)*zz(ic,i)
az=t(3)+u(3,1)*xx(ic,i)+u(3,2)*yy(ic,i)+
& u(3,3)*zz(ic,i)
else
ax=xx(ic,i)
ay=yy(ic,i)
az=zz(ic,i)
endif
c--------------output (x,y,z) --------------------------------->
na=na+1 !number of atoms for CONECT
if(ip.eq.1.or.ip.eq.2)then !need CONECT
write(10,1236)Agroup(ic,i),na,'',
& Aatom(ic,i),'',Ares(ic,i),'',Cch(ic),
& Aresi(ic,i),Ains(ic,i),'',ax,ay,az
else !all atoms
write(10,1236)Agroup(ic,i),Aatomi(ic,i),'',
& Aatom(ic,i),'',Ares(ic,i),'',Cch(ic),
& Aresi(ic,i),Ains(ic,i),'',ax,ay,az
endif
endif !<----mk=1
enddo !do i=1,nL(ic)
write(10,'(A)')'TER' !TER
if(ip.eq.1.or.ip.eq.2)then
if(ic.eq.1)then
do i=2,na
write(10,'(A6,I5,I5)')'CONECT',i-1,i !CONECT atom numbers
enddo
else
do i=5002,na
write(10,'(A6,I5,I5)')'CONECT',i-1,i !CONECT atom numbers
enddo
endif
endif
enddo !do ic=1,2
close(10)
1019 continue !ip=1,5
902 format('select ',I4,':A,',I4,':B')
903 format('REMARK TM-align Version ',A8,'')
104 format('REMARK Chain 1:',A10,' Size=',I4)
105 format('REMARK Chain 2:',A10,' Size=',I4,
& ' (TM-score is normalized by ',I4,', d0=',f6.2,')')
106 format('REMARK Aligned length=',I4,', RMSD=',f6.2,
& ', TM-score=',f7.5,', ID=',f5.3)
1236 format(A6,I5,a1,A4,a1,A3,a1,A1,I4,A1,a3,3F8.3)
*^^^^^^^^^^^^^^^^^^ output finished ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
c^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9999 END
......@@ -1573,23 +1679,16 @@ c 1->coil, 2->helix, 3->turn, 4->strand
common/zscore/zrms,n_al,rmsd_al
common/TM/TM,TMmax
common/init/invmap_i(nmax)
common/initial4/mm1(nmax),mm2(nmax)
common/initial4/mm(2,nmax)
logical contin
dimension ifr2(2,nmax,nmax),Lfr2(2,nmax),i_fr2(2)
dimension ifr(nmax)
dimension mm(2,nmax)
fra_min=4 !>=4,minimum fragment for search
fra_min1=fra_min-1 !cutoff for shift, save time
dcu0=4.25
do i=1,nseq1
mm(1,i)=mm1(i)
enddo
do i=1,nseq2
mm(2,i)=mm2(i)
enddo
GL_max=0
c do k=1,2 !k=1, fragment from protein1; k=2, fragment from protein2
......@@ -1766,7 +1865,6 @@ c^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
common/d0/d0,anseq
common/d0min/d0_min
common/init/invmap_i(nmax)
common/initial4/mm1(nmax),mm2(nmax)
common/sec/isec(nmax),jsec(nmax)
double precision r_1(3,nmax),r_2(3,nmax),w(nmax)
double precision u(3,3),t(3),rms
......@@ -2904,7 +3002,7 @@ ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
* because it is about 1.5 times faster than a complete N-W code
* and does not influence much the final structure alignment result.
* In 1/1000 case, it may result in asymmetry, i.e. A_to_B!=B_to_A
* For example, '1se9A.pdb' and '2edpA.pdb'
* For example, '1se9A.pdb' and '2edpA.pdb' (with score(i,j)=0 or 1 in SS)
********************************************************************
SUBROUTINE DP(NSEQ1,NSEQ2)
PARAMETER(nmax=5000)
......
This diff is collapsed.
tm-align (20190708+dfsg-1) unstable; urgency=medium
* New upstream version
* Packaged with routine-update script
* debhelper-compat 12
* Standards-Version: 4.4.0
-- Steffen Moeller <moeller@debian.org> Mon, 29 Jul 2019 23:00:47 +0200
tm-align (20170708+dfsg-2) unstable; urgency=medium
* Point Vcs fields to salsa.debian.org
......
......@@ -5,9 +5,9 @@ Uploaders: Steffen Moeller <moeller@debian.org>,
Andreas Tille <tille@debian.org>
Section: science
Priority: optional
Build-Depends: debhelper (>= 11~),
Build-Depends: debhelper-compat (= 12),
gfortran
Standards-Version: 4.2.1
Standards-Version: 4.4.0
Vcs-Browser: https://salsa.debian.org/med-team/tm-align
Vcs-Git: https://salsa.debian.org/med-team/tm-align.git
Homepage: http://zhanglab.ccmb.med.umich.edu/TM-align/
......
#!/usr/bin/make -f
# debian/rules for tm-align
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
export DH_VERBOSE=1
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
%:
......@@ -11,7 +7,7 @@ export DEB_BUILD_MAINT_OPTIONS = hardening=+all
override_dh_auto_build:
for src in `ls *.f` ; do \
gfortran -O3 -ffast-math $(CPPFLAGS) $(LDFLAGS) -lm -o `basename $${src} .f` $${src} ; \
gfortran -O3 -g -ffast-math $(CPPFLAGS) $(LDFLAGS) -lm -o `basename $${src} .f` $${src} ; \
done
override_dh_auto_clean:
......