Changeset 4270
- Timestamp:
- Jan 2, 2012, 3:07:11 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/plugin/src/org/proteios/plugins/CombinedHitsReport.java
r4252 r4270 56 56 import org.proteios.core.query.Restrictions; 57 57 import java.io.BufferedWriter; 58 import java.io.IOException; 58 59 import java.io.OutputStream; 59 60 import java.io.OutputStreamWriter; … … 111 112 "Combined hits report", 112 113 "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, 114 115 null, "http://www.proteios.org "); 115 116 } … … 364 365 hitQuery.setPermanentParameter("localSampleId", 365 366 localSampleId, null); 367 hitQuery.orderPermanent(Orders.asc(Hql 368 .property("peakListFile"))); 369 hitQuery.orderPermanent(Orders.asc(Hql 370 .property("spectrumStringId"))); 366 371 } 367 372 } … … 383 388 { 384 389 output.write("Protein level report\n"); 390 hitQuery.orderPermanent(Orders.asc(Hql.property("externalId"))); 385 391 } 386 392 else 387 393 { 388 394 output.write("Peptide level report\n"); 395 hitQuery 396 .orderPermanent(Orders.asc(Hql.property("description"))); 389 397 } 390 398 log.info("CombinedHitsReport: Random text prefix " + reverseText); … … 417 425 } 418 426 boolean first = true; 427 int last_index = 0, last_rev_index = 0, forwardSize = combinedHits 428 .size(), reverseSize = revCombinedHits.size(); 419 429 while (hitit.hasNext()) 420 430 { … … 544 554 else 545 555 { 556 // There is a local sample id 557 Integer currentFileId = currenthit 558 .getPeakListFile().getId(); 546 559 // If there is a sample id we sort on input 547 560 // filename 548 561 if (!reverse) 549 562 { 550 for (int j = 0; (j < combinedHits.size() && (!existed)); j++)563 if (!proteins) 551 564 { 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++) 559 566 { 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 } 563 581 } 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++) 573 587 { 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 } 577 598 } 578 599 } … … 580 601 else 581 602 { 582 for (int j = 0; (j < revCombinedHits.size() && (!existed)); j++)603 if (proteins) 583 604 { 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++) 591 607 { 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 } 595 618 } 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 605 624 { 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 } 609 639 } 610 640 } … … 624 654 { 625 655 currentcombined.hit = currenthit; 656 currentcombined.hitPeakListFileId = currenthit 657 .getPeakListFile().getId(); 626 658 if (reverse) 627 659 { … … 634 666 } 635 667 // Point to first in combination 636 else if (!reverse )668 else if (!reverse || keepDecoys) 637 669 { 638 670 currenthit … … 641 673 } 642 674 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); 693 677 first = false; 694 678 querycount++; … … 702 686 } 703 687 } 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 } 704 695 hitQuery.reset(); 705 696 } 706 697 if (progress != null) 707 698 { 708 progress.display(60, "Querying done. Calculating FDRs."); 699 progress.display(60, 700 "Querying done. Setting default score values."); 709 701 } 710 702 // The actual filtering: … … 781 773 } 782 774 // double total_number = db_entries * decoyPart * spots; 775 if (progress != null) 776 { 777 progress.display(65, "Querying done. Calculating scores."); 778 } 783 779 countBetterRandomHits(combinedHits, revCombinedHits); 784 780 countBetterRandomHits(revCombinedHits, revCombinedHits); 781 if (progress != null) 782 { 783 progress.display(70, "Querying done. Calculating FDRs."); 784 } 785 785 // Now sort according to pValues 786 786 Comparator<CombinedHit> hitPValueSort = new HitPValueSort(); … … 973 973 } 974 974 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 975 1021 public class CombinedHit 976 1022 implements Comparable<CombinedHit> … … 979 1025 double fdr = 0D; 980 1026 Hit hit; 1027 Integer hitPeakListFileId = 0; 981 1028 Float scores[]; 982 1029 … … 1001 1048 else 1002 1049 { 1003 retval = hit.getPeakListFile().getName().compareTo( 1004 o.hit.getPeakListFile().getName()); 1050 retval = hitPeakListFileId.compareTo(o.hitPeakListFileId); 1005 1051 } 1006 1052 return retval; … … 1126 1172 } 1127 1173 } 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 1128 1199 }
Note: See TracChangeset
for help on using the changeset viewer.