void JetAnalyser::analyse(const EventPtr event) { histMan_->setCurrentHistogramFolder(histogramFolder_); weight_ = event->weight() * prescale_ * scale_; const JetCollection jets = event->Jets(); unsigned int numberOfBJets(0); for (unsigned int index = 0; index < jets.size(); ++index) { const JetPointer jet(jets.at(index)); histMan_->H1D_BJetBinned("all_jet_pT")->Fill(jet->pt(), weight_); histMan_->H1D_BJetBinned("all_jet_phi")->Fill(jet->phi(), weight_); histMan_->H1D_BJetBinned("all_jet_eta")->Fill(jet->eta(), weight_); if (jet->isBJet(BtagAlgorithm::CombinedSecondaryVertex, BtagAlgorithm::MEDIUM)) ++numberOfBJets; if (index < 7) { stringstream temp; temp << "jet" << (index + 1); string nthJet = temp.str(); histMan_->H1D_BJetBinned(nthJet + "_pT")->Fill(jet->pt(), weight_); histMan_->H1D_BJetBinned(nthJet + "_phi")->Fill(jet->phi(), weight_); histMan_->H1D_BJetBinned(nthJet + "_eta")->Fill(jet->eta(), weight_); } } histMan_->H1D_BJetBinned("N_Jets")->Fill(jets.size(), weight_); histMan_->H1D("N_BJets")->Fill(numberOfBJets, weight_); }
JetCollection Event::GetBJetCollection(const JetCollection& jets, BtagAlgorithm::value btagAlgorithm, BtagAlgorithm::workingPoint WP) const { JetCollection bjets; for (unsigned int index = 0; index < jets.size(); ++index) { const JetPointer jet = jets.at(index); if (jet->isBJet(btagAlgorithm, WP)) bjets.push_back(jet); } return bjets; }
void Event::selectGoodJets() { goodJets.clear(); for (unsigned int index = 0; index < allJets.size(); ++index) { const JetPointer jet = allJets.at(index); if (jet->isGood()) { goodJets.push_back(jet); } } cleanGoodJets(); for (unsigned int index = 0; index < goodJets.size(); ++index) { const JetPointer jet = goodJets.at(index); if (jet->isBJet(BtagAlgorithm::SimpleSecondaryVertexHighEffBTag)) goodBJets.push_back(jet); } }
void Analysis::analyse() { cout << "detected samples:" << endl; for (unsigned int sample = 0; sample < DataType::NUMBER_OF_DATA_TYPES; ++sample) { if (eventReader->getSeenDatatypes()[sample]) cout << DataType::names[sample] << endl; } createHistograms(); while (eventReader->hasNextEvent()) { initiateEvent(); printNumberOfProccessedEventsEvery(Globals::printEveryXEvents); inspectEvents(); const JetCollection jets(currentEvent->Jets()); unsigned int numberOfJets(jets.size()); unsigned int numberOfBJets(0); for (unsigned int index = 0; index < numberOfJets; ++index) { const JetPointer jet(currentEvent->Jets().at(index)); if (jet->isBJet(BtagAlgorithm::CombinedSecondaryVertexV2, BtagAlgorithm::MEDIUM)) ++numberOfBJets; } histMan->setCurrentBJetBin(numberOfBJets); histMan->setCurrentJetBin(numberOfJets); vector<double> bjetWeights; if (currentEvent->isRealData()) { for (unsigned int index = 0; index <= numberOfBJets; ++index) { if (index == numberOfBJets) bjetWeights.push_back(1.); else bjetWeights.push_back(0); } } else bjetWeights = BjetWeights(jets, numberOfBJets); ttbar_plus_X_analyser_->analyse(currentEvent); if ( ( currentEvent->getDataType() == DataType::TTJets_amcatnloFXFX || currentEvent->getDataType() == DataType::TTJets_madgraphMLM ) && Globals::treePrefix_ == "" ) { pseudoTopAnalyser_->analyse(currentEvent); unfoldingRecoAnalyser_->analyse(currentEvent); partonAnalyser_->analyse(currentEvent); // likelihoodInputAnalyser_->analyse(currentEvent); } treeMan->FillTrees(); } }
extern void printJet(const JetPointer jet) { printParticle(jet); cout << "Jet Information" << endl; cout << setw(30) << "JECUnc" << endl; cout << setw(30) << jet->JECUnc() << endl; cout << setw(30) << "ptRaw" << setw(30) << "pxRaw" << setw(30) << "pyRaw" << setw(30) << "pzRaw" << endl; cout << setw(30) << sqrt(jet->PxRaw() * jet->PxRaw() + jet->PyRaw() * jet->PyRaw()) << setw(30) << jet->PxRaw() << setw(30) << jet->PyRaw() << setw(30) << jet->PzRaw() << endl; cout << setw(30) << "L1OffJEC" << setw(30) << "L2L3ResJEC" << setw(30) << "L2RelJEC" << setw(30) << "L3AbsJEC" << endl; cout << setw(30) << jet->L1OffJEC() << setw(30) << jet->L2L3ResJEC() << setw(30) << jet->L2RelJEC() << setw(30) << jet->L3AbsJEC() << endl;; cout << setw(30) << "emf" << setw(30) << "n90Hits" << setw(30) << "fHPD" << setw(30) << "B tag(SSV)" << endl; cout << setw(30) << jet->emf() << setw(30) << jet->n90Hits() << setw(30) << jet->fHPD() << setw(30) << jet->isBJet(BtagAlgorithm::CombinedSecondaryVertexV2, BtagAlgorithm::MEDIUM) << endl << endl; if (jet->getUsedAlgorithm() == JetAlgorithm::CA08PF || jet->getUsedAlgorithm() == JetAlgorithm::PF2PAT) { printPFJetExtra(jet); } }
void Analysis::analyse() { createHistograms(); cout << "detected samples:" << endl; for (unsigned int sample = 0; sample < DataType::NUMBER_OF_DATA_TYPES; ++sample) { if (eventReader->getSeenDatatypes()[sample]) cout << DataType::names[sample] << endl; } while (eventReader->hasNextEvent()) { initiateEvent(); printNumberOfProccessedEventsEvery(Globals::printEveryXEvents); inspectEvents(); const JetCollection jets(currentEvent->Jets()); unsigned int numberOfJets(jets.size()); unsigned int numberOfBJets(0); for (unsigned int index = 0; index < numberOfJets; ++index) { const JetPointer jet(currentEvent->Jets().at(index)); if (jet->isBJet(BtagAlgorithm::CombinedSecondaryVertex, BtagAlgorithm::MEDIUM)) ++numberOfBJets; } histMan->setCurrentBJetBin(numberOfBJets); histMan->setCurrentJetBin(numberOfJets); vector<double> bjetWeights; if (currentEvent->isRealData()) { for (unsigned int index = 0; index <= numberOfBJets; ++index) { if (index == numberOfBJets) bjetWeights.push_back(1.); else bjetWeights.push_back(0); } } else bjetWeights = BjetWeights(jets, numberOfBJets); eventcountAnalyser->analyse(currentEvent); // mttbarAnalyser->analyse(currentEvent); ttbar_plus_X_analyser_->analyse(currentEvent); diffVariablesAnalyser->analyse(currentEvent); // binningAnalyser->analyse(currentEvent); } }
double BTagWeight::weight(const JetCollection jets, const int systematic) const { float bTaggedMCJet = 1.0; float nonBTaggedMCJet = 1.0; float bTaggedDataJet = 1.0; float nonBTaggedDataJet = 1.0; for (unsigned int index = 0; index < jets.size(); ++index) { // Info on this jet const JetPointer jet(jets.at(index)); double jetPt = jet->pt(); if ( jetPt < 25 ) continue; // If the pt of the jet is outside the pt range of the SFs, // use the pt at the upper/lower edge and double the uncertainty. bool ptOutOfRange = false; if ( jetPt <= 30 || jet->pt() >= 670 ) { ptOutOfRange = true; } const unsigned int partonFlavour = abs( jet->partonFlavour() ); const bool isBTagged = jet->isBJet(); // Get scale factor for this jet const double sf = jet->getBTagSF( 0 ); double sf_up = jet->getBTagSF( 1 ); double sf_down = jet->getBTagSF( -1 ); if ( ptOutOfRange ) { sf_up = sf + 2 * ( sf_up - sf ); sf_down = sf - 2 * ( sf - sf_down ); if ( sf_up < 0 ) sf_up = 0; if ( sf_down < 0 ) sf_down = 0; } // Get efficiency for this jet const double eff = getEfficiency( partonFlavour, jet ); double sfToUse = sf; if ( systematic == 1 ) { sfToUse = sf_up; } else if ( systematic == -1 ) { sfToUse = sf_down; } if ( isBTagged ) { bTaggedMCJet *= eff; if ( eff*sfToUse > 1 ) { bTaggedDataJet *= 1; } else if ( eff*sfToUse < 0 ) { bTaggedDataJet *= 0; } else { bTaggedDataJet *= eff*sfToUse; } } else { nonBTaggedMCJet *= ( 1 - eff ); if ( eff*sfToUse > 1 ) { nonBTaggedDataJet *= 0; } else if ( eff*sfToUse < 0 ) { nonBTaggedDataJet *= 1; } else { bTaggedDataJet *= ( 1 - eff*sfToUse ); } } // if ( nonBTaggedMCJet < 0 || nonBTaggedDataJet < 0 ) { // cout << nonBTaggedMCJet << " " << nonBTaggedDataJet << endl; // cout << eff << " " << sfToUse << endl; // } } double bTagWeight = (nonBTaggedDataJet * bTaggedDataJet) / (nonBTaggedMCJet * bTaggedMCJet); return bTagWeight; }
bool TopPairEMuReferenceSelection::isBJet(const JetPointer jet) const { return jet->isBJet(BtagAlgorithm::CombinedSecondaryVertex, BtagAlgorithm::MEDIUM); }