CMS 3D CMS Logo

TauGenJetProducer.cc
Go to the documentation of this file.
2 
4 
8 
12 
14 
15 using namespace std;
16 using namespace edm;
17 using namespace reco;
18 
20  : inputTagGenParticles_(iConfig.getParameter<InputTag>("GenParticles")),
21  tokenGenParticles_(consumes<GenParticleCollection>(inputTagGenParticles_)),
22  includeNeutrinos_(iConfig.getParameter<bool>("includeNeutrinos")),
23  verbose_(iConfig.getUntrackedParameter<bool>("verbose", false)) {
24  produces<GenJetCollection>();
25 }
26 
28 
31 
32  bool found = iEvent.getByToken(tokenGenParticles_, genParticles);
33 
34  if (!found) {
35  std::ostringstream err;
36  err << " cannot get collection: " << inputTagGenParticles_ << std::endl;
37  edm::LogError("TauGenJetProducer") << err.str();
38  throw cms::Exception("MissingProduct", err.str());
39  }
40 
41  auto pOutVisTaus = std::make_unique<GenJetCollection>();
42 
43  using namespace GenParticlesHelper;
44 
45  GenParticleRefVector allStatus2Taus;
46  findParticles(*genParticles, allStatus2Taus, 15, 2);
47 
48  for (IGR iTau = allStatus2Taus.begin(); iTau != allStatus2Taus.end(); ++iTau) {
49  // look for all status 1 (stable) descendents
50  GenParticleRefVector descendents;
51  findDescendents(*iTau, descendents, 1);
52 
53  // CV: skip status 2 taus that radiate-off a photon
54  // --> have a status 2 tau lepton in the list of descendents
55  GenParticleRefVector status2TauDaughters;
56  findDescendents(*iTau, status2TauDaughters, 2, 15);
57  if (!status2TauDaughters.empty())
58  continue;
59 
60  // loop on descendents, and take all except neutrinos
61  math::XYZTLorentzVector sumVisMom;
63  Jet::Constituents constituents;
64 
65  if (verbose_)
66  cout << "tau " << (*iTau) << endl;
67 
68  for (IGR igr = descendents.begin(); igr != descendents.end(); ++igr) {
69  int absPdgId = abs((*igr)->pdgId());
70 
71  // neutrinos
72  if (!includeNeutrinos_) {
73  if (absPdgId == 12 || absPdgId == 14 || absPdgId == 16)
74  continue;
75  }
76 
77  if (verbose_)
78  cout << "\t" << (*igr) << endl;
79 
80  charge += (*igr)->charge();
81  sumVisMom += (*igr)->p4();
82 
83  // need to convert the vector of reference to the constituents
84  // to a vector of pointers to build the genjet
85  constituents.push_back(refToPtr(*igr));
86  }
87 
90 
91  GenJet jet(sumVisMom, vertex, specific, constituents);
92 
93  if (charge != (*iTau)->charge())
94  std::cout << " charge of Tau: " << (*iTau) << " not equal to charge of sum of charge of all descendents. "
95  << std::endl;
96 
97  jet.setCharge(charge);
98  pOutVisTaus->push_back(jet);
99  }
100  iEvent.put(std::move(pOutVisTaus));
101 }
102 
TauGenJetProducer::TauGenJetProducer
TauGenJetProducer(const edm::ParameterSet &)
Definition: TauGenJetProducer.cc:19
GenParticlesHelper.h
edm::StreamID
Definition: StreamID.h:30
GenJetCollection.h
GenParticlesHelper::findParticles
void findParticles(const reco::GenParticleCollection &sourceParticles, reco::GenParticleRefVector &particleRefs, int pdgId, int status)
find all particles of a given pdgId and status
Definition: GenParticlesHelper.cc:8
electrons_cff.bool
bool
Definition: electrons_cff.py:366
reco::GenJet
Jets made from MC generator particles.
Definition: GenJet.h:23
MessageLogger.h
genParticles2HepMC_cfi.genParticles
genParticles
Definition: genParticles2HepMC_cfi.py:4
funct::false
false
Definition: Factorize.h:29
ESHandle.h
TauGenJetProducer
builds a GenJet from the visible daughters of each status 2 tau in the event.
Definition: TauGenJetProducer.h:24
TauGenJetProducer::produce
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
Definition: TauGenJetProducer.cc:29
edm
HLT enums.
Definition: AlignableModifier.h:19
TauGenJetProducer.h
gather_cfg.cout
cout
Definition: gather_cfg.py:144
edm::RefVector::begin
const_iterator begin() const
Initialize an iterator over the RefVector.
Definition: RefVector.h:223
reco::GenParticleCollection
std::vector< GenParticle > GenParticleCollection
collection of GenParticles
Definition: GenParticleFwd.h:13
TauGenJetProducer::inputTagGenParticles_
const edm::InputTag inputTagGenParticles_
Input PFCandidates.
Definition: TauGenJetProducer.h:34
GenParticlesHelper
Definition: GenParticlesHelper.h:8
edm::RefVector< GenParticleCollection >
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
newFWLiteAna.found
found
Definition: newFWLiteAna.py:118
edm::Handle
Definition: AssociativeIterator.h:50
TauGenJetProducer::tokenGenParticles_
const edm::EDGetTokenT< reco::GenParticleCollection > tokenGenParticles_
Definition: TauGenJetProducer.h:35
edm::refToPtr
Ptr< typename C::value_type > refToPtr(Ref< C, typename C::value_type, refhelper::FindUsingAdvance< C, typename C::value_type > > const &ref)
Definition: RefToPtr.h:18
reco::GenJet::Specific
Definition: GenJet.h:25
edm::RefVector::end
const_iterator end() const
Termination of iteration.
Definition: RefVector.h:228
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
TauGenJetProducer::verbose_
const bool verbose_
verbose ?
Definition: TauGenJetProducer.h:41
edm::RefVector::empty
bool empty() const
Is the RefVector empty.
Definition: RefVector.h:99
timingPdfMaker.specific
specific
Definition: timingPdfMaker.py:78
TauGenJetProducer::includeNeutrinos_
const bool includeNeutrinos_
if yes, neutrinos will be included, for debug purposes
Definition: TauGenJetProducer.h:38
ALCARECOTkAlJpsiMuMu_cff.charge
charge
Definition: ALCARECOTkAlJpsiMuMu_cff.py:47
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
edm::ParameterSet
Definition: ParameterSet.h:47
math::XYZPoint
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
iEvent
int iEvent
Definition: GenABIO.cc:224
RefToPtr.h
edm::EventSetup
Definition: EventSetup.h:58
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
submitPVResolutionJobs.err
err
Definition: submitPVResolutionJobs.py:85
TauGenJetProducer::~TauGenJetProducer
~TauGenJetProducer() override
Definition: TauGenJetProducer.cc:27
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
math::XYZTLorentzVector
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
metsig::jet
Definition: SignAlgoResolutions.h:47
Exception
Definition: hltDiff.cc:245
edm::RefVectorIterator
Definition: EDProductfwd.h:33
PixelTestBeamValidation_cfi.Charge
Charge
Definition: PixelTestBeamValidation_cfi.py:91
EventSetup.h
Exception.h
GenJet.h
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::Event
Definition: Event.h:73
GenParticlesHelper::findDescendents
void findDescendents(const reco::GenParticleRef &base, reco::GenParticleRefVector &descendents, int status, int pdgId=0)
find all descendents of a given status and pdgId (recursive)
Definition: GenParticlesHelper.cc:28
edm::InputTag
Definition: InputTag.h:15