10
10
import java .util .Iterator ;
11
11
import java .util .List ;
12
12
import java .util .Map ;
13
+ import java .util .Objects ;
13
14
import java .util .Optional ;
14
15
import java .util .Properties ;
15
16
import java .util .Set ;
18
19
import org .baderlab .csplugins .enrichmentmap .AfterInjection ;
19
20
import org .baderlab .csplugins .enrichmentmap .PropertyManager ;
20
21
import org .baderlab .csplugins .enrichmentmap .actions .OpenPathwayCommonsTask ;
22
+ import org .baderlab .csplugins .enrichmentmap .model .AbstractDataSet ;
21
23
import org .baderlab .csplugins .enrichmentmap .model .AssociatedApp ;
22
24
import org .baderlab .csplugins .enrichmentmap .model .Compress ;
23
25
import org .baderlab .csplugins .enrichmentmap .model .EMDataSet ;
26
28
import org .baderlab .csplugins .enrichmentmap .model .EnrichmentMapManager ;
27
29
import org .baderlab .csplugins .enrichmentmap .model .EnrichmentResult ;
28
30
import org .baderlab .csplugins .enrichmentmap .model .GSEAResult ;
31
+ import org .baderlab .csplugins .enrichmentmap .model .PostAnalysisParameters ;
29
32
import org .baderlab .csplugins .enrichmentmap .model .Ranking ;
30
33
import org .baderlab .csplugins .enrichmentmap .model .Transform ;
31
34
import org .baderlab .csplugins .enrichmentmap .style .EMStyleBuilder ;
35
+ import org .baderlab .csplugins .enrichmentmap .task .ApplyEMStyleTask ;
32
36
import org .baderlab .csplugins .enrichmentmap .task .genemania .GeneManiaMediator ;
33
37
import org .baderlab .csplugins .enrichmentmap .task .string .StringAppMediator ;
34
38
import org .baderlab .csplugins .enrichmentmap .util .CoalesceTimer ;
@@ -238,48 +242,6 @@ private void heatMapParamsChanged(HeatMapParams params) {
238
242
}
239
243
240
244
241
- private Collection <EMDataSet > getEnabledDataSets (
242
- CyNetworkView networkView , EnrichmentMap map ,
243
- List <CyNode > selectedNodes , List <CyEdge > selectedEdges
244
- ) {
245
- // must maintain the order returned by map.getDataSetList() (issue #390)
246
- List <EMDataSet > dataSets = new ArrayList <>(map .getDataSetList ());
247
-
248
- // Remove Data Sets that are not selected in the control panel
249
- if (propertyManager .isTrue (PropertyManager .HEATMAP_DATASET_SYNC )) {
250
- ViewParams params = controlPanelMediatorProvider .get ().getAllViewParams ().get (networkView .getSUID ());
251
- if (params != null ) {
252
- Set <String > filter = params .getFilteredOutDataSets ();
253
- dataSets .removeIf (ds -> filter .contains (ds .getName ()));
254
- }
255
- }
256
-
257
- // Remove Data Sets that are not part of the selected nodes/edges
258
- if (propertyManager .isTrue (PropertyManager .HEATMAP_SELECT_SYNC )) {
259
- boolean distinctEdges = map .getParams ().getCreateDistinctEdges ();
260
-
261
- Iterator <EMDataSet > iter = dataSets .iterator ();
262
- while (iter .hasNext ()) {
263
- EMDataSet ds = iter .next ();
264
-
265
- boolean remove = true ;
266
- if (ds .containsAnyNode (selectedNodes ))
267
- remove = false ;
268
- else if (!distinctEdges && !selectedEdges .isEmpty ())
269
- remove = false ;
270
- else if (distinctEdges && ds .containsAnyEdge (selectedEdges ))
271
- remove = false ;
272
-
273
- if (remove ) {
274
- iter .remove ();
275
- }
276
- }
277
- }
278
-
279
- return dataSets ;
280
- }
281
-
282
-
283
245
private void updateHeatMap (CyNetworkView networkView ) {
284
246
if (!isHeatMapPanelRegistered ())
285
247
return ;
@@ -298,14 +260,23 @@ private void updateHeatMap(CyNetworkView networkView) {
298
260
final Set <String > inter ;
299
261
final Collection <EMDataSet > dataSets ;
300
262
301
- if (emManager .isEnrichmentMap (networkView )) {
302
- String prefix = map .getParams ().getAttributePrefix ();
263
+ if (emManager .isEnrichmentMap (networkView )) {
264
+ // Need to add nodes that are adjacent to signature edges, because signature edges are not in any of the normal data sets.
265
+ Set <CyNode > allNodesToUse = new HashSet <>(selectedNodes );
266
+ List <CyNode > extraNodes = getNodesAdjacentToSignatureEdges (network , selectedEdges );
267
+ if (extraNodes != null ) {
268
+ allNodesToUse .addAll (extraNodes );
269
+ }
303
270
304
- dataSets = getEnabledDataSets (networkView , map , selectedNodes , selectedEdges );
305
- Map <String ,Set <Integer >> geneSetToGenes = map .unionGeneSetsOfInterest (dataSets );
271
+ Collection < AbstractDataSet > dataSetsToUse = getEnabledDataSets (networkView , map , allNodesToUse , selectedEdges );
272
+ Map <String ,Set <Integer >> geneSetToGenes = map .unionGeneSetsOfInterest (dataSetsToUse );
306
273
307
- union = unionGenesets (geneSetToGenes , map , network , selectedNodes , selectedEdges , prefix );
308
- inter = interGenesets (geneSetToGenes , map , network , selectedNodes , selectedEdges , prefix );
274
+ String prefix = map .getParams ().getAttributePrefix ();
275
+ union = unionGenesets (geneSetToGenes , map , network , allNodesToUse , selectedEdges , prefix );
276
+ inter = interGenesets (geneSetToGenes , map , network , allNodesToUse , selectedEdges , prefix );
277
+
278
+ // remove signature data sets at this point, they don't contain expression data
279
+ dataSets = ApplyEMStyleTask .filterEMDataSets (dataSetsToUse );
309
280
} else {
310
281
AssociatedApp app = NetworkUtil .getAssociatedApp (network );
311
282
if (app != null ) {
@@ -343,6 +314,72 @@ private void updateHeatMap(CyNetworkView networkView) {
343
314
});
344
315
}
345
316
317
+
318
+
319
+ private List <AbstractDataSet > getEnabledDataSets (
320
+ CyNetworkView networkView , EnrichmentMap map ,
321
+ Collection <CyNode > selectedNodes , Collection <CyEdge > selectedEdges
322
+ ) {
323
+ if (selectedNodes .isEmpty () && selectedEdges .isEmpty ())
324
+ return Collections .emptyList ();
325
+
326
+ // must maintain the order returned by map.getDataSetList() (issue #390)
327
+ List <AbstractDataSet > dataSets = new ArrayList <>(map .getDataSetList ());
328
+ dataSets .addAll (map .getSignatureSetList ());
329
+
330
+ // Remove Data Sets that are not selected in the control panel
331
+ if (propertyManager .isTrue (PropertyManager .HEATMAP_DATASET_SYNC )) {
332
+ ViewParams params = controlPanelMediatorProvider .get ().getAllViewParams ().get (networkView .getSUID ());
333
+ if (params != null ) {
334
+ Set <String > filter = params .getFilteredOutDataSets ();
335
+ dataSets .removeIf (ds -> filter .contains (ds .getName ()));
336
+ }
337
+ }
338
+
339
+ // Remove Data Sets that are not part of the selected nodes/edges
340
+ if (propertyManager .isTrue (PropertyManager .HEATMAP_SELECT_SYNC )) {
341
+ boolean distinctEdges = map .getParams ().getCreateDistinctEdges ();
342
+
343
+ Iterator <AbstractDataSet > iter = dataSets .iterator ();
344
+ while (iter .hasNext ()) {
345
+ AbstractDataSet ds = iter .next ();
346
+
347
+ boolean remove = true ;
348
+ if (ds .containsAnyNode (selectedNodes ))
349
+ remove = false ;
350
+ else if (!distinctEdges && !selectedEdges .isEmpty ())
351
+ remove = false ;
352
+ else if (distinctEdges && ds .containsAnyEdge (selectedEdges ))
353
+ remove = false ;
354
+
355
+ if (remove ) {
356
+ iter .remove ();
357
+ }
358
+ }
359
+ }
360
+
361
+ return dataSets ;
362
+ }
363
+
364
+
365
+ private List <CyNode > getNodesAdjacentToSignatureEdges (CyNetwork network , Collection <CyEdge > edges ) {
366
+ // Iterating over edges doesn't scale, if there are thousands of edges then just forget it
367
+ if (edges .size () > 10000 )
368
+ return null ;
369
+
370
+ List <CyNode > nodes = null ;
371
+ for (CyEdge edge : edges ) {
372
+ String interaction = network .getRow (edge ).get (CyEdge .INTERACTION , String .class );
373
+ if (Objects .equals (interaction , PostAnalysisParameters .SIGNATURE_INTERACTION_TYPE )) {
374
+ if (nodes == null )
375
+ nodes = new ArrayList <>();
376
+ nodes .add (edge .getSource ());
377
+ nodes .add (edge .getTarget ());
378
+ }
379
+ }
380
+ return nodes ;
381
+ }
382
+
346
383
private HeatMapParams getHeatMapParams (EnrichmentMap map , Long networkSUID , boolean onlyEdges ) {
347
384
HeatMapParams params = emManager .getHeatMapParams (networkSUID , onlyEdges );
348
385
@@ -501,7 +538,7 @@ private List<RankingOption> getDataSetRankOptions(EnrichmentMap map, CyNetwork n
501
538
}
502
539
503
540
public static Set <String > unionGenesets (Map <String ,Set <Integer >> geneSetToGenes ,
504
- EnrichmentMap map , CyNetwork network , List <CyNode > nodes , List <CyEdge > edges , String prefix ) {
541
+ EnrichmentMap map , CyNetwork network , Collection <CyNode > nodes , Collection <CyEdge > edges , String prefix ) {
505
542
Set <Integer > union = new HashSet <>();
506
543
for (CyNode node : nodes ) {
507
544
union .addAll (getGenes (map , geneSetToGenes , network , node , prefix ));
@@ -514,7 +551,7 @@ public static Set<String> unionGenesets(Map<String,Set<Integer>> geneSetToGenes,
514
551
}
515
552
516
553
public static Set <String > interGenesets (Map <String ,Set <Integer >> geneSetToGenes ,
517
- EnrichmentMap map , CyNetwork network , List <CyNode > nodes , List <CyEdge > edges , String prefix ) {
554
+ EnrichmentMap map , CyNetwork network , Collection <CyNode > nodes , Collection <CyEdge > edges , String prefix ) {
518
555
Set <Integer > inter = null ;
519
556
for (CyNode node : nodes ) {
520
557
Collection <Integer > genes = getGenes (map , geneSetToGenes , network , node , prefix );
0 commit comments