|
[Rivet-svn] r4105 - in branches/2012-06-aidarivet: include/Rivet include/Rivet/Analyses src/Analysesblackhole at projects.hepforge.org blackhole at projects.hepforge.orgWed Jan 23 10:37:50 GMT 2013
Author: fsiegert Date: Wed Jan 23 10:37:49 2013 New Revision: 4105 Log: Split MC_JetAnalysis into two separate logical parts, one for jet properties, and one for cluster splitting scales. Added: branches/2012-06-aidarivet/include/Rivet/Analyses/MC_JetSplittings.hh - copied, changed from r4103, branches/2012-06-aidarivet/include/Rivet/Analyses/MC_JetAnalysis.hh branches/2012-06-aidarivet/src/Analyses/MC_JetSplittings.cc - copied, changed from r4103, branches/2012-06-aidarivet/src/Analyses/MC_JetAnalysis.cc Modified: branches/2012-06-aidarivet/include/Rivet/Makefile.am branches/2012-06-aidarivet/src/Analyses/MC_JetAnalysis.cc branches/2012-06-aidarivet/src/Analyses/Makefile.am Copied and modified: branches/2012-06-aidarivet/include/Rivet/Analyses/MC_JetSplittings.hh (from r4103, branches/2012-06-aidarivet/include/Rivet/Analyses/MC_JetAnalysis.hh) ============================================================================== --- branches/2012-06-aidarivet/include/Rivet/Analyses/MC_JetAnalysis.hh Tue Jan 22 15:07:30 2013 (r4103, copy source) +++ branches/2012-06-aidarivet/include/Rivet/Analyses/MC_JetSplittings.hh Wed Jan 23 10:37:49 2013 (r4105) @@ -1,6 +1,6 @@ // -*- C++ -*- -#ifndef RIVET_MC_JetAnalysis_HH -#define RIVET_MC_JetAnalysis_HH +#ifndef RIVET_MC_JetSplittings_HH +#define RIVET_MC_JetSplittings_HH #include "Rivet/Analysis.hh" #include "Rivet/Projections/FinalState.hh" @@ -10,14 +10,13 @@ /// @brief Base class providing common functionality for MC jet validation analyses - class MC_JetAnalysis : public Analysis { + class MC_JetSplittings : public Analysis { public: /// Default constructor. - MC_JetAnalysis(const string& name, + MC_JetSplittings(const string& name, size_t njet, - const string& jetpro_name, - double jetptcut=20*GeV); + const string& jetpro_name); /// @name Analysis methods @@ -37,28 +36,10 @@ /// (this projection has to be registered by the derived analysis!) const std::string m_jetpro_name; - /// Jet pT cutoff - double m_jetptcut; - - /// @todo Add jet masses and d(rap) - /// @name Histograms //@{ std::vector<AIDA::IHistogram1D *> _h_log10_d; std::vector<AIDA::IDataPointSet *> _h_log10_R; - std::vector<AIDA::IHistogram1D *> _h_pT_jet; - std::vector<AIDA::IHistogram1D *> _h_eta_jet; - std::vector<shared_ptr<LWH::Histogram1D> > _h_eta_jet_plus, _h_eta_jet_minus; - std::vector<AIDA::IHistogram1D *> _h_rap_jet; - std::vector<shared_ptr<LWH::Histogram1D> > _h_rap_jet_plus, _h_rap_jet_minus; - std::vector<AIDA::IHistogram1D *> _h_mass_jet; - std::map<std::pair<size_t, size_t>, AIDA::IHistogram1D*> _h_deta_jets; - std::map<std::pair<size_t, size_t>, AIDA::IHistogram1D*> _h_dphi_jets; - std::map<std::pair<size_t, size_t>, AIDA::IHistogram1D*> _h_dR_jets; - AIDA::IHistogram1D * _h_jet_multi_exclusive; - AIDA::IHistogram1D * _h_jet_multi_inclusive; - AIDA::IDataPointSet * _h_jet_multi_ratio; - AIDA::IHistogram1D * _h_jet_HT; //@} }; Modified: branches/2012-06-aidarivet/include/Rivet/Makefile.am ============================================================================== --- branches/2012-06-aidarivet/include/Rivet/Makefile.am Wed Jan 23 09:17:39 2013 (r4104) +++ branches/2012-06-aidarivet/include/Rivet/Makefile.am Wed Jan 23 10:37:49 2013 (r4105) @@ -83,7 +83,8 @@ ## Analysis base class headers nobase_pkginclude_HEADERS += \ - Analyses/MC_JetAnalysis.hh + Analyses/MC_JetAnalysis.hh \ + Analyses/MC_JetSplittings.hh ## Tools Modified: branches/2012-06-aidarivet/src/Analyses/MC_JetAnalysis.cc ============================================================================== --- branches/2012-06-aidarivet/src/Analyses/MC_JetAnalysis.cc Wed Jan 23 09:17:39 2013 (r4104) +++ branches/2012-06-aidarivet/src/Analyses/MC_JetAnalysis.cc Wed Jan 23 10:37:49 2013 (r4105) @@ -12,7 +12,7 @@ const string& jetpro_name, double jetptcut) : Analysis(name), m_njet(njet), m_jetpro_name(jetpro_name), m_jetptcut(jetptcut), - _h_log10_d(njet, NULL), _h_log10_R(njet+1, NULL), _h_pT_jet(njet, NULL), + _h_pT_jet(njet, NULL), _h_eta_jet(njet, NULL), _h_eta_jet_plus(njet), _h_eta_jet_minus(njet), _h_rap_jet(njet, NULL), _h_rap_jet_plus(njet), _h_rap_jet_minus(njet), _h_mass_jet(njet, NULL) @@ -26,15 +26,6 @@ void MC_JetAnalysis::init() { for (size_t i=0; i < m_njet; ++i) { - stringstream dname; - dname << "log10_d_" << i << i+1; - - _h_log10_d[i] = bookHistogram1D(dname.str(), 50, 0.2, log10(0.5*sqrtS())); - - stringstream Rname; - Rname << "log10_R_" << i; - _h_log10_R[i] = bookDataPointSet(Rname.str(), 50, 0.2, log10(0.5*sqrtS())); - stringstream pTname; pTname << "jet_pT_" << i+1; double pTmax = 1.0/(double(i)+2.0) * sqrtS()/GeV/2.0; @@ -75,9 +66,6 @@ _h_dR_jets.insert(make_pair(ij, bookHistogram1D(dRname.str(), 25, 0.0, 5.0))); } } - stringstream Rname; - Rname << "log10_R_" << m_njet; - _h_log10_R[m_njet] = bookDataPointSet(Rname.str(), 50, 0.2, log10(0.5*sqrtS())); _h_jet_multi_exclusive = bookHistogram1D("jet_multi_exclusive", m_njet+3, -0.5, m_njet+3-0.5); _h_jet_multi_inclusive = bookHistogram1D("jet_multi_inclusive", m_njet+3, -0.5, m_njet+3-0.5); @@ -91,42 +79,8 @@ void MC_JetAnalysis::analyze(const Event & e) { const double weight = e.weight(); - const FastJets& jetpro = applyProjection<FastJets>(e, m_jetpro_name); - - // Jet resolutions and integrated jet rates - const fastjet::ClusterSequence* seq = jetpro.clusterSeq(); - if (seq != NULL) { - double previous_dij = 10.0; - for (size_t i = 0; i < m_njet; ++i) { - // Jet resolution i -> j - double d_ij = log10(sqrt(seq->exclusive_dmerge_max(i))); - - // Fill differential jet resolution - _h_log10_d[i]->fill(d_ij, weight); - - // Fill integrated jet resolution - for (int ibin = 0; ibin < _h_log10_R[i]->size(); ++ibin) { - IDataPoint* dp = _h_log10_R[i]->point(ibin); - double dcut = dp->coordinate(0)->value(); - if (d_ij < dcut && previous_dij > dcut) { - dp->coordinate(1)->setValue(dp->coordinate(1)->value() + weight); - } - } - previous_dij = d_ij; - } - // One remaining integrated jet resolution - for (int ibin = 0; ibin<_h_log10_R[m_njet]->size(); ++ibin) { - IDataPoint* dp = _h_log10_R[m_njet]->point(ibin); - double dcut = dp->coordinate(0)->value(); - if (previous_dij > dcut) { - dp->coordinate(1)->setValue(dp->coordinate(1)->value() + weight); - } - } - } - - const Jets& jets = jetpro.jetsByPt(m_jetptcut); + const Jets& jets = applyProjection<FastJets>(e, m_jetpro_name).jetsByPt(m_jetptcut); - // The remaining direct jet observables for (size_t i = 0; i < m_njet; ++i) { if (jets.size() < i+1) continue; _h_pT_jet[i]->fill(jets[i].momentum().pT()/GeV, weight); @@ -192,12 +146,6 @@ // Finalize void MC_JetAnalysis::finalize() { for (size_t i = 0; i < m_njet; ++i) { - scale(_h_log10_d[i], crossSection()/sumOfWeights()); - for (int ibin = 0; ibin<_h_log10_R[i]->size(); ++ibin) { - IDataPoint* dp = _h_log10_R[i]->point(ibin); - dp->coordinate(1)->setValue(dp->coordinate(1)->value()*crossSection()/sumOfWeights()); - } - scale(_h_pT_jet[i], crossSection()/sumOfWeights()); scale(_h_mass_jet[i], crossSection()/sumOfWeights()); scale(_h_eta_jet[i], crossSection()/sumOfWeights()); @@ -212,11 +160,6 @@ histogramFactory().divide(histoPath(rapname.str()), *_h_rap_jet_plus[i], *_h_rap_jet_minus[i]); } - for (int ibin = 0; ibin < _h_log10_R[m_njet]->size(); ++ibin) { - IDataPoint* dp =_h_log10_R[m_njet]->point(ibin); - dp->coordinate(1)->setValue(dp->coordinate(1)->value()*crossSection()/sumOfWeights()); - } - // Scale the d{eta,R} histograms map<pair<size_t, size_t>, AIDA::IHistogram1D*>::iterator it; for (it = _h_deta_jets.begin(); it != _h_deta_jets.end(); ++it) { Copied and modified: branches/2012-06-aidarivet/src/Analyses/MC_JetSplittings.cc (from r4103, branches/2012-06-aidarivet/src/Analyses/MC_JetAnalysis.cc) ============================================================================== --- branches/2012-06-aidarivet/src/Analyses/MC_JetAnalysis.cc Tue Jan 22 15:07:30 2013 (r4103, copy source) +++ branches/2012-06-aidarivet/src/Analyses/MC_JetSplittings.cc Wed Jan 23 10:37:49 2013 (r4105) @@ -1,5 +1,5 @@ // -*- C++ -*- -#include "Rivet/Analyses/MC_JetAnalysis.hh" +#include "Rivet/Analyses/MC_JetSplittings.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" @@ -7,15 +7,11 @@ namespace Rivet { - MC_JetAnalysis::MC_JetAnalysis(const string& name, - size_t njet, - const string& jetpro_name, - double jetptcut) - : Analysis(name), m_njet(njet), m_jetpro_name(jetpro_name), m_jetptcut(jetptcut), - _h_log10_d(njet, NULL), _h_log10_R(njet+1, NULL), _h_pT_jet(njet, NULL), - _h_eta_jet(njet, NULL), _h_eta_jet_plus(njet), _h_eta_jet_minus(njet), - _h_rap_jet(njet, NULL), _h_rap_jet_plus(njet), _h_rap_jet_minus(njet), - _h_mass_jet(njet, NULL) + MC_JetSplittings::MC_JetSplittings(const string& name, + size_t njet, + const string& jetpro_name) + : Analysis(name), m_njet(njet), m_jetpro_name(jetpro_name), + _h_log10_d(njet, NULL), _h_log10_R(njet+1, NULL) { setNeedsCrossSection(true); // legitimate use, since a base class has no .info file! } @@ -23,72 +19,27 @@ // Book histograms - void MC_JetAnalysis::init() { + void MC_JetSplittings::init() { for (size_t i=0; i < m_njet; ++i) { stringstream dname; dname << "log10_d_" << i << i+1; - _h_log10_d[i] = bookHistogram1D(dname.str(), 50, 0.2, log10(0.5*sqrtS())); + _h_log10_d[i] = bookHistogram1D(dname.str(), 100, 0.2, log10(0.5*sqrtS())); stringstream Rname; Rname << "log10_R_" << i; - _h_log10_R[i] = bookDataPointSet(Rname.str(), 50, 0.2, log10(0.5*sqrtS())); - - stringstream pTname; - pTname << "jet_pT_" << i+1; - double pTmax = 1.0/(double(i)+2.0) * sqrtS()/GeV/2.0; - int nbins_pT = 100/(i+1); - _h_pT_jet[i] = bookHistogram1D(pTname.str(), logBinEdges(nbins_pT, 10.0, pTmax)); - - stringstream massname; - massname << "jet_mass_" << i+1; - double mmax = 100.0; - int nbins_m = 100/(i+1); - _h_mass_jet[i] = bookHistogram1D(massname.str(), logBinEdges(nbins_m, 1.0, mmax)); - - stringstream etaname; - etaname << "jet_eta_" << i+1; - _h_eta_jet[i] = bookHistogram1D(etaname.str(), i > 1 ? 25 : 50, -5.0, 5.0); - _h_eta_jet_plus[i].reset(new LWH::Histogram1D(i > 1 ? 15 : 25, 0, 5)); - _h_eta_jet_minus[i].reset(new LWH::Histogram1D(i > 1 ? 15 : 25, 0, 5)); - - stringstream rapname; - rapname << "jet_y_" << i+1; - _h_rap_jet[i] = bookHistogram1D(rapname.str(), i>1 ? 25 : 50, -5.0, 5.0); - _h_rap_jet_plus[i].reset(new LWH::Histogram1D(i > 1 ? 15 : 25, 0, 5)); - _h_rap_jet_minus[i].reset(new LWH::Histogram1D(i > 1 ? 15 : 25, 0, 5)); - - for (size_t j = i+1; j < min(size_t(3),m_njet); ++j) { - std::pair<size_t, size_t> ij = std::make_pair(i, j); - - stringstream detaname; - detaname << "jets_deta_" << i+1 << j+1; - _h_deta_jets.insert(make_pair(ij, bookHistogram1D(detaname.str(), 25, -5.0, 5.0))); - - stringstream dphiname; - dphiname << "jets_dphi_" << i+1 << j+1; - _h_dphi_jets.insert(make_pair(ij, bookHistogram1D(dphiname.str(), 25, 0.0, M_PI))); - - stringstream dRname; - dRname << "jets_dR_" << i+1 << j+1; - _h_dR_jets.insert(make_pair(ij, bookHistogram1D(dRname.str(), 25, 0.0, 5.0))); - } + _h_log10_R[i] = bookDataPointSet(Rname.str(), 100, 0.2, log10(0.5*sqrtS())); } stringstream Rname; Rname << "log10_R_" << m_njet; - _h_log10_R[m_njet] = bookDataPointSet(Rname.str(), 50, 0.2, log10(0.5*sqrtS())); - - _h_jet_multi_exclusive = bookHistogram1D("jet_multi_exclusive", m_njet+3, -0.5, m_njet+3-0.5); - _h_jet_multi_inclusive = bookHistogram1D("jet_multi_inclusive", m_njet+3, -0.5, m_njet+3-0.5); - _h_jet_multi_ratio = bookDataPointSet("jet_multi_ratio", m_njet+2, 0.5, m_njet+3-0.5); - _h_jet_HT = bookHistogram1D("jet_HT", logBinEdges(50, m_jetptcut, sqrtS()/GeV/2.0)); + _h_log10_R[m_njet] = bookDataPointSet(Rname.str(), 100, 0.2, log10(0.5*sqrtS())); } // Do the analysis - void MC_JetAnalysis::analyze(const Event & e) { + void MC_JetSplittings::analyze(const Event & e) { const double weight = e.weight(); const FastJets& jetpro = applyProjection<FastJets>(e, m_jetpro_name); @@ -124,128 +75,23 @@ } } - const Jets& jets = jetpro.jetsByPt(m_jetptcut); - - // The remaining direct jet observables - for (size_t i = 0; i < m_njet; ++i) { - if (jets.size() < i+1) continue; - _h_pT_jet[i]->fill(jets[i].momentum().pT()/GeV, weight); - // Check for numerical precision issues with jet masses - double m2_i = jets[i].momentum().mass2(); - if (m2_i < 0) { - if (m2_i < -1e-4) { - MSG_WARNING("Jet mass2 is negative: " << m2_i << " GeV^2. " - << "Truncating to 0.0, assuming numerical precision is to blame."); - } - m2_i = 0.0; - } - - // Jet mass - _h_mass_jet[i]->fill(sqrt(m2_i)/GeV, weight); - - // Jet eta - const double eta_i = jets[i].momentum().eta(); - _h_eta_jet[i]->fill(eta_i, weight); - if (eta_i > 0.0) { - _h_eta_jet_plus[i]->fill(eta_i, weight); - } else { - _h_eta_jet_minus[i]->fill(fabs(eta_i), weight); - } - - // Jet rapidity - const double rap_i = jets[i].momentum().rapidity(); - _h_rap_jet[i]->fill(rap_i, weight); - if (rap_i > 0.0) { - _h_rap_jet_plus[i]->fill(rap_i, weight); - } else { - _h_rap_jet_minus[i]->fill(fabs(rap_i), weight); - } - - // Inter-jet properties - for (size_t j = i+1; j < min(size_t(3),m_njet); ++j) { - if (jets.size() < j+1) continue; - std::pair<size_t, size_t> ij = std::make_pair(i, j); - double deta = jets[i].momentum().eta()-jets[j].momentum().eta(); - double dphi = deltaPhi(jets[i].momentum(),jets[j].momentum()); - double dR = deltaR(jets[i].momentum(), jets[j].momentum()); - _h_deta_jets[ij]->fill(deta, weight); - _h_dphi_jets[ij]->fill(dphi, weight); - _h_dR_jets[ij]->fill(dR, weight); - } - } - _h_jet_multi_exclusive->fill(jets.size(), weight); - - for (size_t i = 0; i < m_njet+2; ++i) { - if (jets.size() >= i) { - _h_jet_multi_inclusive->fill(i, weight); - } - } - - double HT=0.0; - foreach (const Jet& jet, jets) { - HT += jet.momentum().pT(); - } - _h_jet_HT->fill(HT, weight); } // Finalize - void MC_JetAnalysis::finalize() { + void MC_JetSplittings::finalize() { for (size_t i = 0; i < m_njet; ++i) { scale(_h_log10_d[i], crossSection()/sumOfWeights()); for (int ibin = 0; ibin<_h_log10_R[i]->size(); ++ibin) { IDataPoint* dp = _h_log10_R[i]->point(ibin); dp->coordinate(1)->setValue(dp->coordinate(1)->value()*crossSection()/sumOfWeights()); } - - scale(_h_pT_jet[i], crossSection()/sumOfWeights()); - scale(_h_mass_jet[i], crossSection()/sumOfWeights()); - scale(_h_eta_jet[i], crossSection()/sumOfWeights()); - scale(_h_rap_jet[i], crossSection()/sumOfWeights()); - - // Create eta/rapidity ratio plots - stringstream etaname; - etaname << "jet_eta_pmratio_" << i+1; - histogramFactory().divide(histoPath(etaname.str()), *_h_eta_jet_plus[i], *_h_eta_jet_minus[i]); - stringstream rapname; - rapname << "jet_y_pmratio_" << i+1; - histogramFactory().divide(histoPath(rapname.str()), *_h_rap_jet_plus[i], *_h_rap_jet_minus[i]); } for (int ibin = 0; ibin < _h_log10_R[m_njet]->size(); ++ibin) { IDataPoint* dp =_h_log10_R[m_njet]->point(ibin); dp->coordinate(1)->setValue(dp->coordinate(1)->value()*crossSection()/sumOfWeights()); } - - // Scale the d{eta,R} histograms - map<pair<size_t, size_t>, AIDA::IHistogram1D*>::iterator it; - for (it = _h_deta_jets.begin(); it != _h_deta_jets.end(); ++it) { - scale(it->second, crossSection()/sumOfWeights()); - } - for (it = _h_dphi_jets.begin(); it != _h_dphi_jets.end(); ++it) { - scale(it->second, crossSection()/sumOfWeights()); - } - for (it = _h_dR_jets.begin(); it != _h_dR_jets.end(); ++it) { - scale(it->second, crossSection()/sumOfWeights()); - } - - // Fill inclusive jet multi ratio - int Nbins = _h_jet_multi_inclusive->axis().bins(); - std::vector<double> ratio(Nbins-1, 0.0); - std::vector<double> err(Nbins-1, 0.0); - for (int i = 0; i < Nbins-1; ++i) { - if (_h_jet_multi_inclusive->binHeight(i) > 0.0 && _h_jet_multi_inclusive->binHeight(i+1) > 0.0) { - ratio[i] = _h_jet_multi_inclusive->binHeight(i+1)/_h_jet_multi_inclusive->binHeight(i); - double relerr_i = _h_jet_multi_inclusive->binError(i)/_h_jet_multi_inclusive->binHeight(i); - double relerr_j = _h_jet_multi_inclusive->binError(i+1)/_h_jet_multi_inclusive->binHeight(i+1); - err[i] = ratio[i] * (relerr_i + relerr_j); - } - } - _h_jet_multi_ratio->setCoordinate(1, ratio, err); - - scale(_h_jet_multi_exclusive, crossSection()/sumOfWeights()); - scale(_h_jet_multi_inclusive, crossSection()/sumOfWeights()); - scale(_h_jet_HT, crossSection()/sumOfWeights()); } Modified: branches/2012-06-aidarivet/src/Analyses/Makefile.am ============================================================================== --- branches/2012-06-aidarivet/src/Analyses/Makefile.am Wed Jan 23 09:17:39 2013 (r4104) +++ branches/2012-06-aidarivet/src/Analyses/Makefile.am Wed Jan 23 10:37:49 2013 (r4105) @@ -5,7 +5,8 @@ noinst_LTLIBRARIES = libRivetAnalysisTools.la libRivetAnalysisTools_la_SOURCES = \ - MC_JetAnalysis.cc + MC_JetAnalysis.cc \ + MC_JetSplittings.cc ## ANALYSIS CATEGORIES ##
More information about the Rivet-svn mailing list |