subroutine proc_cont(iprot,nn,*) implicit none include 'DIMENSIONS' include 'DIMENSIONS.ZSCOPT' include 'DIMENSIONS.COMPAR' include 'COMMON.IOUNITS' include 'COMMON.TIME1' include 'COMMON.SBRIDGE' include 'COMMON.COMPAR' include 'COMMON.CHAIN' include 'COMMON.HEADER' include 'COMMON.CONTACTS1' include 'COMMON.PEPTCONT' include 'COMMON.GEO' include 'COMMON.CLASSES' include 'COMMON.PROTNAME' include 'COMMON.NAMES' include 'COMMON.INTERACT' integer i,j,k,ib,iprot,nn,ind,icant,length_frag,ndigit,len_cut, & it1,it2,if1,if2 integer ilen external ilen character*3 strstr(0:4) /'und','hel','har','std','stp'/ #ifdef DEBUG write (iout,*) "proc_cont: nlevel",nlevel(iprot) #endif if (nlevel(iprot).lt.0) then #ifdef DEBUG write (iout,*) "call define_fragments" #endif call define_fragments(iprot) else #ifdef DEBUG write (iout,*) "call secondary2" #endif call secondary2(.true.,print_secondary,ncont_pept_ref(iprot), & icont_pept_ref(1,1,iprot),isec_ref(1,iprot),iprot) endif do ib=1,nclass(iprot)-1 if (print_contact) then write (iout,'(a,i2)') "Structural level",ib+1 write (iout,'(80(1h=))') write (iout,*) "Electrostatic contacts" endif call contacts_between_fragments(print_contact,0, & ncont_pept_ref(iprot), & icont_pept_ref(1,1,iprot),ncont_frag_ref(1,ib,iprot), & icont_frag_ref(1,1,1,ib,iprot),mask_p(1,ib,iprot),ib,iprot) if (print_contact) then write (iout,'(80(1h=))') write (iout,*) "Side chain contacts" endif call contacts_between_fragments(print_contact,0, & ncont_ref(iprot), & icont_ref(1,1,iprot),nsccont_frag_ref(1,ib,iprot), & isccont_frag_ref(1,1,1,ib,iprot),mask_sc(1,ib,iprot),ib,iprot) enddo if (nlevel(iprot).lt.0) then #ifdef DEBUG write(iout,*) "rmscut_base_up", & (rmscut_base_up(ib),ib=1,nclass(iprot)-1), & " rmscut_base_low",(rmscut_base_low(ib),ib=1,nclass(iprot)-1), & " rmsup_lim",(rmsup_lim(ib),ib=1,nclass(iprot)-1) #endif do ib=1,nclass(iprot)-1 do i=1,nfrag(1,iprot) ind=icant(i,i) len_cut=1000 if (istruct(i,ib,iprot).le.1) then len_cut=max0(len_frag(i,1,ib,iprot)*4/5,3) else if (istruct(i,ib,iprot).eq.2.or.istruct(i,ib,iprot).eq.4) & then len_cut=max0(len_frag(i,1,ib,iprot)*2/5,3) endif #ifdef DEBUG write (iout,*) "i",i," istruct",istruct(i,ib,iprot), & " ncont_frag",ncont_frag_ref(ind,ib,iprot)," len_cut", & len_cut, & " icont_single",icont_single(ib)," iloc_single", & iloc_single(ib)," isig_match_single",isig_match_single(ib) #endif iloc(i,ib,iprot)=iloc_single(ib) if (istruct(i,ib,iprot).eq.1) & isig_match(i,ib,iprot)=isig_match_single(ib) #ifdef DEBUG if (iloc(i,ib,iprot).gt.0) write (iout,*) & "Local structure used to compare structure of fragment",i, & " of protein",iprot," to native." #endif if (istruct(i,ib,iprot).ne.3 .and. istruct(i,ib,iprot).ne.0 & .and. icont_single(ib).gt.0 .and. icontsc_single(ib).eq.0 & .and. ncont_frag_ref(ind,ib,iprot).ge.len_cut .or. & icontp_single(ib).gt.0 .and. ncont_frag_ref(ind,ib,iprot) & .gt.0) then #ifdef DEBUG write (iout,*) "Electrostatic contacts used to compare", & " structure of fragment",i," of protein",iprot," to native." #endif ielecont(i,1,ib,iprot)=1 isccont(i,1,ib,iprot)=0 else if (icont_single(ib).gt.0 .and. & nsccont_frag_ref(ind,ib,iprot).ge.len_cut .or. & icontsc_single(ib).gt.0 .and. & nsccont_frag_ref(ind,ib,iprot).gt.0) then #ifdef DEBUG write (iout,*) "Side chain contacts used to compare", & " structure of fragment",i," of protein",iprot," to native." #endif isccont(i,1,ib,iprot)=1 ielecont(i,1,ib,iprot)=0 else #ifdef DEBUG write (iout,*) "Contacts not used to compare", & " structure of fragment",i," of protein",iprot," to native." #endif ielecont(i,1,ib,iprot)=0 isccont(i,1,ib,iprot)=0 nc_req_setf(i,1,ib,iprot)=0 endif if (iqwol_single(ib).gt.0 .or. isccont(i,1,ib,iprot).eq.0 & .and. ielecont(i,1,ib,iprot).eq.0) then #ifdef DEBUG write (iout,*) "Q used to compare", & " structure of fragment",i," of protein",iprot," to native." #endif iqwol(i,1,ib,iprot)=1 qcutfrag(i,1,ib,iprot)=qcut_single(ib) write (iout,*) "qcut_single",qcut_single(ib), & "qcutfrag",qcutfrag(i,1,ib,iprot) else #ifdef DEBUG write (iout,*) "Q not used to compare", & " structure of fragment",i," of protein",iprot," to native." #endif iqwol(i,1,ib,iprot)=0 endif if (irms_single(ib).gt.0 .or. isccont(i,1,ib,iprot).eq.0 & .and. ielecont(i,1,ib,iprot).eq.0 .and. & iqwol_single(ib).eq.0) then #ifdef DEBUG write (iout,*) "RMSD used to compare", & " structure of fragment",i," of protein",iprot," to native." #endif irms(i,1,ib,iprot)=1 else #ifdef DEBUG write (iout,*) "RMSD not used to compare", & " structure of fragment",i," of protein",iprot," to native." #endif irms(i,1,ib,iprot)=0 endif enddo enddo endif if (nlevel(iprot).lt.-1) then call define_pairs(iprot) nlevel(iprot) = -nlevel(iprot) if (nlevel(iprot).gt.3) nlevel(iprot)=3 if (nlevel(iprot).eq.3) then nfrag(3,iprot)=1 do ib=1,nclass(iprot)-1 npiece(1,3,ib,iprot)=nfrag(1,iprot) do i=1,nfrag(1,iprot) ipiece(i,1,3,ib,iprot)=i enddo ielecont(1,3,ib,iprot)=0 isccont(1,3,ib,iprot)=0 irms(1,3,ib,iprot)=1 n_shift(1,1,3,ib,iprot)=0 n_shift(2,1,3,ib,iprot)=0 enddo endif else if (nlevel(iprot).eq.-1) then nlevel(iprot)=1 endif isnfrag(1,iprot)=0 do i=1,nlevel(iprot) isnfrag(i+1,iprot)=isnfrag(i,iprot)+nfrag(i,iprot) enddo #ifdef DEBUG write (iout,*) "nfrag",(nfrag(i,iprot),i=1,nlevel(iprot)) write (iout,*) "isnfrag",(isnfrag(i,iprot),i=1,nlevel(iprot)+1) #endif ndigit=3*nfrag(1,iprot) do i=2,nlevel(iprot) ndigit=ndigit+2*nfrag(i,iprot) enddo #ifdef DEBUG write (iout,*) "ndigit",ndigit #endif if (ndigit.ne.nn) then write (iout,*) "Error - length of the class mask of protein", & iprot," is ",nn," but",ndigit, & " fields found in the class template." return1 endif if (.not.binary(iprot) .and. ndigit.gt.30) then write (iout,*) "Highest class too large for protein",iprot, & " ; switching to binary representation." binary(iprot)=.true. endif write (iout,'(/80(1h=)/a,i3,1h(,1x,a,2h)./80(1h-))') & "Specification of fragments and cut-off criteria of protein", & iprot,protname(iprot)(:ilen(protname(iprot))) write (iout,"(a)") "Secondary-structure codes are as follows:" write (iout,'(a)') & "und - undefined; hel - helix; har - beta-hairpin;" write (iout,'(a)') "std - single strand; stp - pair of strands." do ib=1,nclass(iprot)-1 write (iout,'(80(1h-)/a,i3)') "Structural level",ib do i=1,nlevel(iprot) do j=1,nfrag(i,iprot) length_frag = 0 if (i.eq.1) then do k=1,npiece(j,i,ib,iprot) length_frag=length_frag+ifrag(2,k,j,ib,iprot) & -ifrag(1,k,j,ib,iprot)+1 enddo else do k=1,npiece(j,i,ib,iprot) length_frag=length_frag & +len_frag(ipiece(k,j,i,ib,iprot),1,ib,iprot) enddo endif len_frag(j,i,ib,iprot)=length_frag rmscutfrag(1,j,i,ib,iprot)=rmscut_base_up(ib)*length_frag rmscutfrag(2,j,i,ib,iprot)=rmscut_base_low(ib)*length_frag if (rmscutfrag(1,j,i,ib,iprot).lt.rmsup_lim(ib)) & rmscutfrag(1,j,i,ib,iprot)=rmsup_lim(ib) if (rmscutfrag(1,j,i,ib,iprot).gt.rmsupup_lim(ib)) & rmscutfrag(1,j,i,ib,iprot)=rmsupup_lim(ib) enddo enddo write (iout,'(80(1h-)/a,i3,a,i3/)') & "Level",1," number of fragments:",nfrag(1,iprot) write (iout,'(2a5,6a4,a5,a7,a7,a12,2a5,a5,a4,a4,2x,a)') & 'frag','len','loc','sig','eC','scC','Q','rms','qcut','rmscut', & 'shifts','angcut','frS','frC','nC','str', & 'np','specification' do j=1,nfrag(1,iprot) write (iout,'(2i5,6i4,1x,3f4.1,2i3,2f6.1,2f5.2,i5,a4,i4,$)') j, & len_frag(j,1,ib,iprot),iloc(j,ib,iprot), & isig_match(j,ib,iprot),ielecont(j,1,ib,iprot), & isccont(j,1,ib,iprot),iqwol(j,1,ib,iprot),irms(j,1,ib,iprot), & qcutfrag(j,1,ib,iprot),rmscutfrag(1,j,1,ib,iprot), & rmscutfrag(2,j,1,ib,iprot),n_shift(1,j,1,ib,iprot), & n_shift(2,j,1,ib,iprot),ang_cut(j,ib,iprot)*rad2deg, & ang_cut1(j,ib,iprot)*rad2deg,frac_min(j,ib,iprot), & nc_fragm(j,1,ib,iprot),nc_req_setf(j,1,ib,iprot), & strstr(istruct(j,ib,iprot)),npiece(j,1,ib,iprot) do k=1,npiece(j,1,ib,iprot) if1=ifrag(1,k,j,ib,iprot) it1=itype(if1) if2=ifrag(2,k,j,ib,iprot) it2=itype(if2) write (iout,'(2x,a1,i3,1h-,a1,i3,$)') onelet(it1),if1, & onelet(it2),if2 enddo write (iout,*) enddo do i=2,nlevel(iprot) write (iout,'(80(1h-)/a,i3,a,i3/)') & "Level",i," number of fragments:",nfrag(i,iprot) write (iout,'(2a5,4a4,a5,a7,a7,2a5,a4,2x,a)') & 'frag','len','eC','scC','Q','rms','Qcut','rmscut','shifts', & 'frC','nC','np','specification' do j=1,nfrag(i,iprot) write (iout,'(2i5,4i4,1x,3f4.1,2i3,f5.2,i5,i4,$)') & j,len_frag(j,i,ib,iprot),ielecont(j,i,ib,iprot), & isccont(j,i,ib,iprot),iqwol(j,i,ib,iprot), & irms(j,i,ib,iprot),qcutfrag(j,i,ib,iprot), & rmscutfrag(1,j,i,ib,iprot),rmscutfrag(2,j,i,ib,iprot), & n_shift(1,j,i,ib,iprot),n_shift(2,j,i,ib,iprot), & nc_fragm(j,i,ib,iprot),nc_req_setf(j,i,ib,iprot), & npiece(j,i,ib,iprot) do k=1,npiece(j,i,ib,iprot) write (iout,'(i3,$)') ipiece(k,j,i,ib,iprot) enddo write (iout,*) enddo enddo enddo write (iout,'(80(1h=))') return end