Skip to content

Commit 3fb61ee

Browse files
committed
Allow user to choose how hypergometric 'n' is calculated. refs #317
1 parent 3ae048c commit 3fb61ee

File tree

2 files changed

+67
-4
lines changed

2 files changed

+67
-4
lines changed

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/task/postanalysis/FilterMetric.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ class Hypergeom extends BaseFilterMetric {
158158

159159
private final int u;
160160

161+
private Set<Integer> universeGenes = null;
162+
161163
public Hypergeom(double filter, int u) {
162164
super(PostAnalysisFilterType.HYPERGEOM, filter);
163165
this.u = u;
@@ -171,11 +173,20 @@ public double moreSimilar(double x, double y) {
171173
return Math.min(x, y);
172174
}
173175

176+
public void setUniverseFilter(Set<Integer> universeGenes) {
177+
this.universeGenes = universeGenes;
178+
}
179+
174180
public double computeValue(Set<Integer> geneSet, Set<Integer> sigSet, @Nullable SignatureGenesetSimilarity similarity) throws ArithmeticException {
175181
Set<Integer> intersection = Sets.intersection(geneSet, sigSet);
176182
// Calculate Hypergeometric pValue for Overlap
177183
// u: number of total genes (size of population / total number of balls)
178-
int n = sigSet.size(); //size of signature geneset (sample size / number of extracted balls)
184+
int n; //size of signature geneset (sample size / number of extracted balls)
185+
if(universeGenes == null)
186+
n = sigSet.size();
187+
else
188+
n = Sets.intersection(sigSet, universeGenes).size();
189+
179190
int m = geneSet.size(); //size of enrichment geneset (success Items / number of white balls in population)
180191
int k = intersection.size(); //size of intersection (successes /number of extracted white balls)
181192

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/postanalysis/PAWeightPanel.java

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import java.awt.BorderLayout;
1010
import java.awt.CardLayout;
11+
import java.awt.GridBagConstraints;
1112
import java.awt.GridBagLayout;
1213
import java.awt.event.ActionListener;
1314
import java.text.DecimalFormat;
@@ -79,6 +80,8 @@ public class PAWeightPanel extends JPanel {
7980
private JRadioButton userDefinedRadioButton;
8081
private JFormattedTextField universeSelectionTextField;
8182

83+
private JRadioButton hyperIntersectButton;
84+
8285
private JLabel iconLabel;
8386
private JLabel warnLabel;
8487

@@ -133,7 +136,7 @@ private void createContents() {
133136
.addComponent(title)
134137
.addGroup(layout.createSequentialGroup()
135138
.addComponent(selectPanel, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
136-
.addComponent(cardPanel, 300, 300, 300)
139+
.addComponent(cardPanel, 450, 450, 450)
137140
)
138141
);
139142
layout.setVerticalGroup(layout.createSequentialGroup()
@@ -327,6 +330,50 @@ else if(filterType.isMannWhitney())
327330

328331

329332
private JPanel createHypergeomCard() {
333+
JPanel universePanel = createHypergeomUniversePanel();
334+
JPanel samplePanel = createHypergeomSamplePanel();
335+
336+
JPanel panel = new JPanel(new GridBagLayout());
337+
panel.add(universePanel, GBCFactory.grid(0,0).weightx(.5).fill(GridBagConstraints.BOTH).get());
338+
panel.add(samplePanel, GBCFactory.grid(1,0).weightx(.5).fill(GridBagConstraints.BOTH).get());
339+
panel.setOpaque(false);
340+
return panel;
341+
}
342+
343+
private JPanel createHypergeomSamplePanel() {
344+
hyperIntersectButton = new JRadioButton("Intersection");
345+
JRadioButton hyperSigButton = new JRadioButton("Signature gene set");
346+
makeSmall(hyperSigButton, hyperIntersectButton);
347+
348+
ButtonGroup buttonGroup = new ButtonGroup();
349+
buttonGroup.add(hyperSigButton);
350+
buttonGroup.add(hyperIntersectButton);
351+
hyperIntersectButton.setSelected(true);
352+
353+
JPanel panel = new JPanel();
354+
panel.setBorder(LookAndFeelUtil.createTitledBorder("Genes in sample (n)"));
355+
356+
final GroupLayout layout = new GroupLayout(panel);
357+
panel.setLayout(layout);
358+
layout.setAutoCreateContainerGaps(true);
359+
layout.setAutoCreateGaps(!LookAndFeelUtil.isAquaLAF());
360+
361+
layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING, true)
362+
.addComponent(hyperIntersectButton)
363+
.addComponent(hyperSigButton)
364+
);
365+
layout.setVerticalGroup(layout.createSequentialGroup()
366+
.addComponent(hyperIntersectButton, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE)
367+
.addComponent(hyperSigButton, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE)
368+
);
369+
370+
if (LookAndFeelUtil.isAquaLAF())
371+
panel.setOpaque(false);
372+
373+
return panel;
374+
}
375+
376+
private JPanel createHypergeomUniversePanel() {
330377
ActionListener universeSelectActionListener = e -> {
331378
boolean enable = e.getActionCommand().equals("User Defined");
332379
universeSelectionTextField.setEnabled(enable);
@@ -382,7 +429,7 @@ private JPanel createHypergeomCard() {
382429
makeSmall(gmtRadioButton, expressionSetRadioButton, intersectionRadioButton, userDefinedRadioButton, universeSelectionTextField);
383430

384431
JPanel panel = new JPanel();
385-
panel.setBorder(LookAndFeelUtil.createTitledBorder("Advanced Hypergeometric Universe"));
432+
panel.setBorder(LookAndFeelUtil.createTitledBorder("Hypergeometric Universe"));
386433

387434
final GroupLayout layout = new GroupLayout(panel);
388435
panel.setLayout(layout);
@@ -610,7 +657,12 @@ public FilterMetric createFilterMetric(String dataset) {
610657
case HYPERGEOM:
611658
UniverseType universeType = getUniverseType();
612659
int universe = universeType.getGeneUniverse(map, dataset, getUserDefinedUniverseSize());
613-
return new FilterMetric.Hypergeom(value, universe);
660+
FilterMetric.Hypergeom hyperFilterMetric = new FilterMetric.Hypergeom(value, universe);
661+
if(hyperIntersectButton.isSelected()) {
662+
Set<Integer> universeGenes = map.getAllEnrichmentGenes();
663+
hyperFilterMetric.setUniverseFilter(universeGenes);
664+
}
665+
return hyperFilterMetric;
614666
case MANN_WHIT_TWO_SIDED:
615667
case MANN_WHIT_GREATER:
616668
case MANN_WHIT_LESS:

0 commit comments

Comments
 (0)