+
+ subroutine read_constr_homology
+
+ include 'DIMENSIONS'
+#ifdef MPI
+ include 'mpif.h'
+#endif
+ include 'COMMON.SETUP'
+ include 'COMMON.CONTROL'
+ include 'COMMON.CHAIN'
+ include 'COMMON.IOUNITS'
+ include 'COMMON.MD'
+ include 'COMMON.GEO'
+ include 'COMMON.INTERACT'
+ double precision odl_temp,sigma_odl_temp
+ common /przechowalnia/ odl_temp(maxres,maxres,max_template),
+ & sigma_odl_temp(maxres,maxres,max_template)
+ character*2 kic2
+ character*24 model_ki_dist, model_ki_angle
+ character*500 controlcard
+ character*3200 controlcard1
+ integer ki, i, j, k, l
+ logical lprn /.true./
+
+ call card_concat(controlcard)
+ call readi(controlcard,"HOMOL_NSET",homol_nset,1)
+ if (homol_nset.gt.1)then
+ call card_concat(controlcard)
+ read(controlcard,*) (waga_dist(i),i=1,homol_nset)
+ call card_concat(controlcard)
+ read(controlcard,*) (waga_angle(i),i=1,homol_nset)
+ write(iout,*) "iset distance_weight angle_weight"
+ do i=1,homol_nset
+ write(iout,*) i,waga_dist(i),waga_angle(i)
+ enddo
+ else
+ iset=1
+ call reada(controlcard,"HOMOL_DIST",waga_dist(1),1.0d0)
+ call reada(controlcard,"HOMOL_ANGLE",waga_angle(1),1.0d0)
+ endif
+
+ write (iout,*) "nnt",nnt," nct",nct
+ call flush(iout)
+ lim_odl=0
+ lim_dih=0
+ do i=1,nres
+ do j=i+2,nres
+ do ki=1,constr_homology
+ sigma_odl_temp(i,j,ki)=0.0d0
+ odl_temp(i,j,ki)=0.0d0
+ enddo
+ enddo
+ enddo
+ do i=1,nres-3
+ do ki=1,constr_homology
+ dih(ki,i)=0.0d0
+ sigma_dih(ki,i)=0.0d0
+ enddo
+ enddo
+ do ki=1,constr_homology
+ write(kic2,'(i2)') ki
+ if (ki.le.9) kic2="0"//kic2(2:2)
+
+ model_ki_dist="model"//kic2//".dist"
+ model_ki_angle="model"//kic2//".angle"
+ open (ientin,file=model_ki_dist,status='old')
+ do irec=1,maxdim !petla do czytania wiezow na odleglosc
+ read (ientin,*,end=1401) i, j, odl_temp(i+nnt-1,j+nnt-1,ki),
+ & sigma_odl_temp(i+nnt-1,j+nnt-1,ki)
+ odl_temp(j+nnt-1,i+nnt-1,ki)=odl_temp(i+nnt-1,j+nnt-1,ki)
+ sigma_odl_temp(j+nnt-1,i+nnt-1,ki)=
+ & sigma_odl_temp(i+nnt-1,j+nnt-1,ki)
+ enddo
+ 1401 continue
+ close (ientin)
+ open (ientin,file=model_ki_angle,status='old')
+ do irec=1,maxres-3 !petla do czytania wiezow na katy torsyjne
+ read (ientin,*,end=1402) i, j, k,l,dih(ki,i+nnt-1),
+ & sigma_dih(ki,i+nnt-1)
+ if (i+nnt-1.gt.lim_dih) lim_dih=i+nnt-1
+ sigma_dih(ki,i+nnt-1)=1.0d0/sigma_dih(ki,i+nnt-1)**2
+ enddo
+ 1402 continue
+ close (ientin)
+ enddo
+ ii=0
+ write (iout,*) "nnt",nnt," nct",nct
+ do i=nnt,nct-2
+ do j=i+2,nct
+ ki=1
+c write (iout,*) "i",i," j",j," constr_homology",constr_homology
+ do while (ki.le.constr_homology .and.
+ & sigma_odl_temp(i,j,ki).le.0.0d0)
+c write (iout,*) "ki",ki," sigma_odl",sigma_odl_temp(i,j,ki)
+ ki=ki+1
+ enddo
+c write (iout,*) "ki",ki
+ if (ki.gt.constr_homology) cycle
+ ii=ii+1
+ ires_homo(ii)=i
+ jres_homo(ii)=j
+ do ki=1,constr_homology
+ odl(ki,ii)=odl_temp(i,j,ki)
+ sigma_odl(ki,ii)=1.0d0/sigma_odl_temp(i,j,ki)**2
+ enddo
+ enddo
+ enddo
+ lim_odl=ii
+ if (constr_homology.gt.0) call homology_partition
+c Print restraints
+ if (.not.lprn) return
+ write (iout,*) "Distance restraints from templates"
+ do ii=1,lim_odl
+ write(iout,'(3i5,10(2f8.2,4x))') ii,ires_homo(ii),jres_homo(ii),
+ & (odl(ki,ii),1.0d0/dsqrt(sigma_odl(ki,ii)),ki=1,constr_homology)
+ enddo
+ write (iout,*) "Dihedral angle restraints from templates"
+ do i=nnt,lim_dih
+ write (iout,'(i5,10(2f8.2,4x))') i,(rad2deg*dih(ki,i),
+ & rad2deg/dsqrt(sigma_dih(ki,i)),ki=1,constr_homology)
+ enddo
+c write(iout,*) "TEST CZYTANIA1",odl(1,2,1),odl(1,3,1),odl(1,4,1)
+c write(iout,*) "TEST CZYTANIA2",dih(1,1),dih(2,1),dih(3,1)
+
+
+ return
+ end
+c----------------------------------------------------------------------
+