Changeset 4270


Ignore:
Timestamp:
Jan 2, 2012, 3:07:11 PM (11 years ago)
Author:
Fredrik Levander
Message:

Refs #773. Updated querying for peptide-based non-gel reports.

File:
1 edited

Legend:

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

    r4252 r4270  
    5656import org.proteios.core.query.Restrictions;
    5757import java.io.BufferedWriter;
     58import java.io.IOException;
    5859import java.io.OutputStream;
    5960import java.io.OutputStreamWriter;
     
    111112      "Combined hits report",
    112113      "Combine scores for different hits and extract hits which pass the given false discovery rate threshold. The Hits report is updated with the calculated combined FDRs",
    113       "1.3", "2007-2011, Protein Technology, Lund University", null,
     114      "1.4", "2007-2012, Protein Technology, Lund University", null,
    114115      null, "http://www.proteios.org  ");
    115116  }
     
    364365          hitQuery.setPermanentParameter("localSampleId",
    365366            localSampleId, null);
     367          hitQuery.orderPermanent(Orders.asc(Hql
     368            .property("peakListFile")));
     369          hitQuery.orderPermanent(Orders.asc(Hql
     370            .property("spectrumStringId")));
    366371        }
    367372      }
     
    383388      {
    384389        output.write("Protein level report\n");
     390        hitQuery.orderPermanent(Orders.asc(Hql.property("externalId")));
    385391      }
    386392      else
    387393      {
    388394        output.write("Peptide level report\n");
     395        hitQuery
     396          .orderPermanent(Orders.asc(Hql.property("description")));
    389397      }
    390398      log.info("CombinedHitsReport: Random text prefix " + reverseText);
     
    417425        }
    418426        boolean first = true;
     427        int last_index = 0, last_rev_index = 0, forwardSize = combinedHits
     428          .size(), reverseSize = revCombinedHits.size();
    419429        while (hitit.hasNext())
    420430        {
     
    544554              else
    545555              {
     556                // There is a local sample id
     557                Integer currentFileId = currenthit
     558                  .getPeakListFile().getId();
    546559                // If there is a sample id we sort on input
    547560                // filename
    548561                if (!reverse)
    549562                {
    550                   for (int j = 0; (j < combinedHits.size() && (!existed)); j++)
     563                  if (!proteins)
    551564                  {
    552                     if (proteins && currenthit
    553                       .getPeakListFile().equals(
    554                         combinedHits.get(j).hit
    555                           .getPeakListFile()) && currenthit
    556                       .getExternalId().equals(
    557                         combinedHits.get(j).hit
    558                           .getExternalId()))
     565                    for (int j = last_index; j < forwardSize; j++)
    559566                    {
    560                       existed = true;
    561                       currentcombined = combinedHits
    562                         .get(j);
     567                      if (currenthit
     568                        .getSpectrumStringId().equals(
     569                          combinedHits.get(j).hit
     570                            .getSpectrumStringId()) && currentFileId
     571                        .equals(combinedHits.get(j).hitPeakListFileId) && combinedHits
     572                        .get(j).hit.getDescription()
     573                        .startsWith(seqstart))
     574                      {
     575                        existed = true;
     576                        currentcombined = combinedHits
     577                          .get(j);
     578                        last_index = j;
     579                        break;
     580                      }
    563581                    }
    564                     else if (!proteins && currenthit
    565                       .getPeakListFile().equals(
    566                         combinedHits.get(j).hit
    567                           .getPeakListFile()) && currenthit
    568                       .getSpectrumStringId().equals(
    569                         combinedHits.get(j).hit
    570                           .getSpectrumStringId()) && combinedHits
    571                       .get(j).hit.getDescription()
    572                       .startsWith(seqstart))
     582                  }
     583                  else
     584                  {
     585                    for (int j = 0; (j < combinedHits
     586                      .size() && (!existed)); j++)
    573587                    {
    574                       existed = true;
    575                       currentcombined = combinedHits
    576                         .get(j);
     588                      if (currenthit.getExternalId()
     589                        .equals(
     590                          combinedHits.get(j).hit
     591                            .getExternalId()) && currentFileId
     592                        .equals(combinedHits.get(j).hitPeakListFileId))
     593                      {
     594                        existed = true;
     595                        currentcombined = combinedHits
     596                          .get(j);
     597                      }
    577598                    }
    578599                  }
     
    580601                else
    581602                {
    582                   for (int j = 0; (j < revCombinedHits.size() && (!existed)); j++)
     603                  if (proteins)
    583604                  {
    584                     if (proteins && currenthit
    585                       .getPeakListFile().equals(
    586                         revCombinedHits.get(j).hit
    587                           .getPeakListFile()) && currenthit
    588                       .getExternalId().equals(
    589                         revCombinedHits.get(j).hit
    590                           .getExternalId()))
     605                    for (int j = 0; (j < revCombinedHits
     606                      .size() && (!existed)); j++)
    591607                    {
    592                       existed = true;
    593                       currentcombined = revCombinedHits
    594                         .get(j);
     608                      if (currentFileId
     609                        .equals(revCombinedHits.get(j).hitPeakListFileId) && currenthit
     610                        .getExternalId().equals(
     611                          revCombinedHits.get(j).hit
     612                            .getExternalId()))
     613                      {
     614                        existed = true;
     615                        currentcombined = revCombinedHits
     616                          .get(j);
     617                      }
    595618                    }
    596                     else if (!proteins && currenthit
    597                       .getPeakListFile().equals(
    598                         revCombinedHits.get(j).hit
    599                           .getPeakListFile()) && currenthit
    600                       .getSpectrumStringId().equals(
    601                         revCombinedHits.get(j).hit
    602                           .getSpectrumStringId()) && revCombinedHits
    603                       .get(j).hit.getDescription()
    604                       .startsWith(seqstart))
     619                  }
     620                  else
     621                  {
     622                    for (int j = last_rev_index; j < reverseSize; j++)
     623
    605624                    {
    606                       existed = true;
    607                       currentcombined = revCombinedHits
    608                         .get(j);
     625                      if (currenthit
     626                        .getSpectrumStringId().equals(
     627                          revCombinedHits.get(j).hit
     628                            .getSpectrumStringId()) && currentFileId
     629                        .equals(revCombinedHits.get(j).hitPeakListFileId) && revCombinedHits
     630                        .get(j).hit.getDescription()
     631                        .startsWith(seqstart))
     632                      {
     633                        existed = true;
     634                        currentcombined = revCombinedHits
     635                          .get(j);
     636                        last_rev_index = j;
     637                        break;
     638                      }
    609639                    }
    610640                  }
     
    624654            {
    625655              currentcombined.hit = currenthit;
     656              currentcombined.hitPeakListFileId = currenthit
     657                .getPeakListFile().getId();
    626658              if (reverse)
    627659              {
     
    634666            }
    635667            // Point to first in combination
    636             else if (!reverse)
     668            else if (!reverse || keepDecoys)
    637669            {
    638670              currenthit
     
    641673            }
    642674            if (first)
    643             // Try to find number of db_entries
    644             {
    645               File searchFile = currenthit
    646                 .getIdentificationResultFile();
    647               ItemQuery<SpectrumSearch> ssQuery = SpectrumSearch
    648                 .getQuery();
    649               ssQuery.restrict(Restrictions
    650                 .eq(Hql.property("resultFile"), Hql
    651                   .entity(searchFile)));
    652               ItemResultIterator<SpectrumSearch> ssit = ssQuery
    653                 .iterate(dc);
    654               if (ssit.hasNext())
    655               {
    656                 SpectrumSearch ss = (SpectrumSearch) ssit
    657                   .next();
    658                 Iterator<SearchDatabase> sdit = ss
    659                   .getSearchDatabases().iterator();
    660                 if (sdit.hasNext())
    661                 {
    662                   SearchDatabase sdb = sdit.next();
    663                   if (db_entries != 0)
    664                   {
    665                     if (db_entries != sdb
    666                       .getNumberOfEntriesAfterTaxonomy())
    667                     {
    668                       output
    669                         .write("WARNING!!! Number of database entries seems to differ between search engines!\n");
    670                     }
    671                   }
    672                   db_entries = sdb
    673                     .getNumberOfEntriesAfterTaxonomy();
    674                   output
    675                     .write("Score type " + score_types[i] + ", database ");
    676                   if (sdb.getVersionIdentifier() != null && sdb
    677                     .getVersionIdentifier().length() > 0)
    678                   {
    679                     output
    680                       .write(sdb.getVersionIdentifier());
    681                   }
    682                   else
    683                   {
    684                     output.write(sdb.getName());
    685                   }
    686                   output
    687                     .write(", number of database entries: " + db_entries + "\n");
    688                   log
    689                     .info("CombinedHitsReport: database entries:" + db_entries);
    690                 }
    691               }
    692             }
     675              db_entries = retrieveNumberOfDbEntries(dc,
     676                currenthit, db_entries, i, output);
    693677            first = false;
    694678            querycount++;
     
    702686          }
    703687        }
     688        // Now sort
     689        if (!proteins && localSampleId != null)
     690        {
     691          Comparator<CombinedHit> hitSort = new HitFileAndSpectrumStringIdAndDescriptionSort();
     692          Collections.sort(combinedHits, hitSort);
     693          Collections.sort(revCombinedHits, hitSort);
     694        }
    704695        hitQuery.reset();
    705696      }
    706697      if (progress != null)
    707698      {
    708         progress.display(60, "Querying done. Calculating FDRs.");
     699        progress.display(60,
     700          "Querying done. Setting default score values.");
    709701      }
    710702      // The actual filtering:
     
    781773      }
    782774      // double total_number = db_entries * decoyPart * spots;
     775      if (progress != null)
     776      {
     777        progress.display(65, "Querying done. Calculating scores.");
     778      }
    783779      countBetterRandomHits(combinedHits, revCombinedHits);
    784780      countBetterRandomHits(revCombinedHits, revCombinedHits);
     781      if (progress != null)
     782      {
     783        progress.display(70, "Querying done. Calculating FDRs.");
     784      }
    785785      // Now sort according to pValues
    786786      Comparator<CombinedHit> hitPValueSort = new HitPValueSort();
     
    973973  }
    974974
     975
     976  int retrieveNumberOfDbEntries(DbControl dc, Hit currenthit, int db_entries,
     977      int score_type_idx, BufferedWriter output)
     978      throws IOException
     979  // Try to find number of db_entries
     980  {
     981    File searchFile = currenthit.getIdentificationResultFile();
     982    ItemQuery<SpectrumSearch> ssQuery = SpectrumSearch.getQuery();
     983    ssQuery.restrict(Restrictions.eq(Hql.property("resultFile"), Hql
     984      .entity(searchFile)));
     985    ItemResultIterator<SpectrumSearch> ssit = ssQuery.iterate(dc);
     986    if (ssit.hasNext())
     987    {
     988      SpectrumSearch ss = (SpectrumSearch) ssit.next();
     989      Iterator<SearchDatabase> sdit = ss.getSearchDatabases().iterator();
     990      if (sdit.hasNext())
     991      {
     992        SearchDatabase sdb = sdit.next();
     993        if (db_entries != 0)
     994        {
     995          if (db_entries != sdb.getNumberOfEntriesAfterTaxonomy())
     996          {
     997            output
     998              .write("WARNING!!! Number of database entries seems to differ between search engines!\n");
     999          }
     1000        }
     1001        db_entries = sdb.getNumberOfEntriesAfterTaxonomy();
     1002        output
     1003          .write("Score type " + score_types[score_type_idx] + ", database ");
     1004        if (sdb.getVersionIdentifier() != null && sdb
     1005          .getVersionIdentifier().length() > 0)
     1006        {
     1007          output.write(sdb.getVersionIdentifier());
     1008        }
     1009        else
     1010        {
     1011          output.write(sdb.getName());
     1012        }
     1013        output
     1014          .write(", number of database entries: " + db_entries + "\n");
     1015        log.info("CombinedHitsReport: database entries:" + db_entries);
     1016      }
     1017    }
     1018    return db_entries;
     1019  }
     1020
    9751021  public class CombinedHit
    9761022      implements Comparable<CombinedHit>
     
    9791025    double fdr = 0D;
    9801026    Hit hit;
     1027    Integer hitPeakListFileId = 0;
    9811028    Float scores[];
    9821029
     
    10011048      else
    10021049      {
    1003         retval = hit.getPeakListFile().getName().compareTo(
    1004           o.hit.getPeakListFile().getName());
     1050        retval = hitPeakListFileId.compareTo(o.hitPeakListFileId);
    10051051      }
    10061052      return retval;
     
    11261172    }
    11271173  }
     1174
     1175  public class HitFileAndSpectrumStringIdAndDescriptionSort
     1176      implements Comparator<CombinedHit>
     1177  {
     1178    public int compare(CombinedHit o1, CombinedHit o2)
     1179    {
     1180      if (o1.hitPeakListFileId.equals(o2.hitPeakListFileId))
     1181      {
     1182        if (o1.hit.getSpectrumStringId().equals(
     1183          o2.hit.getSpectrumStringId()))
     1184        {
     1185          return o1.hit.getDescription().compareTo(
     1186            o2.hit.getDescription());
     1187        }
     1188        else
     1189        {
     1190          return o1.hit.getSpectrumStringId().compareTo(
     1191            o2.hit.getSpectrumStringId());
     1192        }
     1193      }
     1194      else
     1195        return (o1.hitPeakListFileId.compareTo(o2.hitPeakListFileId));
     1196    }
     1197  }
     1198
    11281199}
Note: See TracChangeset for help on using the changeset viewer.