
org.biojava.nbio.structure.domain.pdp.Cut Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of biojava-structure Show documentation
Show all versions of biojava-structure Show documentation
The protein structure modules of BioJava.
/*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.org/
*
*/
package org.biojava.nbio.structure.domain.pdp;
import org.biojava.nbio.structure.Atom;
import java.util.List;
public class Cut {
static boolean verbose = CutDomain.verbose;
public int cut( Atom[] ca, Domain dom, CutValues val, int[][] dist, PDPDistanceMatrix pdpMatrix) {
int nclose = pdpMatrix.getNclose();
int[] iclose = pdpMatrix.getIclose();
int[] jclose = pdpMatrix.getJclose();
int[] contacts = new int[PDPParameters.MAXLEN];
double[] max_contacts = new double [PDPParameters.MAXLEN];
double[] contact_density = new double[PDPParameters.MAXLEN];
double average_density,x,y;
int endsf,endst;
int k,l,nc;
int size1,size2;
int size1t,size2t;
int size11,size22,size0;
int contactsd;
int iseg,jseg,kseg;
int from,to,from1,to1,from2,to2,lseg;
int site_min = -1;
// AP add sort here..
//qsort(dom.segment,dom.nseg,sizeof(struct Segment),segcmp);
// what is going on with the segments??
List segments = dom.getSegments();
java.util.Collections.sort(segments, new SegmentComparator());
if ( verbose)
System.out.println(" --- Cut.cut " + dom + " ");
average_density = 0.0;
size0=0;
for(iseg=0;iseg4) contactsd+=(dist[i][j]);
}
}
}
from = dom.getSegmentAtPos(iseg).getFrom();
to = dom.getSegmentAtPos(iseg).getTo();
for(k=from;k4) contacts[k]+=(dist[i][j]);
}
}
/*
if(k==392) printf("[from,k]x]iseg,nseg[ = %d\n",contacts[k]);
*/
for(int i=from;i<=k;i++) {
for (int j=k+1;j<=to;j++)
if(Math.abs(i-j)>4) contacts[k]+=(dist[i][j]);
}
/*
if(k==392) printf("[from,k]x]k,to[ = %d\n",contacts[k]);
*/
for(int i=k+1;i<=to;i++) {
for(kseg=0;kseg4) contacts[k]+=(dist[j][i]);
}
}
/*
if(k==392) printf("]k,to]x]0,iseg[ = %d\n",contacts[k]);
*/
size1=Math.min(size11,size22);
size2=Math.max(size11,size22);
x=Math.min(PDPParameters.MAXSIZE,size1);
y=Math.min(PDPParameters.MAXSIZE,size2);
if(x>150&&y>1.5*x) y=1.5*x;
else if(y>2*x) y=2*x;
/*
*/
x=Math.min(Math.pow(x,1.3/3)+PDPParameters.RG,Math.pow(x,1.1/3)+Math.pow(PDPParameters.TD,1.3/3)+PDPParameters.RG);
y=Math.min(Math.pow(y,1.3/3)+PDPParameters.RG,Math.pow(y,1.1/3)+Math.pow(PDPParameters.TD,1.3/3)+PDPParameters.RG);
/* max_ contacts depend on the size of domains */
/* stella wanted comments at this point */
/*
max_contacts[k] = min(MAXCONT,x*y);
*/
max_contacts[k] = 10*x*y;
if(size1>150) max_contacts[k] = 9*x*y;
contact_density[k]=contacts[k]/max_contacts[k];
/*
if(contact_density[k]>2.5) contact_density[k]=2.5;
*/
/*
if(first_cut)
if(k==277 && !first_cut)
printf("k=%d s1=%d s2=%d x=%f y=%f mc=%d c=%d cd=%f\n",k,size1,size2,x,y,max_contacts[k],contacts[k],contact_density[k]);
*/
//if(verbose) System.out.println(String.format("%d %d %d %f %f %f %d %f",k,size1,size2,x,y,max_contacts[k],contacts[k],contact_density[k]));
/*
*/
if(from==0) endsf = PDPParameters.ENDSEND;
else endsf = PDPParameters.ENDS;
if(to==ca.length-1) endst = PDPParameters.ENDSEND;
else endst = PDPParameters.ENDS;
if((contact_density[k])from+endsf&&kfrom+endsf&&kfrom+endsf&&iclose[l]from+endsf&&jclose[l]2*x) y=2*x;
/*
*/
x=Math.min(Math.pow(x,1.3/3)+PDPParameters.RG,Math.pow(x,1.1/3)+Math.pow(PDPParameters.TD,1.3/3)+PDPParameters.RG);
y=Math.min(Math.pow(y,1.3/3)+PDPParameters.RG,Math.pow(y,1.1/3)+Math.pow(PDPParameters.TD,1.3/3)+PDPParameters.RG);
/*
max_contacts[nc] = min(MAXCONT,x*y);
*/
max_contacts[nc] = x*y*10;
if(size1>150) max_contacts[k] = 9*x*y;
contact_density[nc]=contacts[nc]/max_contacts[nc];
/*
if(first_cut)
*/
//if ( verbose)
// System.out.println("double cut" + l + " " + ca[iclose[l]].getGroup().getType() + " " + iclose[l] + " " + jclose[l] + " " + contacts[nc]+
// " " + max_contacts[nc] + " " + x+ " " + y + " " + size11 + " " + size22 + " " + contact_density[nc] + " " + contact_density[nc]/val.AD );
//if(verbose) System.out.println(String.format(" double cut: %d %s %d %d c=%d mc=%d x=%f y=%f s1=%d s2=%d cd=%f cd/ad=%f\n",l,ca[iclose[l]].getGroup().getType(),iclose[l],jclose[l],contacts[nc],max_contacts[nc],x,y,size11,size22,contact_density[nc],contact_density[nc]/val.AD));
if((contact_density[nc]/val.AD+PDPParameters.DBL)= PDPParameters.MAXSIZE)
nc = PDPParameters.MAXSIZE-1;
}
val.first_cut=false;
if(verbose)
System.out.println(String.format(" --- E ... at the end of cut: s_min %f CUTOFF %f site_min %d *site2 %d",val.s_min,PDPParameters.CUT_OFF_VALUE,site_min,val.site2));
if(val.s_min> PDPParameters.CUT_OFF_VALUE) return -1;
return(site_min);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy