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 }