package operonClustering;
import genomeObjects.GenomicElementAndQueryMatch;
import java.util.LinkedList;
public class TotalSize implements OperonDissimilarityMeasure{
@Override
public double computeDissimilarity(
LinkedList<GenomicElementAndQueryMatch> CS1,
LinkedList<GenomicElementAndQueryMatch> CS2) {
//Calculate the size of each context set, earliest to latest
//assume that the elements are not in order.
int SizeOf1; int StartOf1 = 99999999; int StopOf1 = -1;
int SizeOf2; int StartOf2 = 99999999; int StopOf2 = -1;
//determine earliest and latest
for (int i = 0; i <CS1.size(); i++){
//earliest start
if (CS1.get(i).getE().getStart() < StartOf1){
StartOf1 = CS1.get(i).getE().getStart();
}
//latest stop
if (CS1.get(i).getE().getStop() > StopOf1){
StopOf1 = CS1.get(i).getE().getStop();
}
}
//calculate Size
SizeOf1 = StopOf1 - StartOf1;
//determine earliest and latest
for (int i = 0; i <CS2.size(); i++){
//earliest start
if (CS2.get(i).getE().getStart() < StartOf2){
StartOf2 = CS2.get(i).getE().getStart();
}
//latest stop
if (CS2.get(i).getE().getStop() > StopOf2){
StopOf2 = CS2.get(i).getE().getStop();
}
}
//calculate Size
SizeOf2 = StopOf2 - StartOf2;
//compute difference and average
double average = ((double) (SizeOf1 + SizeOf2))/2.0;
double difference = Math.abs((double)SizeOf1 - (double)SizeOf2);
//return difference/average
return difference/average;
}
}