CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Private Attributes
QjetsAdder Class Reference

#include <QjetsAdder.h>

Inheritance diagram for QjetsAdder:
edm::stream::EDProducer<>

Public Member Functions

void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
 QjetsAdder (const edm::ParameterSet &iConfig)
 
 ~QjetsAdder () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Private Attributes

double cutoff_
 
double jetRad_
 
std::string mJetAlgo_
 
int ntrial_
 
QjetsPlugin qjetsAlgo_
 
int QjetsPreclustering_
 
edm::InputTag src_
 
edm::EDGetTokenT< edm::View
< reco::Jet > > 
src_token_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T...>
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T...>
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 13 of file QjetsAdder.h.

Constructor & Destructor Documentation

QjetsAdder::QjetsAdder ( const edm::ParameterSet iConfig)
inlineexplicit

Definition at line 15 of file QjetsAdder.h.

16  : src_(iConfig.getParameter<edm::InputTag>("src")),
18  qjetsAlgo_(iConfig.getParameter<double>("zcut"),
19  iConfig.getParameter<double>("dcutfctr"),
20  iConfig.getParameter<double>("expmin"),
21  iConfig.getParameter<double>("expmax"),
22  iConfig.getParameter<double>("rigidity")),
23  ntrial_(iConfig.getParameter<int>("ntrial")),
24  cutoff_(iConfig.getParameter<double>("cutoff")),
25  jetRad_(iConfig.getParameter<double>("jetRad")),
26  mJetAlgo_(iConfig.getParameter<std::string>("jetAlgo")),
27  QjetsPreclustering_(iConfig.getParameter<int>("preclustering")) {
28  produces<edm::ValueMap<float>>("QjetsVolatility");
29  }
int ntrial_
Definition: QjetsAdder.h:39
double jetRad_
Definition: QjetsAdder.h:41
QjetsPlugin qjetsAlgo_
Definition: QjetsAdder.h:38
int QjetsPreclustering_
Definition: QjetsAdder.h:43
double cutoff_
Definition: QjetsAdder.h:40
edm::EDGetTokenT< edm::View< reco::Jet > > src_token_
Definition: QjetsAdder.h:37
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::string mJetAlgo_
Definition: QjetsAdder.h:42
edm::InputTag src_
Definition: QjetsAdder.h:36
QjetsAdder::~QjetsAdder ( )
inlineoverride

Definition at line 31 of file QjetsAdder.h.

31 {}

Member Function Documentation

void QjetsAdder::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

Definition at line 11 of file QjetsAdder.cc.

References Exception, edm::Event::getByToken(), edm::RandomNumberGenerator::getEngine(), reco::Jet::getJetConstituents(), mps_fire::i, cuy::ii, fwrapper::jets, isotrackApplyRegressor::k, visualization-live-secondInstance_cfg::m, SiStripPI::mean, eostools::move(), reco::LeafCandidate::pt(), edm::Event::put(), mathSSE::sqrt(), and edm::Event::streamID().

