CMS 3D CMS Logo

NjettinessAdder.cc
Go to the documentation of this file.
2 
4 
6  : src_(iConfig.getParameter<edm::InputTag>("src")),
7  src_token_(consumes<edm::View<reco::Jet>>(src_)),
8  Njets_(iConfig.getParameter<std::vector<unsigned>>("Njets")),
9  measureDefinition_(iConfig.getParameter<unsigned>("measureDefinition")),
10  beta_(iConfig.getParameter<double>("beta")),
11  R0_(iConfig.getParameter<double>("R0")),
12  Rcutoff_(iConfig.getParameter<double>("Rcutoff")),
13  axesDefinition_(iConfig.getParameter<unsigned>("axesDefinition")),
14  nPass_(iConfig.getParameter<int>("nPass")),
15  akAxesR0_(iConfig.getParameter<double>("akAxesR0")) {
16  for (std::vector<unsigned>::const_iterator n = Njets_.begin(); n != Njets_.end(); ++n) {
17  std::ostringstream tauN_str;
18  tauN_str << "tau" << *n;
19 
20  produces<edm::ValueMap<float>>(tauN_str.str());
21  }
22 
23  // Get the measure definition
24  fastjet::contrib::NormalizedMeasure normalizedMeasure(beta_, R0_);
25  fastjet::contrib::UnnormalizedMeasure unnormalizedMeasure(beta_);
26  fastjet::contrib::OriginalGeometricMeasure geometricMeasure(beta_); // changed in 1.020
27  fastjet::contrib::NormalizedCutoffMeasure normalizedCutoffMeasure(beta_, R0_, Rcutoff_);
28  fastjet::contrib::UnnormalizedCutoffMeasure unnormalizedCutoffMeasure(beta_, Rcutoff_);
29  //fastjet::contrib::GeometricCutoffMeasure geometricCutoffMeasure (beta_,Rcutoff_); // removed in 1.020
30 
31  fastjet::contrib::MeasureDefinition const* measureDef = nullptr;
32  switch (measureDefinition_) {
34  measureDef = &unnormalizedMeasure;
35  break;
37  measureDef = &geometricMeasure;
38  break; // changed in 1.020
40  measureDef = &normalizedCutoffMeasure;
41  break;
43  measureDef = &unnormalizedCutoffMeasure;
44  break;
45  //case GeometricCutoffMeasure : measureDef = &geometricCutoffMeasure; break; // removed in 1.020
46  case NormalizedMeasure:
47  default:
48  measureDef = &normalizedMeasure;
49  break;
50  }
51 
52  // Get the axes definition
53  fastjet::contrib::KT_Axes kt_axes;
54  fastjet::contrib::CA_Axes ca_axes;
55  fastjet::contrib::AntiKT_Axes antikt_axes(akAxesR0_);
56  fastjet::contrib::WTA_KT_Axes wta_kt_axes;
57  fastjet::contrib::WTA_CA_Axes wta_ca_axes;
58  fastjet::contrib::OnePass_KT_Axes onepass_kt_axes;
59  fastjet::contrib::OnePass_CA_Axes onepass_ca_axes;
60  fastjet::contrib::OnePass_AntiKT_Axes onepass_antikt_axes(akAxesR0_);
61  fastjet::contrib::OnePass_WTA_KT_Axes onepass_wta_kt_axes;
62  fastjet::contrib::OnePass_WTA_CA_Axes onepass_wta_ca_axes;
63  fastjet::contrib::MultiPass_Axes multipass_axes(nPass_);
64 
65  fastjet::contrib::AxesDefinition const* axesDef = nullptr;
66  switch (axesDefinition_) {
67  case KT_Axes:
68  default:
69  axesDef = &kt_axes;
70  break;
71  case CA_Axes:
72  axesDef = &ca_axes;
73  break;
74  case AntiKT_Axes:
75  axesDef = &antikt_axes;
76  break;
77  case WTA_KT_Axes:
78  axesDef = &wta_kt_axes;
79  break;
80  case WTA_CA_Axes:
81  axesDef = &wta_ca_axes;
82  break;
83  case OnePass_KT_Axes:
84  axesDef = &onepass_kt_axes;
85  break;
86  case OnePass_CA_Axes:
87  axesDef = &onepass_ca_axes;
88  break;
90  axesDef = &onepass_antikt_axes;
91  break;
93  axesDef = &onepass_wta_kt_axes;
94  break;
96  axesDef = &onepass_wta_ca_axes;
97  break;
98  case MultiPass_Axes:
99  axesDef = &multipass_axes;
100  break;
101  };
102 
103  routine_ = std::unique_ptr<fastjet::contrib::Njettiness>(new fastjet::contrib::Njettiness(*axesDef, *measureDef));
104 }
105 
107  // read input collection
109  iEvent.getByToken(src_token_, jets);
110 
111  for (std::vector<unsigned>::const_iterator n = Njets_.begin(); n != Njets_.end(); ++n) {
112  std::ostringstream tauN_str;
113  tauN_str << "tau" << *n;
114 
115  // prepare room for output
116  std::vector<float> tauN;
117  tauN.reserve(jets->size());
118 
119  for (typename edm::View<reco::Jet>::const_iterator jetIt = jets->begin(); jetIt != jets->end(); ++jetIt) {
120  edm::Ptr<reco::Jet> jetPtr = jets->ptrAt(jetIt - jets->begin());
121 
122  float t = getTau(*n, jetPtr);
123 
124  tauN.push_back(t);
125  }
126 
127  auto outT = std::make_unique<edm::ValueMap<float>>();
128  edm::ValueMap<float>::Filler fillerT(*outT);
129  fillerT.insert(jets, tauN.begin(), tauN.end());
130  fillerT.fill();
131 
132  iEvent.put(std::move(outT), tauN_str.str());
133  }
134 }
135 
136 float NjettinessAdder::getTau(unsigned num, const edm::Ptr<reco::Jet>& object) const {
137  std::vector<fastjet::PseudoJet> FJparticles;
138  for (unsigned k = 0; k < object->numberOfDaughters(); ++k) {
139  const reco::CandidatePtr& dp = object->daughterPtr(k);
140  if (dp.isNonnull() && dp.isAvailable())
141  FJparticles.push_back(fastjet::PseudoJet(dp->px(), dp->py(), dp->pz(), dp->energy()));
142  else
143  edm::LogWarning("MissingJetConstituent") << "Jet constituent required for N-subjettiness computation is missing!";
144  }
145 
146  return routine_->getTau(num, FJparticles);
147 }
148 
unsigned measureDefinition_
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
unsigned axesDefinition_
std::unique_ptr< fastjet::contrib::Njettiness > routine_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
bool isAvailable() const
Definition: Ptr.h:229
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
Definition: Jet.py:1
std::vector< unsigned > Njets_
bool isNonnull() const
Checks for non-null.
Definition: Ptr.h:146
float getTau(unsigned num, const edm::Ptr< reco::Jet > &object) const
fixed size matrix
HLT enums.
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
NjettinessAdder(const edm::ParameterSet &iConfig)
edm::EDGetTokenT< edm::View< reco::Jet > > src_token_
def move(src, dest)
Definition: eostools.py:511