ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/dhidas/OSUAnalysis/Tools/test/TestTopPairEventCandidate.h
Revision: 1.1.1.1 (vendor branch)
Committed: Thu Dec 1 16:28:47 2011 UTC (13 years, 5 months ago) by dhidas
Content type: text/plain
Branch: dhidas, MAIN
CVS Tags: START, HEAD
Changes since 1.1: +0 -0 lines
Log Message:
osu copy modified

File Contents

# Content
1 #include "cute/cute.h"
2 #include "cute/cute_suite.h"
3
4 #include <boost/scoped_ptr.hpp>
5
6 #include "../interface/Event.h"
7 #include "../interface/OnlyForTests/DummyTTbarEvent.h"
8 #include "TestObjectFactory.h"
9 #include <iostream>
10
11 using namespace BAT;
12 using namespace std;
13
14 struct TestTopPairEventCandidate {
15 DummyTTbarEvent ttbarEvent, goodZEvent, poorZEvent, DiJetEvent, DiJetEventWithConversion, muonEvent;
16 DummyTTbarEvent emptyEvent, customEvent;
17
18 ElectronPointer goodIsolatedElectron, goodIsolatedElectron2;
19 ElectronPointer goodLooseElectron;
20 ElectronPointer badElectron;
21 ElectronPointer electronFromConversion;
22 JetPointer goodJet, goodBJet, badJet, goodJetCloseToElectron;
23 VertexPointer goodVertex;
24 VertexPointer badVertex;
25 MuonPointer goodIsolatedMuon;
26 MuonPointer badMuon;
27 METPointer met;
28 TrackCollection lessThan10Tracks;
29 TrackCollection moreThan10TracksHighPurity;
30 TrackCollection moreThan10TracksLowPurity;
31 TrackCollection moreThan10TracksMixedPurity_H;
32 TrackCollection moreThan10TracksMixedPurity_L;
33
34 TestTopPairEventCandidate() :
35 ttbarEvent(),
36 goodZEvent(),
37 poorZEvent(),
38 DiJetEvent(),
39 DiJetEventWithConversion(),
40 muonEvent(),
41 emptyEvent(),
42 customEvent(),
43 goodIsolatedElectron(TestObjectFactory::goodIsolatedElectron()),
44 goodIsolatedElectron2(TestObjectFactory::goodIsolatedElectron2()),
45 goodLooseElectron(new Electron(100., 79., -13., -5.)),
46 badElectron(new Electron(20, 14., 15., 0)),
47 electronFromConversion(new Electron(*goodIsolatedElectron)),
48 goodJet(new Jet(100, 13, 99, 5)),
49 goodBJet(new Jet(*goodJet)),
50 badJet(new Jet(20, 19, 0, 0)),
51 goodJetCloseToElectron(new Jet(100., 98., 13., 5.)),
52 goodVertex(TestObjectFactory::goodVertex()),
53 badVertex(TestObjectFactory::badFakeVertex()),
54 goodIsolatedMuon(new Muon(100., 99., 13., 5.)),
55 badMuon(new Muon(100., 99., 13., 5.)),
56 met(new MET(40, 30)) {
57 setUpGoodLooseElectron();
58 setUpBadElectron();
59 setUpGoodIsolatedElectronFromConversion();
60 setUpGoodJet();
61 setUpGoodBJet();
62 setUpGoodJetCloseToElectron();
63 setUpIsolatedGoodMuon();
64 setUpBadMuon();
65 setUpTracks();
66
67 setUpTTbarEvent();
68 setUpGoodZEvent();
69 setUpPoorZEvent();
70 setUpDiJetEvent();
71 setUpMuonEvent();
72 setUpCustomEvent();
73 }
74
75 private:
76
77 void setUpBadElectron() {
78 badElectron->setHcalIsolation(4);
79 badElectron->setEcalIsolation(44);
80 badElectron->setTrackerIsolation(1);
81 badElectron->setZDistanceToPrimaryVertex(0);
82 }
83
84 void setUpGoodLooseElectron() {
85 goodLooseElectron->setHcalIsolation(5);
86 goodLooseElectron->setEcalIsolation(3);
87 goodLooseElectron->setTrackerIsolation(4);
88 goodLooseElectron->setSigmaIEtaIEta(0.009);
89 goodLooseElectron->setDPhiIn(0.7);
90 goodLooseElectron->setDEtaIn(0.006);
91 goodLooseElectron->setHadOverEm(0.14);
92 goodLooseElectron->setRobustLooseID(true);
93 goodLooseElectron->setNumberOfMissingInnerLayerHits(0);
94 goodLooseElectron->setSuperClusterEta(0);
95 goodLooseElectron->setZDistanceToPrimaryVertex(0);
96 TrackPointer track = TrackPointer(new Track(goodLooseElectron->phi(), goodLooseElectron->eta(),
97 goodLooseElectron->pt(), goodLooseElectron->theta()));
98 track->setD0(goodLooseElectron->d0_wrtBeamSpot());
99 track->setCharge(goodLooseElectron->charge());
100 assert(goodLooseElectron->isGood() == false);
101 assert(goodLooseElectron->isLoose() && goodLooseElectron->relativeIsolation() < 1.);
102 }
103
104 void setUpGoodIsolatedElectronFromConversion() {
105 electronFromConversion->setHcalIsolation(0.5);
106 electronFromConversion->setEcalIsolation(0.3);
107 electronFromConversion->setTrackerIsolation(0.4);
108 electronFromConversion->setNumberOfMissingInnerLayerHits(3);
109 electronFromConversion->setZDistanceToPrimaryVertex(0);
110 }
111 void setUpGoodJet() {
112 goodJet->setEMF(0.2);
113 goodJet->setFHPD(0.5);
114 goodJet->setN90Hits(2);
115 }
116
117 void setUpGoodBJet() {
118 goodBJet->setEMF(0.2);
119 goodBJet->setFHPD(0.5);
120 goodBJet->setN90Hits(2);
121 goodBJet->setDiscriminatorForBtagType(2.5, BtagAlgorithm::SimpleSecondaryVertexHighEffBTag);
122 }
123
124 void setUpGoodJetCloseToElectron() {
125 goodJetCloseToElectron->setEMF(0.2);
126 goodJetCloseToElectron->setFHPD(0.5);
127 goodJetCloseToElectron->setN90Hits(2);
128 }
129
130
131 void setUpIsolatedGoodMuon() {
132 goodIsolatedMuon->makeGlobal(true);
133 goodIsolatedMuon->setEcalIsolation(1);
134 goodIsolatedMuon->setHcalIsolation(1);
135 goodIsolatedMuon->setTrackerIsolation(1);
136 }
137
138 void setUpBadMuon() {
139 badMuon->makeGlobal(false);
140 }
141
142 void setUpTTbarEvent() {
143 VertexCollection vertices;
144 vertices.push_back(goodVertex);
145 ttbarEvent.setVertices(vertices);
146 ElectronCollection electrons;
147 electrons.push_back(goodIsolatedElectron);
148 electrons.push_back(badElectron);
149 ttbarEvent.setElectrons(electrons);
150 JetCollection jets;
151 jets.push_back(goodJet);
152 jets.push_back(goodJet);
153 jets.push_back(goodBJet);
154 jets.push_back(goodBJet);
155 jets.push_back(badJet);
156 ttbarEvent.setJets(jets);
157
158 MuonCollection muons;
159 muons.push_back(badMuon);
160 ttbarEvent.setMuons(muons);
161 ttbarEvent.setMET(met);
162 ttbarEvent.setDataType(DataType::ttbar);
163 ttbarEvent.setTracks(moreThan10TracksHighPurity);
164 ttbarEvent.setBeamScrapingVeto(false);
165 assert(ttbarEvent.passesScrapingFilter());
166 assert(ttbarEvent.passesHighLevelTrigger());
167 assert(ttbarEvent.hasOneGoodPrimaryVertex());
168 assert(ttbarEvent.hasOnlyOneGoodIsolatedElectron());
169 assert(ttbarEvent.hasAtLeastFourGoodJets());
170 assert(ttbarEvent.isolatedElectronDoesNotComeFromConversion());
171 assert(ttbarEvent.isolatedElectronNotTaggedAsFromConversion());
172 }
173
174 void setUpGoodZEvent() {
175 VertexCollection vertices;
176 vertices.push_back(goodVertex);
177 goodZEvent.setVertices(vertices);
178 ElectronCollection electrons;
179 electrons.push_back(goodIsolatedElectron);
180 electrons.push_back(goodIsolatedElectron2);
181 electrons.push_back(badElectron);
182 goodZEvent.setElectrons(electrons);
183
184 JetCollection jets;
185 jets.push_back(goodJet);
186 jets.push_back(goodJet);
187 jets.push_back(goodJet);
188 jets.push_back(goodBJet);
189 goodZEvent.setJets(jets);
190 // goodZEvent.setHLT_Emulated_Photon15(true);
191
192 goodZEvent.setDataType(DataType::Zjets);
193 goodZEvent.setBeamScrapingVeto(false);
194 }
195
196 void setUpPoorZEvent() {
197 VertexCollection vertices;
198 vertices.push_back(goodVertex);
199 poorZEvent.setVertices(vertices);
200 ElectronCollection electrons;
201 electrons.push_back(goodIsolatedElectron);
202 electrons.push_back(goodLooseElectron);
203 electrons.push_back(badElectron);
204 poorZEvent.setElectrons(electrons);
205
206 JetCollection jets;
207 jets.push_back(goodJet);
208 jets.push_back(goodJet);
209 jets.push_back(goodJet);
210 jets.push_back(goodBJet);
211 poorZEvent.setJets(jets);
212 // poorZEvent.setHLT_Emulated_Photon15(true);
213
214 poorZEvent.setDataType(DataType::Zjets);
215 poorZEvent.setBeamScrapingVeto(false);
216 }
217
218 void setUpDiJetEvent() {
219 VertexCollection vertices;
220 vertices.push_back(badVertex);
221 DiJetEvent.setVertices(vertices);
222 JetCollection jets;
223 jets.push_back(goodJet);
224 jets.push_back(goodJet);
225 DiJetEvent.setJets(jets);
226 // DiJetEvent.setHLT_Emulated_Photon15(false);
227
228 DiJetEvent.setDataType(DataType::QCD_BCtoE_Pt80to170);
229 DiJetEvent.setBeamScrapingVeto(false);
230 }
231
232 void setUpDiJetEventWithConversion() {
233 VertexCollection vertices;
234 vertices.push_back(goodVertex);
235 DiJetEventWithConversion.setVertices(vertices);
236 JetCollection jets;
237 jets.push_back(goodJet);
238 jets.push_back(goodJet);
239 DiJetEventWithConversion.setJets(jets);
240 // DiJetEventWithConversion.setHLT_Emulated_Photon15(false);
241
242 ElectronCollection electrons;
243 electrons.push_back(electronFromConversion);
244 DiJetEventWithConversion.setElectrons(electrons);
245 DiJetEventWithConversion.setDataType(DataType::QCD_EMEnriched_Pt20to30);
246 DiJetEventWithConversion.setBeamScrapingVeto(false);
247 }
248
249 void setUpMuonEvent() {
250 VertexCollection vertices;
251 vertices.push_back(goodVertex);
252 muonEvent.setVertices(vertices);
253 ElectronCollection electrons;
254 electrons.push_back(goodIsolatedElectron);
255 electrons.push_back(badElectron);
256 muonEvent.setElectrons(electrons);
257 JetCollection jets;
258 jets.push_back(goodJet);
259 jets.push_back(goodJet);
260 jets.push_back(goodBJet);
261 jets.push_back(goodBJet);
262 jets.push_back(badJet);
263 muonEvent.setJets(jets);
264 // muonEvent.setHLT_Emulated_Photon15(true);
265
266 MuonCollection muons;
267 muons.push_back(goodIsolatedMuon);
268 muonEvent.setMuons(muons);
269 muonEvent.setDataType(DataType::Zjets);
270 }
271
272 void setUpTracks() {
273 TrackPointer trackHighPurity = TrackPointer(new Track(1., 0., 20., 6.));
274 TrackPointer trackLowPurity = TrackPointer(new Track(1., 0., 20., 6.));
275 trackHighPurity->setHighPurity(true);
276 trackLowPurity->setHighPurity(false);
277 for (unsigned int index = 0; index < 20; ++index) {
278 if (index < 8)
279 lessThan10Tracks.push_back(trackHighPurity);
280 if (index < 2) {
281 moreThan10TracksMixedPurity_H.push_back(trackLowPurity);
282 moreThan10TracksMixedPurity_L.push_back(trackHighPurity);
283 } else {
284 moreThan10TracksMixedPurity_H.push_back(trackHighPurity);
285 moreThan10TracksMixedPurity_L.push_back(trackLowPurity);
286 }
287
288 moreThan10TracksHighPurity.push_back(trackHighPurity);
289 moreThan10TracksLowPurity.push_back(trackLowPurity);
290 }
291 }
292
293 void setUpCustomEvent() {
294 customEvent.useCustomReturnValues = true;
295 customEvent.passConversion = false;
296 customEvent.passElectronCut = true;
297 customEvent.passHLT = true;
298 customEvent.passPV = true;
299 customEvent.passScraping = true;
300 customEvent.passes1JetCut = true;
301 customEvent.passes2JetCut = true;
302 customEvent.passes3JetCut = true;
303 customEvent.passes4JetCut = true;
304 customEvent.passesMuon = true;
305 customEvent.passesZveto = true;
306 customEvent.passConversionPartnerTrack = true;
307 assert(customEvent.passesScrapingFilter());
308 assert(customEvent.passesSelectionStep(TTbarEPlusJetsSelection::FilterOutScraping));
309 assert(customEvent.passesHighLevelTrigger());
310 assert(customEvent.passesSelectionStep(TTbarEPlusJetsSelection::HighLevelTrigger));
311 assert(customEvent.isolatedElectronDoesNotComeFromConversion() == false);
312 assert(customEvent.isolatedElectronNotTaggedAsFromConversion());
313 assert(customEvent.hasOneGoodPrimaryVertex());
314 assert(customEvent.hasOnlyOneGoodIsolatedElectron());
315 assert(customEvent.hasNoIsolatedMuon());
316 assert(customEvent.hasAtLeastOneGoodJet());
317 assert(customEvent.hasAtLeastTwoGoodJets());
318 assert(customEvent.hasAtLeastThreeGoodJets());
319 assert(customEvent.hasAtLeastFourGoodJets());
320 assert(customEvent.isNotAZBosonEvent());
321
322 assert(customEvent.useCustomReturnValues);
323 }
324
325 public:
326 void testEventConstructor() {
327 TopPairEventCandidate candidate = TopPairEventCandidate(ttbarEvent);
328 ASSERT_EQUAL(2, candidate.Electrons().size());
329 ASSERT_EQUAL(1, candidate.GoodIsolatedElectrons().size());
330 ASSERT_EQUAL(5, candidate.Jets().size());
331 ASSERT_EQUAL(4, candidate.GoodJets().size());
332 }
333
334 void testPassesHLT() {
335 ASSERT(ttbarEvent.passesHighLevelTrigger());
336 }
337
338 // void testDoesNotPassHLT() {
339 // DiJetEvent.setDataType(DataType::DATA);
340 // ASSERT_EQUAL(false, DiJetEvent.passesHighLevelTrigger());
341 // }
342
343 void testDoesHaveGoodPV() {
344 ASSERT(ttbarEvent.hasOneGoodPrimaryVertex());
345 }
346
347 void testDoesntHaveGoodPV() {
348 ASSERT(DiJetEvent.hasOneGoodPrimaryVertex() == false);
349 }
350
351 void testHasOnlyOneGoodIsolatedElectron() {
352 ASSERT(ttbarEvent.hasOnlyOneGoodIsolatedElectron());
353 }
354
355 void testHasNotOnlyOneGoodIsolatedElectron() {
356 ASSERT(goodZEvent.hasOnlyOneGoodIsolatedElectron() == false);
357 ASSERT(DiJetEvent.hasOnlyOneGoodIsolatedElectron() == false);
358 }
359
360 void testIsolatedElectronNotFromConversion() {
361 ASSERT(ttbarEvent.isolatedElectronDoesNotComeFromConversion());
362 }
363
364 void testIsolatedElectronFromConversion() {
365 ASSERT(DiJetEventWithConversion.isolatedElectronDoesNotComeFromConversion() == false);
366 }
367
368 void testNoElectronInEventReturnsFalse() {
369 ASSERT(DiJetEvent.isolatedElectronDoesNotComeFromConversion() == false);
370 }
371
372 void testHasAtLeastOneGoodJet() {
373 ASSERT(ttbarEvent.hasAtLeastOneGoodJet());
374 }
375
376 void testHasNoGoodJets() {
377 ASSERT(emptyEvent.hasAtLeastOneGoodJet() == false);
378 }
379
380 void testHasAtLeastTwoGoodjet() {
381 ASSERT(ttbarEvent.hasAtLeastTwoGoodJets());
382 }
383
384 void testHasNoTwoGoodJets() {
385 ASSERT(emptyEvent.hasAtLeastTwoGoodJets() == false);
386 }
387
388 void testHasAtLeastThreeGoodJets() {
389 ASSERT(ttbarEvent.hasAtLeastThreeGoodJets());
390 }
391
392 void testHasNoThreeGoodJets() {
393 ASSERT(DiJetEvent.hasAtLeastThreeGoodJets() == false);
394 }
395
396 void testHasAtFourThreeGoodJets() {
397 ASSERT(ttbarEvent.hasAtLeastThreeGoodJets());
398 }
399
400 void testHasNoFourThreeGoodJets() {
401 ASSERT(DiJetEvent.hasAtLeastThreeGoodJets() == false);
402 }
403
404 void testTTbarIsNotAZBosonEvent() {
405 ASSERT(ttbarEvent.isNotAZBosonEvent());
406 }
407
408 void testGoodZIsAZBosonEvent() {
409 ASSERT_EQUAL(false, goodZEvent.isNotAZBosonEvent());
410 }
411
412 void testPoorZIsAZBosonEvent() {
413 ASSERT_EQUAL(false, poorZEvent.isNotAZBosonEvent());
414 }
415
416 void testDiJetIsNotAZBosonEvent() {
417 ASSERT_EQUAL(true, DiJetEvent.isNotAZBosonEvent());
418 }
419
420 void testTTbarEventPassesMuonVeto() {
421 ASSERT_EQUAL(true, ttbarEvent.hasNoIsolatedMuon());
422 }
423
424 void testMuonEventDoesnPassMuonVeto() {
425 ASSERT_EQUAL(false, muonEvent.hasNoIsolatedMuon());
426 }
427
428 void testEventPasses0Step() {
429 ASSERT_EQUAL(true, ttbarEvent.passesSelectionStep(TTbarEPlusJetsSelection::FilterOutScraping));
430 }
431
432 void testEventPasses0StepWithLowNumberOfTracks() {
433 ttbarEvent.setTracks(lessThan10Tracks);
434 ASSERT_EQUAL(true, ttbarEvent.passesSelectionStep(TTbarEPlusJetsSelection::FilterOutScraping));
435 }
436
437 void testEventPasses0StepWithMixedTracks_H() {
438 ttbarEvent.setTracks(moreThan10TracksMixedPurity_H);
439 ASSERT_EQUAL(true, ttbarEvent.passesSelectionStep(TTbarEPlusJetsSelection::FilterOutScraping));
440 }
441
442 void testEventPasses0StepWithMixedTracks_L() {
443 ttbarEvent.setTracks(moreThan10TracksMixedPurity_L);
444 ASSERT_EQUAL(false, ttbarEvent.passesSelectionStep(TTbarEPlusJetsSelection::FilterOutScraping));
445 }
446
447 void testEventFails0StepWithLowPurityTracks() {
448 ttbarEvent.setTracks(moreThan10TracksLowPurity);
449 ASSERT_EQUAL(false, ttbarEvent.passesSelectionStep(TTbarEPlusJetsSelection::FilterOutScraping));
450 }
451
452 void testEventPasses1stStep() {
453 ASSERT_EQUAL(true, ttbarEvent.passesSelectionStep(TTbarEPlusJetsSelection::HighLevelTrigger));
454 }
455
456 void testEventPasses2ndStep() {
457 ASSERT_EQUAL(true, ttbarEvent.passesSelectionStep(TTbarEPlusJetsSelection::GoodPrimaryvertex));
458 }
459
460 void testEventPasses3ndStep() {
461 ASSERT_EQUAL(true, ttbarEvent.passesSelectionStep(TTbarEPlusJetsSelection::OneIsolatedElectron));
462 }
463
464 void testEventPasses4thStep() {
465 ASSERT_EQUAL(true, ttbarEvent.passesSelectionStep(TTbarEPlusJetsSelection::ConversionRejection));
466 }
467
468 void testEventPasses5thStep() {
469 ASSERT_EQUAL(true, ttbarEvent.passesSelectionStep(TTbarEPlusJetsSelection::LooseMuonVeto));
470 }
471
472 void testEventPasses6thStep() {
473 ASSERT_EQUAL(true, ttbarEvent.passesSelectionStep(TTbarEPlusJetsSelection::AtLeastFourGoodJets));
474 }
475
476 void testEventPasses7thStep() {
477 ASSERT_EQUAL(true, ttbarEvent.passesSelectionStep(TTbarEPlusJetsSelection::Zveto));
478 }
479
480 void testTTbarEventPassesNStep() {
481 ASSERT_EQUAL(true, ttbarEvent.passesSelectionStepUpTo(TTbarEPlusJetsSelection::Zveto));
482 }
483
484 void testPoorZEventPassesUpToStep() {
485 assert(poorZEvent.passesScrapingFilter());
486 assert(poorZEvent.passesHighLevelTrigger());
487 assert(poorZEvent.hasOneGoodPrimaryVertex());
488 cout << poorZEvent.GoodElectrons().size() << endl;
489 cout << poorZEvent.GoodIsolatedElectrons().size() << endl;
490 assert(poorZEvent.hasOnlyOneGoodIsolatedElectron());
491 assert(poorZEvent.isolatedElectronDoesNotComeFromConversion());
492 ASSERT_EQUAL(true, poorZEvent.passesSelectionStepUpTo(TTbarEPlusJetsSelection::LooseMuonVeto));
493 }
494
495 void testPoorZEventDoesntPassUpToStep() {
496 ASSERT_EQUAL(false, poorZEvent.passesSelectionStepUpTo(TTbarEPlusJetsSelection::Zveto));
497 }
498
499 void testPassesFullTTbarSelection() {
500 ASSERT_EQUAL(true, ttbarEvent.passesFullTTbarEPlusJetSelection());
501 }
502
503 void testFailsFullTTbarSelection() {
504 ASSERT_EQUAL(false, DiJetEvent.passesFullTTbarEPlusJetSelection());
505 }
506
507 void testComputeNeutrinoPzsWithoutMETThrowsExpeption() {
508 TopPairEventCandidate cand = TopPairEventCandidate();
509 VertexCollection vertices;
510 vertices.push_back(goodVertex);
511 cand.setVertices(vertices);
512 ElectronPointer electron(new Electron(40, -40, 0, 0));
513 electron->setHcalIsolation(0);
514 electron->setEcalIsolation(0);
515 electron->setTrackerIsolation(0);
516 electron->setNumberOfMissingInnerLayerHits(0);
517 ElectronCollection eCollection;
518 eCollection.push_back(electron);
519 cand.setElectrons(eCollection);
520 ASSERT_THROWS(cand.computeNeutrinoPz(),ReconstructionException);
521 }
522
523 void testComputeNeutrinoPzsIsolatedElectronThrowsExpeption() {
524 TopPairEventCandidate cand = TopPairEventCandidate();
525 VertexCollection vertices;
526 vertices.push_back(goodVertex);
527 cand.setVertices(vertices);
528 ElectronPointer electron(new Electron(40, -40, 0, 0));
529 electron->setHcalIsolation(50);
530 electron->setEcalIsolation(50);
531 electron->setTrackerIsolation(50);
532 electron->setNumberOfMissingInnerLayerHits(0);
533 ElectronCollection eCollection;
534 eCollection.push_back(electron);
535 cand.setElectrons(eCollection);
536 ASSERT_THROWS(cand.computeNeutrinoPz(),ReconstructionException);
537 }
538
539 void testComputeNeutrinoPzs() {
540 METPointer met(new MET(40, 0));
541 ElectronPointer electron(new Electron(40, -40, 0, 0));
542 electron->setHcalIsolation(0);
543 electron->setEcalIsolation(0);
544 electron->setTrackerIsolation(0);
545 electron->setNumberOfMissingInnerLayerHits(0);
546 electron->setD0_wrtBeamSpot(0);
547 electron->setSuperClusterEta(0);
548 electron->setDEtaIn(0);
549 electron->setDPhiIn(0);
550 electron->setSigmaIEtaIEta(0);
551 electron->setHadOverEm(0);
552
553 DummyTTbarEvent cand = DummyTTbarEvent();
554 cand.setMET(met);
555 cand.setElectronFromW(electron);
556 ASSERT_EQUAL(sqrt(80*80-80.389*80.389), cand.computeNeutrinoPz().at(0));
557 ASSERT_EQUAL(sqrt(80*80-80.389*80.389), cand.computeNeutrinoPz().at(1));
558 }
559
560 void testReconstructTopEventUsingChiWithNotEnoughJetsThrowsException() {
561 METPointer met(new MET(40, 0));
562 ElectronCollection eCollection;
563 eCollection.push_back(goodIsolatedElectron);
564 TopPairEventCandidate cand = TopPairEventCandidate();
565 VertexCollection vertices;
566 vertices.push_back(goodVertex);
567 cand.setVertices(vertices);
568 cand.setMET(met);
569 cand.setElectrons(eCollection);
570 ASSERT_THROWS(cand.reconstructTTbar(goodIsolatedElectron),ReconstructionException);
571 }
572
573 void testNMinus1CutsPositive() {
574 ASSERT_EQUAL(true, customEvent.passesNMinus1(TTbarEPlusJetsSelection::ConversionRejection));
575 }
576
577 void testNMinus1CutsNegative() {
578 ASSERT_EQUAL(false, customEvent.passesNMinus1(TTbarEPlusJetsSelection::HighLevelTrigger));
579 }
580 };
581
582 extern cute::suite make_suite_TestTopPairEventCandidate() {
583 cute::suite s;
584 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testNMinus1CutsPositive));
585 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testNMinus1CutsNegative));
586 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testEventConstructor));
587
588 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testPassesHLT));
589 // s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testDoesNotPassHLT));
590 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testDoesHaveGoodPV));
591 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testDoesntHaveGoodPV));
592 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testHasOnlyOneGoodIsolatedElectron));
593 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testHasNotOnlyOneGoodIsolatedElectron));
594 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testIsolatedElectronNotFromConversion));
595 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testIsolatedElectronFromConversion));
596 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testNoElectronInEventReturnsFalse));
597
598 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testHasAtLeastOneGoodJet));
599 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testHasNoGoodJets));
600 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testHasAtLeastTwoGoodjet));
601 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testHasNoTwoGoodJets));
602 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testHasAtLeastThreeGoodJets));
603 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testHasNoThreeGoodJets));
604 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testHasAtFourThreeGoodJets));
605 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testHasNoFourThreeGoodJets));
606
607 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testTTbarIsNotAZBosonEvent));
608 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testGoodZIsAZBosonEvent));
609 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testPoorZIsAZBosonEvent));
610 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testDiJetIsNotAZBosonEvent));
611
612 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testTTbarEventPassesMuonVeto));
613 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testMuonEventDoesnPassMuonVeto));
614
615 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testEventPasses0Step));
616 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testEventPasses0StepWithLowNumberOfTracks));
617 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testEventFails0StepWithLowPurityTracks));
618 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testEventPasses0StepWithMixedTracks_H));
619 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testEventPasses0StepWithMixedTracks_L));
620 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testEventPasses1stStep));
621 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testEventPasses2ndStep));
622 // s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testEventPasses2ndStepInRealData));
623 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testEventPasses3ndStep));
624 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testEventPasses4thStep));
625 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testEventPasses5thStep));
626 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testEventPasses6thStep));
627 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testEventPasses7thStep));
628
629 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testTTbarEventPassesNStep));
630 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testPoorZEventPassesUpToStep));
631 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testPoorZEventDoesntPassUpToStep));
632 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testPassesFullTTbarSelection));
633 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testFailsFullTTbarSelection));
634 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testComputeNeutrinoPzsWithoutMETThrowsExpeption));
635 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testComputeNeutrinoPzsIsolatedElectronThrowsExpeption));
636 s.push_back(CUTE_SMEMFUN(TestTopPairEventCandidate, testComputeNeutrinoPzs));
637 s.push_back(
638 CUTE_SMEMFUN(TestTopPairEventCandidate, testReconstructTopEventUsingChiWithNotEnoughJetsThrowsException));
639
640 return s;
641 }