11  {
12  // read input collection
13  //edm::Handle<edm::View<pat::Jet> > jets;
15  iEvent.getByToken(src_token_, jets);
16 
17  // prepare room for output
18  std::vector<float> QjetsVolatility;
19  QjetsVolatility.reserve(jets->size());
20 
21  for (typename edm::View<reco::Jet>::const_iterator jetIt = jets->begin(); jetIt != jets->end(); ++jetIt) {
22  reco::Jet newCand(*jetIt);
23 
24  if (newCand.pt() < cutoff_) {
25  QjetsVolatility.push_back(-1);
26  continue;
27  }
28 
29  //refill and recluster
30  vector<fastjet::PseudoJet> allconstits;
31  //for (unsigned k=0; k < newCand.getPFConstituents().size(); k++){
32  for (unsigned k = 0; k < newCand.getJetConstituents().size(); k++) {
33  const edm::Ptr<reco::Candidate> thisParticle = newCand.getJetConstituents().at(k);
34  allconstits.push_back(
35  fastjet::PseudoJet(thisParticle->px(), thisParticle->py(), thisParticle->pz(), thisParticle->energy()));
36  }
37 
38  fastjet::JetDefinition jetDef(fastjet::cambridge_algorithm, jetRad_);
39  if (mJetAlgo_ == "AK")
40  jetDef.set_jet_algorithm(fastjet::antikt_algorithm);
41  else if (mJetAlgo_ == "CA")
42  jetDef.set_jet_algorithm(fastjet::cambridge_algorithm);
43  else
44  throw cms::Exception("GroomedJetFiller") << " unknown jet algorithm " << std::endl;
45 
46  fastjet::ClusterSequence thisClustering_basic(allconstits, jetDef);
47  std::vector<fastjet::PseudoJet> out_jets_basic = sorted_by_pt(thisClustering_basic.inclusive_jets(cutoff_));
48  //std::cout << newCand.pt() << " " << out_jets_basic.size() <<std::endl;
49  if (out_jets_basic.size() !=
50  1) { // jet reclustering did not return exactly 1 jet, most likely due to the higher cutoff or large cone size. Use a recognizeable default value for this jet
51  QjetsVolatility.push_back(-1);
52  continue;
53  }
54 
55  // setup objects for qjets computation
56  fastjet::JetDefinition qjet_def(&qjetsAlgo_);
57 
58  std::vector<double> qjetmass;
59 
60  vector<fastjet::PseudoJet> constits;
61  unsigned int nqjetconstits = out_jets_basic.at(0)
62  .constituents()
63  .size(); // there should always be exactly one reclsutered jet => always "at(0)"
64  if (nqjetconstits < (unsigned int)QjetsPreclustering_)
65  constits = out_jets_basic.at(0).constituents();
66  else
67  constits = out_jets_basic.at(0).associated_cluster_sequence()->exclusive_subjets_up_to(out_jets_basic.at(0),
69 
71  CLHEP::HepRandomEngine* engine = &rng->getEngine(iEvent.streamID());
72  qjetsAlgo_.SetRNEngine(engine);
73  // create probabilistic recusterings
74  for (unsigned int ii = 0; ii < (unsigned int)ntrial_; ii++) {
75  //qjetsAlgo_.SetRandSeed(iEvent.id().event()*100 + (jetIt - jets->begin())*ntrial_ + ii );// set random seed for reprudcibility. We need a smarted scheme
76  fastjet::ClusterSequence qjet_seq(constits, qjet_def);
77  vector<fastjet::PseudoJet> inclusive_jets2 = sorted_by_pt(qjet_seq.inclusive_jets(cutoff_));
78  if (!inclusive_jets2.empty()) { // fill the massvalue only if the reclustering was successfull
79  qjetmass.push_back(inclusive_jets2[0].m());
80  }
81 
82  } //end loop on trials
83 
84  if (qjetmass.empty()) { //protection against dummy case
85  QjetsVolatility.push_back(-1);
86  continue;
87  }
88 
89  double mean = std::accumulate(qjetmass.begin(), qjetmass.end(), 0) / qjetmass.size();
90  float totalsquared = 0.;
91  for (unsigned int i = 0; i < qjetmass.size(); i++) {
92  totalsquared += (qjetmass[i] - mean) * (qjetmass[i] - mean);
93  }
94  float variance = sqrt(totalsquared / qjetmass.size());
95 
96  QjetsVolatility.push_back(variance / mean);
97  } //end loop on jets
98 
99  auto outQJV = std::make_unique<edm::ValueMap<float>>();
100  edm::ValueMap<float>::Filler fillerQJV(*outQJV);
101  fillerQJV.insert(jets, QjetsVolatility.begin(), QjetsVolatility.end());
102  fillerQJV.fill();
103 
104  iEvent.put(std::move(outQJV), "QjetsVolatility");
105 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
void SetRNEngine(CLHEP::HepRandomEngine *rnEngine)
Definition: QjetsPlugin.h:28
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
int ntrial_
Definition: QjetsAdder.h:39
Base class for all types of Jets.
Definition: Jet.h:20
int ii
Definition: cuy.py:589
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
double jetRad_
Definition: QjetsAdder.h:41
QjetsPlugin qjetsAlgo_
Definition: QjetsAdder.h:38
int QjetsPreclustering_
Definition: QjetsAdder.h:43
T sqrt(T t)
Definition: SSEVec.h:19
double cutoff_
Definition: QjetsAdder.h:40
vector< PseudoJet > jets
def move
Definition: eostools.py:511
edm::EDGetTokenT< edm::View< reco::Jet > > src_token_
Definition: QjetsAdder.h:37
std::string mJetAlgo_
Definition: QjetsAdder.h:42
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
StreamID streamID() const
Definition: Event.h:98

Member Data Documentation

double QjetsAdder::cutoff_
private

Definition at line 40 of file QjetsAdder.h.

double QjetsAdder::jetRad_
private

Definition at line 41 of file QjetsAdder.h.

std::string QjetsAdder::mJetAlgo_
private

Definition at line 42 of file QjetsAdder.h.

int QjetsAdder::ntrial_
private

Definition at line 39 of file QjetsAdder.h.

QjetsPlugin QjetsAdder::qjetsAlgo_
private

Definition at line 38 of file QjetsAdder.h.

int QjetsAdder::QjetsPreclustering_
private

Definition at line 43 of file QjetsAdder.h.

edm::InputTag QjetsAdder::src_
private

Definition at line 36 of file QjetsAdder.h.

edm::EDGetTokenT<edm::View<reco::Jet> > QjetsAdder::src_token_
private

Definition at line 37 of file QjetsAdder.h.