1
// -*- mode: C++; tab-width: 2; -*-
4
// --------------------------------------------------------------------------
5
// OpenMS Mass Spectrometry Framework
6
// --------------------------------------------------------------------------
7
// Copyright (C) 2003-2011 -- Oliver Kohlbacher, Knut Reinert
9
// This library is free software; you can redistribute it and/or
10
// modify it under the terms of the GNU Lesser General Public
11
// License as published by the Free Software Foundation; either
12
// version 2.1 of the License, or (at your option) any later version.
14
// This library is distributed in the hope that it will be useful,
15
// but WITHOUT ANY WARRANTY; without even the implied warranty of
16
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
// Lesser General Public License for more details.
19
// You should have received a copy of the GNU Lesser General Public
20
// License along with this library; if not, write to the Free Software
21
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23
// --------------------------------------------------------------------------
24
// $Maintainer: Chris Bielow $
25
// $Authors: Nico Pfeifer, Chris Bielow $
26
// --------------------------------------------------------------------------
28
#include <OpenMS/CONCEPT/ClassTest.h>
30
///////////////////////////
34
#include <OpenMS/FORMAT/MascotXMLFile.h>
35
#include <OpenMS/FORMAT/IdXMLFile.h>
36
#include <OpenMS/METADATA/ProteinIdentification.h>
37
#include <OpenMS/DATASTRUCTURES/String.h>
38
#include <OpenMS/DATASTRUCTURES/DateTime.h>
40
///////////////////////////
42
START_TEST(ProteinIdentification, "$Id: ProteinIdentification_test.C 8210 2011-03-28 13:19:52Z aiche $")
44
/////////////////////////////////////////////////////////////
45
/////////////////////////////////////////////////////////////
47
using namespace OpenMS;
50
float protein_significance_threshold = 63.2f;
51
std::vector<ProteinHit> protein_hits;
52
ProteinHit protein_hit;
53
ProteinIdentification protein_identification;
54
MascotXMLFile xml_file;
56
protein_hits.push_back(protein_hit);
58
ProteinIdentification* ptr = 0;
59
ProteinIdentification* nullPointer = 0;
60
START_SECTION((ProteinIdentification()))
61
ptr = new ProteinIdentification();
62
TEST_NOT_EQUAL(ptr, nullPointer)
65
START_SECTION((virtual ~ProteinIdentification()))
66
ProteinIdentification hits;
70
START_SECTION((ProteinIdentification(const ProteinIdentification &source)))
71
ProteinIdentification hits;
72
hits.setDateTime(DateTime::now());
73
hits.setSignificanceThreshold(protein_significance_threshold);
74
hits.insertHit(protein_hit);
75
hits.setMetaValue("label",17);
76
hits.setIdentifier("id");
77
hits.setScoreType("score_type");
78
hits.setHigherScoreBetter(false);
79
hits.setSearchEngine("Mascot");
80
hits.setSearchEngineVersion("2.1");
81
ProteinIdentification::SearchParameters param;
83
ProteinIdentification::ProteinGroup g;
85
g.accessions.push_back("protein0");
86
g.accessions.push_back("protein3");
87
hits.insertProteinGroup(g);
88
hits.insertProteinGroup(g);
89
hits.setSearchParameters(param);
91
ProteinIdentification hits2(hits);
93
TEST_EQUAL(hits.getDateTime() == hits2.getDateTime(), true)
94
TEST_EQUAL(hits.getSignificanceThreshold(), hits2.getSignificanceThreshold())
95
TEST_EQUAL(hits.getHits().size() == 1, true)
96
TEST_EQUAL(hits.getHits()[0].getSequence(), String(""))
97
TEST_EQUAL(hits.getHits()[0] == protein_hit, true)
98
TEST_EQUAL(hits.getProteinGroups().size() == 2, true)
99
TEST_EQUAL(hits.getProteinGroups()[0]==g, true)
100
TEST_EQUAL(hits.getProteinGroups()[1]==g, true)
101
TEST_EQUAL((UInt)hits.getMetaValue("label"),17)
102
TEST_EQUAL(hits.getIdentifier(),"id")
103
TEST_EQUAL(hits.getScoreType(),"score_type")
104
TEST_EQUAL(hits.isHigherScoreBetter(),false)
105
TEST_EQUAL(hits.getSearchEngine(), "Mascot")
106
TEST_EQUAL(hits.getSearchEngineVersion(), "2.1")
107
TEST_EQUAL(hits.getSearchParameters()==param, true)
111
START_SECTION((ProteinIdentification& operator=(const ProteinIdentification& source)))
112
ProteinIdentification hits;
113
hits.setDateTime(DateTime::now());
114
hits.setSignificanceThreshold(protein_significance_threshold);
115
hits.insertHit(protein_hit);
116
hits.setIdentifier("id");
117
hits.setScoreType("score_type");
118
hits.setHigherScoreBetter(false);
119
hits.setSearchEngine("Mascot");
120
hits.setSearchEngineVersion("2.1");
121
ProteinIdentification::ProteinGroup g;
122
g.probability = 0.99;
123
g.accessions.push_back("protein0");
124
g.accessions.push_back("protein3");
125
hits.insertProteinGroup(g);
126
ProteinIdentification::SearchParameters param;
128
hits.setSearchParameters(param);
130
ProteinIdentification hits2;
133
TEST_EQUAL(hits.getDateTime() == hits2.getDateTime(), true)
134
TEST_EQUAL(hits.getSignificanceThreshold(), hits2.getSignificanceThreshold())
135
TEST_EQUAL(hits2.getHits().size() == 1, true)
136
TEST_EQUAL(*(hits2.getHits().begin()) == protein_hit, true)
137
TEST_EQUAL(hits2.getProteinGroups().size() == 1, true)
138
TEST_EQUAL(hits2.getProteinGroups()[0]==g, true)
139
TEST_EQUAL(hits2.getIdentifier(),"id")
140
TEST_EQUAL(hits2.getScoreType(),"score_type")
141
TEST_EQUAL(hits2.isHigherScoreBetter(),false)
142
TEST_EQUAL(hits2.getSearchEngine(), "Mascot")
143
TEST_EQUAL(hits2.getSearchEngineVersion(), "2.1")
144
TEST_EQUAL(hits2.getSearchParameters()==param, true)
147
START_SECTION((bool operator == (const ProteinIdentification& rhs) const))
148
ProteinIdentification search1;
149
ProteinIdentification search2;
150
TEST_EQUAL(search1 == search2, true)
152
search1.setDateTime(DateTime::now());
153
TEST_EQUAL(search1 == search2, false)
156
search1.setSignificanceThreshold(protein_significance_threshold);
157
TEST_EQUAL(search1 == search2, false)
160
search2.setIdentifier("id");
161
TEST_EQUAL(search1 == search2, false)
164
search2.setScoreType("score_type");
165
TEST_EQUAL(search1 == search2, false)
168
search2.setHigherScoreBetter(false);
169
TEST_EQUAL(search1 == search2, false)
172
search2.setSearchEngine("Mascot");
173
TEST_EQUAL(search1 == search2, false)
176
search2.setSearchEngineVersion("2.1");
177
TEST_EQUAL(search1 == search2, false)
180
ProteinIdentification::SearchParameters param;
182
search2.setSearchParameters(param);
183
TEST_EQUAL(search1 == search2, false)
186
ProteinIdentification::ProteinGroup g;
187
g.probability = 0.99;
188
g.accessions.push_back("protein0");
189
g.accessions.push_back("protein3");
190
search2.insertProteinGroup(g);
191
TEST_EQUAL(search1 == search2, false)
196
START_SECTION((bool operator != (const ProteinIdentification& rhs) const))
197
ProteinIdentification search1;
198
ProteinIdentification search2;
199
TEST_EQUAL(search1 != search2, false)
201
search1.setDateTime(DateTime::now());
202
TEST_EQUAL(search1 != search2, true)
204
//rest does not need to be tested, as it is tested in the operator== test implicitly!
207
START_SECTION((const DateTime& getDateTime() const))
208
ProteinIdentification hits;
209
DateTime date = DateTime::now();
210
hits.setDateTime(date);
211
const DateTime& date_time = hits.getDateTime();
212
TEST_EQUAL(date_time == date, true)
215
START_SECTION((DoubleReal getSignificanceThreshold() const))
216
ProteinIdentification hits;
217
hits.setSignificanceThreshold(protein_significance_threshold);
218
TEST_EQUAL(hits.getSignificanceThreshold(), protein_significance_threshold)
221
START_SECTION((const std::vector<ProteinHit>& getHits() const))
222
ProteinIdentification hits;
223
hits.insertHit(protein_hit);
224
TEST_EQUAL(hits.getHits().size() == 1, true)
225
TEST_EQUAL(*(hits.getHits().begin()) == protein_hit, true)
228
START_SECTION((std::vector<ProteinHit>& getHits()))
229
ProteinIdentification hits;
230
hits.insertHit(protein_hit);
231
TEST_EQUAL(hits.getHits().size() == 1, true)
232
TEST_EQUAL(*(hits.getHits().begin()) == protein_hit, true)
235
START_SECTION((void insertHit(const ProteinHit& input)))
236
ProteinIdentification hits;
237
hits.insertHit(protein_hit);
238
TEST_EQUAL(hits.getHits().size() == 1, true)
239
TEST_EQUAL(*(hits.getHits().begin()) == protein_hit, true)
242
START_SECTION((void setDateTime(const DateTime& date)))
243
ProteinIdentification hits;
244
DateTime date = DateTime::now();
245
hits.setDateTime(date);
246
TEST_EQUAL(hits.getDateTime() == date, true)
249
START_SECTION((void setSignificanceThreshold(DoubleReal value)))
250
ProteinIdentification hits;
251
hits.setSignificanceThreshold(protein_significance_threshold);
252
TEST_EQUAL(hits.getSignificanceThreshold(), protein_significance_threshold)
255
START_SECTION((void setHits(const std::vector< ProteinHit > &hits)))
259
vector<ProteinHit> hits;
260
ProteinIdentification id;
265
hit_1.setAccession("SECONDPROTEIN");
266
hit_2.setAccession("THIRDPROTEIN");
267
hit_3.setAccession("FIRSTPROTEIN");
268
hits.push_back(hit_1);
269
hits.push_back(hit_2);
270
hits.push_back(hit_3);
272
TEST_EQUAL(id.getHits()[2].getAccession(), "FIRSTPROTEIN")
273
TEST_EQUAL(id.getHits()[0].getAccession(), "SECONDPROTEIN")
274
TEST_EQUAL(id.getHits()[1].getAccession(), "THIRDPROTEIN")
277
START_SECTION((const String& getScoreType() const))
278
ProteinIdentification hits;
279
TEST_EQUAL(hits.getScoreType(),"")
282
START_SECTION((void setScoreType(const String& type)))
283
ProteinIdentification hits;
284
hits.setScoreType("bla");
285
TEST_EQUAL(hits.getScoreType(),"bla")
288
START_SECTION((bool isHigherScoreBetter() const))
289
ProteinIdentification hits;
290
TEST_EQUAL(hits.isHigherScoreBetter(),true)
293
START_SECTION((void setHigherScoreBetter(bool higher_is_better)))
294
ProteinIdentification hits;
295
hits.setHigherScoreBetter(false);
296
TEST_EQUAL(hits.isHigherScoreBetter(),false)
299
START_SECTION((const String& getIdentifier() const))
300
ProteinIdentification hits;
301
TEST_EQUAL(hits.getIdentifier(),"")
304
START_SECTION((void setIdentifier(const String& id)))
305
ProteinIdentification hits;
306
hits.setIdentifier("bla");
307
TEST_EQUAL(hits.getIdentifier(),"bla")
310
START_SECTION((const String& getSearchEngine() const))
311
ProteinIdentification hits;
312
TEST_EQUAL(hits.getSearchEngine(),"")
315
START_SECTION((void setSearchEngine(const String &search_engine)))
316
ProteinIdentification hits;
317
hits.setIdentifier("bla");
318
TEST_EQUAL(hits.getIdentifier(),"bla")
321
START_SECTION((const String& getSearchEngineVersion() const))
322
ProteinIdentification hits;
323
TEST_EQUAL(hits.getSearchEngineVersion(),"")
326
START_SECTION((void setSearchEngineVersion(const String &search_engine_version)))
327
ProteinIdentification hits;
328
hits.setSearchEngineVersion("bla");
329
TEST_EQUAL(hits.getSearchEngineVersion(),"bla")
332
START_SECTION((const SearchParameters& getSearchParameters() const))
333
ProteinIdentification hits;
334
TEST_EQUAL(hits.getSearchParameters()==ProteinIdentification::SearchParameters(),true)
337
START_SECTION((void setSearchParameters(const SearchParameters &search_parameters)))
338
ProteinIdentification hits;
339
ProteinIdentification::SearchParameters param;
341
hits.setSearchParameters(param);
342
TEST_EQUAL(hits.getSearchParameters()==ProteinIdentification::SearchParameters(),false)
345
START_SECTION((void sort()))
347
ProteinIdentification id;
350
hit.setAccession("SECONDPROTEIN");
353
hit.setAccession("FIRSTPROTEIN");
356
hit.setAccession("THIRDPROTEIN");
359
//higher score is better
362
TEST_EQUAL(id.getHits()[0].getAccession(), "FIRSTPROTEIN")
363
TEST_EQUAL(id.getHits()[1].getAccession(), "SECONDPROTEIN")
364
TEST_EQUAL(id.getHits()[2].getAccession(), "THIRDPROTEIN")
365
TEST_EQUAL(id.getHits()[0].getScore(), 45)
366
TEST_EQUAL(id.getHits()[1].getScore(), 23)
367
TEST_EQUAL(id.getHits()[2].getScore(), 7)
369
//lower score is better
370
id.setHigherScoreBetter(false);
373
TEST_EQUAL(id.getHits()[0].getAccession(), "THIRDPROTEIN")
374
TEST_EQUAL(id.getHits()[1].getAccession(), "SECONDPROTEIN")
375
TEST_EQUAL(id.getHits()[2].getAccession(), "FIRSTPROTEIN")
376
TEST_EQUAL(id.getHits()[0].getScore(), 7)
377
TEST_EQUAL(id.getHits()[1].getScore(), 23)
378
TEST_EQUAL(id.getHits()[2].getScore(), 45)
383
ProteinIdentification id;
386
hit.setAccession("SECONDPROTEIN");
389
hit.setAccession("FOURTHPROTEIN");
392
hit.setAccession("THIRDPROTEIN");
395
hit.setAccession("FIRSTPROTEIN");
398
ProteinIdentification::ProteinGroup g1, g2;
399
g1.probability = 0.99;
400
g1.accessions.push_back("FIRSTPROTEIN");
401
g1.accessions.push_back("FOURTHPROTEIN");
402
id.insertProteinGroup(g1);
403
g2.probability = 0.96;
404
g2.accessions.push_back("FIRSTPROTEIN");
405
g2.accessions.push_back("SECONDPROTEIN");
406
g2.accessions.push_back("THIRDPROTEIN");
407
id.insertProteinGroup(g2);
409
//higher score is better
412
TEST_EQUAL(id.getHits()[0].getAccession(), "FIRSTPROTEIN")
413
TEST_EQUAL(id.getHits()[1].getAccession(), "SECONDPROTEIN")
414
TEST_EQUAL(id.getHits()[2].getAccession(), "THIRDPROTEIN")
415
TEST_EQUAL(id.getHits()[0].getScore(), 99)
416
TEST_EQUAL(id.getHits()[1].getScore(), 45)
417
TEST_EQUAL(id.getHits()[2].getScore(), 23)
419
TEST_EQUAL(id.getProteinGroups().size(), 2);
420
TEST_EQUAL(id.getProteinGroups()[0]== g1, true);
421
TEST_EQUAL(id.getProteinGroups()[1]== g2, true);
427
START_SECTION((void assignRanks()))
428
ProteinIdentification id;
431
hit.setAccession("SECONDPROTEIN");
434
hit.setAccession("FIRSTPROTEIN");
437
hit.setAccession("THIRDPROTEIN");
442
TEST_EQUAL(id.getHits()[0].getAccession(), "FIRSTPROTEIN")
443
TEST_EQUAL(id.getHits()[1].getAccession(), "SECONDPROTEIN")
444
TEST_EQUAL(id.getHits()[2].getAccession(), "THIRDPROTEIN")
445
TEST_EQUAL(id.getHits()[0].getRank(), 1)
446
TEST_EQUAL(id.getHits()[1].getRank(), 2)
447
TEST_EQUAL(id.getHits()[2].getRank(), 3)
450
START_SECTION((Size computeCoverage(const std::vector< PeptideIdentification > &pep_ids)))
451
ProteinIdentification id;
455
hit.setAccession("P1");
456
hit.setSequence("MKQSTIALALLPLLFTPVTKARTPEMPVLENRAAQGDITAPGGARRLTGDQTAALRDSLS"
457
"DKPAKNIILLIGDGMGDSEITAARNYAEGAGGFFKGIDALPLTGQYTHYALNKKTGKPDY"
458
"VTDSAASATAWSTGVKTYNGALGVDIHEKDHPTILEMAKAAGLATGNVSTAELQDATPAA");
460
hit.setAccession("P2");
461
hit.setSequence("PEMPVLENRAAQGDITAPPGGARRLTGDQTAALRDSLS");
465
std::vector<PeptideIdentification> pep_ids;
466
PeptideIdentification pid;
467
PeptideHit phit(0,0,1,"");
468
phit.setProteinAccessions(StringList::create("P1"));
469
phit.setSequence("MKQSTIALALLPLLFTPVTKARTPEMPVLENRAAQGDITAPGGARRLTGDQTAALRDSLS");
470
pid.insertHit( phit );
471
phit.setSequence("DKPAKNIILLIGDGMGDSEITAARNYAEGAGGFFKGIDALPLTGQYTHYALNKKTGKPDY");
472
pid.insertHit( phit );
473
phit.setSequence("MKQSTIALALLPLLFTPVTKARTPEMPVLENRAAQGDITAPGGARRLTGDQTAALRDSLS"); // should not count
474
pid.insertHit( phit );
475
pep_ids.push_back(pid);
477
PeptideIdentification pid2;
478
PeptideHit phit2(0,0,1,"");
479
phit2.setProteinAccessions(StringList::create("P1"));
480
phit2.setSequence("MKQSTIALALLPLLFTPVTKARTPEMPVLENRAAQGDITAPGGARRLTGDQTAALRDSLS");
481
pid2.insertHit( phit2 ); // should not count
482
pep_ids.push_back(pid2);
484
id.computeCoverage(pep_ids);
486
TEST_REAL_SIMILAR(id.getHits()[0].getCoverage(), 200.0/3.0);
487
TEST_REAL_SIMILAR(id.getHits()[1].getCoverage(), 0.0);
489
phit2.setSequence("VTDSAASATAWSTGVKTYNGALGVDIHEKDHPTILEMAKAAGLATGNVSTAELQDATPAA");
490
pid2.insertHit( phit2 );
491
pep_ids.push_back(pid2);
493
id.computeCoverage(pep_ids);
495
TEST_REAL_SIMILAR(id.getHits()[0].getCoverage(), 100.0);
496
TEST_REAL_SIMILAR(id.getHits()[1].getCoverage(), 0.0);
499
PeptideIdentification pid3;
500
PeptideHit phit3(0,0,1,"");
501
phit3.setProteinAccessions(StringList::create("P2"));
502
phit3.setSequence("PEMPVLENRAAQGDITAPP"); // 1st half
503
pid3.insertHit( phit3 );
504
phit3.setSequence("GGARRLTGDQTAALRDSLS"); // 2nd half
505
pid3.insertHit( phit3 );
506
phit3.setSequence("RAAQGDITAPPGGARRLTG"); // middle half
507
pid3.insertHit( phit3 );
509
pep_ids.push_back(pid3);
511
id.computeCoverage(pep_ids);
513
TEST_REAL_SIMILAR(id.getHits()[0].getCoverage(), 0.0);
514
TEST_REAL_SIMILAR(id.getHits()[1].getCoverage(), 150.0);
518
START_SECTION(( [ProteinIdentification::ProteinGroup] ProteinGroup() ))
519
ProteinIdentification::ProteinGroup p;
521
TEST_EQUAL(p.probability, 0)
522
TEST_EQUAL(p.accessions.size(), 0)
526
START_SECTION(( [ProteinIdentification::ProteinGroup] bool operator==(const ProteinGroup rhs) const ))
527
ProteinIdentification::ProteinGroup p, p_c;
530
TEST_NOT_EQUAL(p==p_c, true)
533
p.accessions.push_back("bla");
534
TEST_NOT_EQUAL(p==p_c, true)
538
TEST_EQUAL(p==p_c, true)
542
START_SECTION(( [ProteinIdentification::SearchParameters] SearchParameters() ))
543
ProteinIdentification::SearchParameters sp;
545
TEST_EQUAL( sp.db.size(), 0)
546
TEST_EQUAL( sp.db_version.size(), 0)
547
TEST_EQUAL( sp.taxonomy.size(), 0)
548
TEST_EQUAL( sp.charges.size(), 0)
549
TEST_EQUAL( sp.mass_type, 0)
550
TEST_EQUAL( sp.fixed_modifications.size(), 0)
551
TEST_EQUAL( sp.variable_modifications.size(), 0)
552
TEST_EQUAL( sp.enzyme, ProteinIdentification::UNKNOWN_ENZYME)
553
TEST_EQUAL( sp.missed_cleavages, 0)
554
TEST_EQUAL( sp.peak_mass_tolerance, 0.0)
555
TEST_EQUAL( sp.precursor_tolerance, 0.0)
560
START_SECTION(( [ProteinIdentification::SearchParameters] bool operator==(const SearchParameters &rhs) const ))
561
ProteinIdentification::SearchParameters sp, sp_n;
562
sp_n.charges = "1,2,3";
563
TEST_EQUAL(sp==sp_n, false)
566
START_SECTION(( [ProteinIdentification::SearchParameters] bool operator!=(const SearchParameters &rhs) const ))
567
ProteinIdentification::SearchParameters sp, sp_n;
568
sp_n.charges = "1,2,3";
569
TEST_EQUAL(sp!=sp_n, true)
572
START_SECTION((const vector<ProteinGroup>& getProteinGroups() const))
573
ProteinIdentification id;
574
ProteinIdentification::ProteinGroup g;
575
g.probability = 0.99;
576
g.accessions.push_back("protein0");
577
g.accessions.push_back("protein3");
578
id.insertProteinGroup(g);
580
TEST_EQUAL(id.getProteinGroups().size(), 1);
581
TEST_EQUAL(id.getProteinGroups()[0]==g, true);
584
START_SECTION((vector<ProteinGroup>& getProteinGroups()))
585
ProteinIdentification id;
586
ProteinIdentification::ProteinGroup g;
587
g.probability = 0.99;
588
g.accessions.push_back("protein0");
589
g.accessions.push_back("protein3");
590
id.insertProteinGroup(g);
592
TEST_EQUAL(id.getProteinGroups().size(), 1);
593
TEST_EQUAL(id.getProteinGroups()[0]==g, true);
594
TEST_EQUAL(id.getProteinGroups()[0].probability = 0.1, 0.1);
598
START_SECTION((void insertProteinGroup(const ProteinGroup& group)))
604
START_SECTION((const vector<ProteinGroup>& getIndistinguishableProteins() const))
605
ProteinIdentification id;
606
ProteinIdentification::ProteinGroup g;
607
g.accessions.push_back("protein0");
608
g.accessions.push_back("protein3");
609
id.insertIndistinguishableProteins(g);
611
TEST_EQUAL(id.getIndistinguishableProteins().size(), 1);
612
TEST_EQUAL(id.getIndistinguishableProteins()[0]==g, true);
615
START_SECTION((vector<ProteinGroup>& getIndistinguishableProteins()))
616
ProteinIdentification id;
617
ProteinIdentification::ProteinGroup g;
618
g.probability = 0.99;
619
g.accessions.push_back("protein0");
620
g.accessions.push_back("protein3");
621
id.insertIndistinguishableProteins(g);
623
TEST_EQUAL(id.getIndistinguishableProteins().size(), 1);
624
TEST_EQUAL(id.getIndistinguishableProteins()[0]==g, true);
625
id.getIndistinguishableProteins()[0].accessions.push_back("protein1");
626
TEST_EQUAL(id.getIndistinguishableProteins()[0].accessions.size(), 3);
630
START_SECTION((void insertIndistinguishableProteins(const ProteinGroup& group)))
636
START_SECTION((vector<ProteinHit>::iterator findHit(const String& accession)))
638
ProteinIdentification protein;
640
hit.setAccession("test1");
641
protein.insertHit(hit);
642
hit.setAccession("test2");
643
protein.insertHit(hit);
644
TEST_EQUAL(protein.findHit("test1")->getAccession(), "test1");
645
TEST_EQUAL(protein.findHit("test2")->getAccession(), "test2");
646
TEST_EQUAL(protein.findHit("test3") == protein.getHits().end(), true);
652
/////////////////////////////////////////////////////////////
653
/////////////////////////////////////////////////////////////