void TtbarHypothesis::combineReconstructedObjects() { if (isValid()) { leptonicW = ParticlePointer(new Particle(*neutrinoFromW + *leptonFromW)); if (jet1FromW != jet2FromW) hadronicW = ParticlePointer(new Particle(*jet1FromW + *jet2FromW)); else hadronicW = jet1FromW; leptonicTop = ParticlePointer(new Particle(*leptonicBjet + *leptonicW)); hadronicTop = ParticlePointer(new Particle(*hadronicBJet + *hadronicW)); resonance = ParticlePointer(new Particle(*leptonicTop + *hadronicTop)); // if(fabs(leptonicW->mass() - BasicNeutrinoReconstruction::W_mass) > 0.1) // cout << "Unexpected mass difference " << fabs(leptonicW->mass() - BasicNeutrinoReconstruction::W_mass) << endl; } else { throwDetailedException(); } }
bool TopPairEMuReferenceSelection::passesZmassVeto(const EventPtr event) const { const ElectronCollection electrons(signalElectrons(event)); const MuonCollection muons(signalMuons(event)); ElectronCollection electronColl; MuonCollection muonColl; double ptMax = 0; int storeIndexA = -1; int storeIndexB = -1; if(electrons.size() >= 1 && muons.size() >= 1){ for (unsigned int indexA = 0; indexA < electrons.size(); ++indexA) { const ElectronPointer electron(electrons.at(indexA)); for (unsigned int indexB = 0; indexB < muons.size(); ++indexB) { const MuonPointer muon(muons.at(indexB)); if((electron->charge() == -muon->charge()) && ((electron->pt()+muon->pt())>ptMax)){ ptMax = electron->pt()+muon->pt(); storeIndexA = indexA; storeIndexB = indexB; } } if(storeIndexA != storeIndexB){ electronColl.push_back(electrons.at(storeIndexA)); muonColl.push_back(muons.at(storeIndexB)); } } } ElectronPointer electron = electronColl.front(); MuonPointer muon = muonColl.front(); double mass = 0; ParticlePointer dilepton; dilepton = ParticlePointer(new Particle(*electron + *muon)); mass = dilepton->mass(); return mass < 76 || mass > 106; }
bool TopPairEMuReferenceSelection::passesDiLeptonSelection(const EventPtr event) const { const ElectronCollection electrons(signalElectrons(event)); const MuonCollection muons(signalMuons(event)); double mass = 0; if(electrons.size() > 0 && muons.size() > 0){ ElectronPointer electron = electrons.front(); MuonPointer muon = muons.front(); ParticlePointer dilepton; dilepton = ParticlePointer(new Particle(*electron + *muon)); mass = dilepton->mass(); } return mass > 20; }
double Event::WPT(const ParticlePointer particle, const METPointer met) { ParticlePointer W_boson; W_boson = ParticlePointer(new Particle(*met + *particle)); return W_boson->pt(); }