/*
* #%L
* gitools-core
* %%
* Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
package org.gitools.analysis.overlapping;
import org.gitools.matrix.model.matrix.element.LayerDef;
public class OverlappingResult {
public static final String RESULTS_GROUP = "Main Results";
private int columnCount;
private int rowCount;
private int bothCount;
private double columnOnlyProp;
private double rowOnlyProp;
private double columnIntersectionProp;
private double rowIntersectionProp;
private double jaccardIndex;
private double maxIntersectionProp;
public OverlappingResult() {
}
public OverlappingResult(int rowCount, int columnCount, int bothCount) {
this.columnCount = columnCount;
this.rowCount = rowCount;
this.bothCount = bothCount;
calculateProportions();
}
@LayerDef(id = "column-count",
name = "Count in columns",
description = "Number of positive events in column condintion",
groups = {RESULTS_GROUP, LayerDef.ALL_DATA_GROUP})
public int getColumnCount() {
return columnCount;
}
public void setColumnCount(int columnPositiveCount) {
this.columnCount = columnPositiveCount;
}
@LayerDef(id = "row-count",
name = "Count in rows",
description = "Number of positive events in row condintion",
groups = {RESULTS_GROUP, LayerDef.ALL_DATA_GROUP})
public int getRowCount() {
return rowCount;
}
public void setRowCount(int rowPositiveCount) {
this.rowCount = rowPositiveCount;
}
@LayerDef(id = "both-count",
name = "Count in both",
description = "Number of positive events in both condintions",
groups = {RESULTS_GROUP, LayerDef.ALL_DATA_GROUP})
public int getBothCount() {
return bothCount;
}
public void setBothCount(int bothPositiveCount) {
this.bothCount = bothPositiveCount;
}
@LayerDef(id = "column-only-prop",
name = "Column only proportion",
description = "Proportion of events only in column condition out of the union",
groups = {LayerDef.ALL_DATA_GROUP})
public double getColumnOnlyProp() {
return columnOnlyProp;
}
public void setColumnOnlyProp(double columnOnlyProp) {
this.columnOnlyProp = columnOnlyProp;
}
@LayerDef(id = "row-only-prop",
name = "Row only proportion",
description = "Proportion of events only in row condition out of the union",
groups = {LayerDef.ALL_DATA_GROUP})
public double getRowOnlyProp() {
return rowOnlyProp;
}
public void setRowOnlyProp(double rowOnlyProp) {
this.rowOnlyProp = rowOnlyProp;
}
@LayerDef(id = "column-intersection-prop", name = "Column intersection proportion",
description = "Proportion of shared events in column condition",
groups = {LayerDef.ALL_DATA_GROUP})
public double getColumnIntersectionProp() {
return columnIntersectionProp;
}
public void setColumnIntersectionProp(double columnIntersectionProp) {
this.columnIntersectionProp = columnIntersectionProp;
}
@LayerDef(id = "row-intersection-prop", name = "Row intersection proportion",
description = "Proportion of shared events in row condition",
groups = {LayerDef.ALL_DATA_GROUP})
public double getRowIntersectionProp() {
return rowIntersectionProp;
}
public void setRowIntersectionProp(double rowIntersectionProp) {
this.rowIntersectionProp = rowIntersectionProp;
}
@LayerDef(id = "max-intersection-prop", name = "Maximum intersection proportion",
description = "Maximum proportion of shared events",
groups = {RESULTS_GROUP, LayerDef.ALL_DATA_GROUP})
public double getMaxIntersectionProp() {
return maxIntersectionProp;
}
public void setMaxIntersectionProp(double maxIntersectionProp) {
this.maxIntersectionProp = maxIntersectionProp;
}
@LayerDef(id = "jaccard-index", name = "Jaccard index",
description = "Proportion of shared events in both conditions",
groups = {RESULTS_GROUP, LayerDef.ALL_DATA_GROUP})
public double getJaccardIndex() {
return jaccardIndex;
}
/**
* @noinspection UnusedDeclaration
*/
public void setJaccardIndex(double jaccardIndex) {
this.jaccardIndex = jaccardIndex;
}
final void calculateProportions() {
double union = columnCount + rowCount - bothCount;
double minCount = (double) Math.min(columnCount, rowCount);
columnOnlyProp = columnCount / union;
rowOnlyProp = rowCount / union;
columnIntersectionProp = columnCount != 0 ? bothCount / (double) columnCount : 0.0;
rowIntersectionProp = rowCount != 0 ? bothCount / (double) rowCount : 0.0;
maxIntersectionProp = minCount != 0 ? bothCount / minCount : 0.0;
jaccardIndex = union != 0 ? bothCount / union : 0.0;
}
}