Changeset 4441


Ignore:
Timestamp:
Mar 12, 2013, 12:52:29 PM (10 years ago)
Author:
marianne
Message:

Refs #774. Added control to make sure that there are no unaligned subgroups of files before ending the alignment loop.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/plugin/src/org/proteios/plugins/FeatureSequencePropagator.java

    r4402 r4441  
    4040import java.util.ListIterator;
    4141import java.util.Map.Entry;
     42import java.util.Set;
    4243import java.util.TreeMap;
    4344import java.util.TreeSet;
     
    167168          .getValue("matchBetweenFractions");
    168169     
    169       //TODO: remove later!!
    170       boolean PRINT_POINTS = false;
    171      
    172170     
    173171      // the percentage of the most intense features used to
     
    737735          log.debug("Number of files in this fraction: " +nbrOfFiles);
    738736         
     737          TreeMap<Integer, TreeSet<Integer>> fileMatchMap = new TreeMap<Integer, TreeSet<Integer>>();
     738         
     739          for (int i=0;i<nbrOfFiles;i++){
     740            TreeSet<Integer> tempSet = new TreeSet<Integer>();
     741            tempSet.add(i);
     742            fileMatchMap.put(i,tempSet);
     743          }
     744         
     745          Set<Integer> maxSet = fileMatchMap.keySet();
     746          Set<Integer> firstSubSet = fileMatchMap.get(0);
     747          Set<Integer> secondSubSet = fileMatchMap.get(0);
     748          int addedSetMatches = 0;
     749         
    739750          // new MATCHED_FILES_LIMIT needs to be computed for
    740751          // every fraction-matching
     
    757768          log.debug("Fraction based matched files limit: "
    758769              + MATCHED_FILES_LIMIT);
    759           boolean[] ignoreLimit = new boolean[nbrOfFiles];
    760          
    761           if(simList.size()<(nbrOfFiles*(nbrOfFiles-1))/2){
     770          //boolean[] ignoreLimit = new boolean[nbrOfFiles];
     771         
     772          /*if(simList.size()<(nbrOfFiles*(nbrOfFiles-1))/2){
    762773            int nRemovedPairs = (nbrOfFiles*(nbrOfFiles-1))/2 -simList.size();
    763774            writer.println("Number of removed file-pairs from alignment: " +nRemovedPairs);
     
    792803           
    793804          }
    794 
     805*/
    795806
    796807          if (progress != null) {
     
    821832         
    822833          boolean breakAlignment = false;
     834          boolean hasMatchedAllFiles = false;
     835          boolean addedSetAlignment = false;
    823836
    824837          int totNbrAlignments = simList.size();
     
    858871                .getSecondFile());
    859872           
    860             if (ignoreLimit[firstFileIndex] || ignoreLimit[secondFileIndex] || ((nbrMatchesPerFile[firstFileIndex]<currentMatch || nbrMatchesPerFile[secondFileIndex]<currentMatch) && nbrMatchesPerFile[firstFileIndex]<MATCHED_FILES_LIMIT+1 && nbrMatchesPerFile[secondFileIndex]<MATCHED_FILES_LIMIT+1)) { 
     873            if (addedSetAlignment && firstSubSet.contains(fp.getFirstFile()) && secondSubSet.contains(fp.getSecondFile()) && addedSetMatches<MATCHED_FILES_LIMIT || ((nbrMatchesPerFile[firstFileIndex]<currentMatch || nbrMatchesPerFile[secondFileIndex]<currentMatch) && nbrMatchesPerFile[firstFileIndex]<MATCHED_FILES_LIMIT+1 && nbrMatchesPerFile[secondFileIndex]<MATCHED_FILES_LIMIT+1)) {
     874             
     875              if (addedSetAlignment){
     876               
     877                addedSetMatches++;
     878              }
     879             
     880              if (addedSetMatches==MATCHED_FILES_LIMIT){
     881                writer.println("Subgroups have matched " +(addedSetMatches-1) +"times." );
     882                addedSetAlignment = false;
     883              }
    861884             
    862885              currentNbrALignments++;
     
    887910                  + fp.getSimValue());
    888911              writer.println();
     912             
     913              hasMatchedAllFiles=setMatchedFiles(fp.getFirstFile(), fp.getSecondFile(), fileMatchMap, nbrOfFiles, writer);
    889914
    890915              // Alignment is to be performed, the matching
     
    915940                  points, writer);
    916941
    917               if(PRINT_POINTS == true){
    918                 writer.println("Points : "); for (Point
    919                p:points){ writer.println(p.getX() +" "
    920                 +func.value(p.getX()) + " " +p.getY()); }
    921                
    922                 writer.println();
    923                 writer.println("Eval points : "); for (Point
    924                 p:evalPoints){ writer.println(p.getX() +" "
    925                 +func.value(p.getX()) + " " +p.getY()); }
    926                
    927               }
    928942             
    929943              if (func == null) {
     
    10591073              itr.remove();
    10601074            }
    1061 
    1062             if(!breakAlignment){
     1075           
     1076            if(!addedSetAlignment){
     1077
     1078              if(!breakAlignment){
     1079                for (int ii = 0; ii < nbrMatchesPerFile.length; ii++) {
     1080                  if (nbrMatchesPerFile[ii]< MATCHED_FILES_LIMIT) {
     1081                    break;
     1082                  }
     1083                  if(ii == nbrMatchesPerFile.length-1){
     1084                    breakAlignment=true;
     1085                  }
     1086                }
     1087
     1088              }
     1089            }
     1090
     1091           
     1092            if (breakAlignment) {
     1093             
     1094              if (hasMatchedAllFiles && !addedSetAlignment){
     1095               
     1096                simList.clear();
     1097                break;
     1098               
     1099              }else{
     1100                //there are subgroups of files that have not matched to each other
     1101                writer.println("There are subgroups in data.");
     1102               
     1103                addedSetAlignment = true;
     1104               
     1105                firstSubSet = fileMatchMap.get(0);
     1106                writer.println("First subgroup: " +firstSubSet.toString());
     1107               
     1108                maxSet.removeAll(firstSubSet);
     1109                secondSubSet = new TreeSet<Integer>(maxSet);
     1110                writer.println("Other subgroup: " +secondSubSet.toString());
     1111               
     1112                maxSet = fileMatchMap.keySet();
     1113                itr = simList.listIterator();
     1114                continue;
     1115               
     1116              }
     1117             
     1118             
     1119             
     1120            }
     1121           
     1122            if(!addedSetAlignment){
    10631123              for (int ii = 0; ii < nbrMatchesPerFile.length; ii++) {
    1064                 if (nbrMatchesPerFile[ii]< MATCHED_FILES_LIMIT) {
     1124                if (nbrMatchesPerFile[ii]<currentMatch) {
    10651125                  break;
    10661126                }
     1127
    10671128                if(ii == nbrMatchesPerFile.length-1){
    1068                   breakAlignment=true;
     1129                  currentMatch++;
     1130                  itr = simList.listIterator();
    10691131                }
    1070               }
    1071              
    1072             }
    1073            
    1074            
    1075             if (breakAlignment) {
    1076              
    1077               simList.clear();
    1078 
    1079               break;
    1080             }
    1081 
    1082             for (int ii = 0; ii < nbrMatchesPerFile.length; ii++) {
    1083               if (nbrMatchesPerFile[ii]<currentMatch) {
    1084                 break;
    1085               }
    1086              
    1087               if(ii == nbrMatchesPerFile.length-1){
    1088                 currentMatch++;
    1089                 itr = simList.listIterator();
    10901132              }
    10911133            }
     
    14231465    }
    14241466
     1467  }
     1468 
     1469  private boolean setMatchedFiles(int file1, int file2, TreeMap<Integer, TreeSet<Integer>> fileMatchMap, int nbrOfFiles, PrintWriter writer){
     1470   
     1471    Set<Integer> firstFileSet = fileMatchMap.get(file1);
     1472   
     1473      if(firstFileSet.size()==nbrOfFiles){
     1474        return true;
     1475      }
     1476     
     1477      if(firstFileSet.contains(file2)){
     1478        return false;
     1479      }
     1480   
     1481    Set<Integer> secondFileSet = fileMatchMap.get(file2);
     1482   
     1483    TreeSet<Integer> combinedSet = new TreeSet<Integer>();
     1484    combinedSet.addAll(firstFileSet);
     1485    combinedSet.addAll(secondFileSet);
     1486   
     1487    for(Integer key:firstFileSet){
     1488      fileMatchMap.put(key, combinedSet);
     1489    }
     1490   
     1491    for(Integer key:secondFileSet){
     1492      fileMatchMap.put(key, combinedSet);
     1493    }
     1494   
     1495    writer.println("Current map.");
     1496    for (int i=0; i<nbrOfFiles;i++){
     1497      writer.println(i +" " +fileMatchMap.get(i).toString());
     1498     
     1499    }
     1500   
     1501    if(combinedSet.size()==nbrOfFiles){
     1502      return true;
     1503    }else{
     1504      return false;
     1505    }
    14251506  }
    14261507
Note: See TracChangeset for help on using the changeset viewer.