Changeset 4272


Ignore:
Timestamp:
Jan 2, 2012, 6:29:50 PM (11 years ago)
Author:
Fredrik Levander
Message:

Refs #773. Updated FDR calculation for performance.

File:
1 edited

Legend:

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

    r4271 r4272  
    400400        // Restrict so that the score type starts with:
    401401        hitQuery.setParameter("scoretype", score_types[i] + "%", null);
     402        if (progress != null)
     403        {
     404          progress.display((50 * i / score_types.length),
     405            "Query " + (i + 1) + " of " + score_types.length);
     406        }
    402407        Iterator<Hit> hitIt = hitQuery.iterate(dc);
    403408        List<Hit> hitlist = new ArrayList<Hit>();
     
    422427
    423428        Iterator<Hit> hitit = hitlist.iterator();
    424         if (progress != null)
    425         {
    426           progress.display((50 * i / score_types.length),
    427             "Query " + (i + 1) + " of " + score_types.length);
    428         }
    429429        boolean first = true;
    430430        int last_index = 0, last_rev_index = 0, forwardSize = combinedHits
     
    799799      int combinedHitsSize = combinedHits.size();
    800800      int revCombinedHitsSize = revCombinedHits.size();
     801      int forward_idx=0;
     802      int reverse_idx=0;
    801803      for (int i = 0; i < combinedHitsSize; i++)
    802804      {
    803         int forwardCount = 0;
     805        //int forwardCount = 0;
    804806        int count = combinedHits.get(i).count;
    805         for (int j = 0; j < combinedHitsSize; j++)
     807        for (int j = forward_idx; j < combinedHitsSize; j++)
    806808        {
    807809          if (count >= combinedHits.get(j).count)
    808810          {
    809             forwardCount++;
     811            forward_idx=j;
    810812          }
    811813          else
    812814            break;
    813815        }
    814         int reverseCount = 0;
    815         for (int j = 0; j < revCombinedHitsSize; j++)
     816        //int reverseCount = 0;
     817        for (int j = reverse_idx; j < revCombinedHitsSize; j++)
    816818        {
    817819          if (count >= revCombinedHits.get(j).count)
    818820          {
    819             reverseCount++;
     821            reverse_idx=j++;
    820822          }
    821823          else
    822824            break;
    823825        }
    824         double combinedFDR = ((double) reverseCount / (decoySize * (double) forwardCount));
     826        double combinedFDR = ((double) reverse_idx / (decoySize * (double) forward_idx));
    825827        // Conservative estimate
    826828        if (combinedFDR == 0)
     
    840842      if (keepDecoys)
    841843      {
     844        forward_idx=0;
     845        reverse_idx=0;
    842846        for (int i = 0; i < revCombinedHitsSize; i++)
    843847        {
    844           double forwardCount = 0d;
    845           double count = revCombinedHits.get(i).count;
    846           for (int j = 0; j < combinedHitsSize; j++)
     848          int count = revCombinedHits.get(i).count;
     849          for (int j = forward_idx; j < combinedHitsSize; j++)
    847850          {
    848851            if (count >= combinedHits.get(j).count)
    849852            {
    850               forwardCount++;
     853              forward_idx=j;
    851854            }
    852855            else
    853856              break;
    854857          }
    855           double reverseCount = 0d;
    856           for (int j = 0; j < revCombinedHitsSize; j++)
     858          for (int j = reverse_idx; j < revCombinedHitsSize; j++)
    857859          {
    858860            if (count >= revCombinedHits.get(j).count)
    859861            {
    860               reverseCount++;
     862              reverse_idx=j;
    861863            }
    862864            else
    863865              break;
    864866          }
    865           double combinedFDR = (reverseCount / (decoySize * forwardCount));
     867          double combinedFDR = ((double) reverse_idx / (decoySize * (double) forward_idx));
    866868          revCombinedHits.get(i).fdr = combinedFDR;
    867869          // Now set the fdr value in the hit
Note: See TracChangeset for help on using the changeset viewer.