1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package ubic.basecode.datafilter;
20
21 import java.util.List;
22 import java.util.Set;
23 import java.util.Vector;
24
25 import ubic.basecode.dataStructure.matrix.Matrix2D;
26 import ubic.basecode.dataStructure.matrix.MatrixUtil;
27
28
29
30
31
32
33
34 public class RowNameFilter<M extends Matrix2D<R, C, V>, R, C, V> extends AbstractFilter<M, R, C, V> {
35
36 private boolean exclude = false;
37 private Set<R> filterNames;
38
39 public RowNameFilter() {
40 filterNames = null;
41 }
42
43
44
45
46 public RowNameFilter( Set<R> namesToFilter ) {
47 filterNames = namesToFilter;
48 }
49
50
51
52
53
54 public RowNameFilter( Set<R> namesToFilter, boolean exclude ) {
55 this( namesToFilter );
56 this.exclude = exclude;
57 }
58
59
60
61
62
63
64
65 @Override
66 public M filter( M data ) {
67 List<V[]> MTemp = new Vector<V[]>();
68 List<R> rowNames = new Vector<R>();
69 int numRows = data.rows();
70 int numCols = data.columns();
71 int numNeeded = filterNames.size();
72 int kept = 0;
73 for ( int i = 0; i < numRows; i++ ) {
74 R name = data.getRowName( i );
75
76
77 if ( filterNames.contains( name ) ) {
78 if ( exclude ) {
79 continue;
80 }
81 MTemp.add( MatrixUtil.getRow( data, i ) );
82 rowNames.add( name );
83 kept++;
84 if ( kept >= numNeeded ) {
85 break;
86 }
87 }
88
89 if ( exclude ) {
90 MTemp.add( MatrixUtil.getRow( data, i ) );
91 rowNames.add( name );
92 kept++;
93 }
94 }
95
96 M returnval = getOutputMatrix( data, MTemp.size(), numCols );
97
98 for ( int i = 0; i < MTemp.size(); i++ ) {
99 for ( int j = 0; j < numCols; j++ ) {
100 returnval.set( i, j, MTemp.get( i )[j] );
101 }
102 }
103 returnval.setColumnNames( data.getColNames() );
104 returnval.setRowNames( rowNames );
105
106 log.info( "There are " + kept + " rows left after filtering." );
107
108 return returnval;
109 }
110
111 public void setFilterNames( Set<R> namesToFilter, boolean exclude ) {
112 this.filterNames = namesToFilter;
113 this.exclude = exclude;
114 }
115
116 }