CMS 3D CMS Logo

PATGenCandsFromSimTracksProducer.cc
Go to the documentation of this file.
1 
17 
22 
25 
26 #include <ext/algorithm>
27 
28 namespace pat {
30  public:
33 
34  private:
35  void produce(edm::Event &, const edm::EventSetup &) override;
36 
41  std::set<int> pdgIds_; // these are the ones we really use
42  std::vector<PdtEntry> pdts_; // these are needed before we get the EventSetup
43  std::set<int> motherPdgIds_; // these are the ones we really use
44  std::vector<PdtEntry> motherPdts_; // these are needed before we get the EventSetup
45 
48 
53 
57 
59  struct GlobalContext {
61  const edm::SimVertexContainer &simvtxs1,
63  const edm::Handle<std::vector<int> > &genBarcodes1,
64  bool barcodesAreSorted1,
67  : simtks(simtks1),
68  simvtxs(simvtxs1),
69  gens(gens1),
70  genBarcodes(genBarcodes1),
71  barcodesAreSorted(barcodesAreSorted1),
72  output(output1),
73  refprod(refprod1),
74  simTksProcessed() {}
75  // GEANT info
78  // PYTHIA info
82  // MY OUTPUT info
85  // BOOK-KEEPING
86  std::map<unsigned int, int> simTksProcessed; // key = sim track id;
87  // val = 0: not processed;
88  // i>0: (index+1) in my output
89  // i<0: -(index+1) in pythia [NOT USED]
90  };
91 
93  const SimTrack *findGeantMother(const SimTrack &tk, const GlobalContext &g) const;
100 
106  const GlobalContext &g) const;
107 
108  struct LessById {
109  bool operator()(const SimTrack &tk1, const SimTrack &tk2) const { return tk1.trackId() < tk2.trackId(); }
110  bool operator()(const SimTrack &tk1, unsigned int id) const { return tk1.trackId() < id; }
111  bool operator()(unsigned int id, const SimTrack &tk2) const { return id < tk2.trackId(); }
112  };
113  };
114 } // namespace pat
115 
116 using namespace std;
117 using namespace edm;
118 using namespace reco;
120 
121 PATGenCandsFromSimTracksProducer::PATGenCandsFromSimTracksProducer(const ParameterSet &cfg)
122  : firstEvent_(true),
123  simTracksToken_(consumes<SimTrackContainer>(cfg.getParameter<InputTag>("src"))), // source sim tracks
124  simVertexToken_(consumes<SimVertexContainer>(cfg.getParameter<InputTag>("src"))), // source sim vertices
125  setStatus_(cfg.getParameter<int32_t>("setStatus")), // set status of GenParticle to this code
126  filter_(cfg.existsAs<string>("filter") ? cfg.getParameter<string>("filter") : std::string("1 == 1")),
127  makeMotherLink_(cfg.existsAs<bool>("makeMotherLink") ? cfg.getParameter<bool>("makeMotherLink") : false),
128  writeAncestors_(cfg.existsAs<bool>("writeAncestors") ? cfg.getParameter<bool>("writeAncestors") : false),
129  genParticlesToken_(mayConsume<GenParticleCollection>(cfg.getParameter<InputTag>("genParticles"))),
130  genBarcodesToken_(mayConsume<std::vector<int> >(cfg.getParameter<InputTag>("genParticles"))) {
131  // Possibly allow a list of particle types
132  if (cfg.exists("particleTypes")) {
133  pdts_ = cfg.getParameter<vector<PdtEntry> >("particleTypes");
134  }
135  if (cfg.exists("motherTypes")) {
136  motherPdts_ = cfg.getParameter<vector<PdtEntry> >("motherTypes");
137  }
138 
140  edm::LogWarning("Configuration")
141  << "PATGenCandsFromSimTracksProducer: "
142  << "you have set 'writeAncestors' to 'true' and 'makeMotherLink' to false;"
143  << "GEANT particles with generator level (e.g.PYHIA) mothers won't have mother links.\n";
144  }
145  produces<GenParticleCollection>();
146 }
147 
149  assert(tk.genpartIndex() == -1); // MUST NOT be called with a PYTHIA track
150  if (!tk.noVertex()) {
151  const SimVertex &vtx = g.simvtxs[tk.vertIndex()];
152  if (!vtx.noParent()) {
153  unsigned int idx = vtx.parentIndex();
154  SimTrackContainer::const_iterator it = std::lower_bound(g.simtks.begin(), g.simtks.end(), idx, LessById());
155  if ((it != g.simtks.end()) && (it->trackId() == idx)) {
156  return &*it;
157  }
158  }
159  }
160  return nullptr;
161 }
162 
164  GlobalContext &g) const {
165  if (tk.genpartIndex() != -1)
167  const SimTrack *simMother = findGeantMother(tk, g);
168 
170  if (simMother != nullptr)
171  motherRef = findRef(*simMother, g);
172 
173  if (writeAncestors_) {
174  // If writing ancestors, I need to serialize myself, and then to return a ref to me
175  // But first check if I've already been serialized
176  std::map<unsigned int, int>::const_iterator it = g.simTksProcessed.find(tk.trackId());
177  if (it != g.simTksProcessed.end()) {
178  // just return a ref to it
179  assert(it->second > 0);
180  return edm::Ref<reco::GenParticleCollection>(g.refprod, (it->second) - 1);
181  } else {
182  // make genParticle, save, update the map, and return ref to myself
183  reco::GenParticle p = makeGenParticle_(tk, motherRef, g);
184  g.output.push_back(p);
185  g.simTksProcessed[tk.trackId()] = g.output.size();
186  return edm::Ref<reco::GenParticleCollection>(g.refprod, g.output.size() - 1);
187  }
188  } else {
189  // Otherwise, I just return a ref to my mum
190  return motherRef;
191  }
192 }
193 
195  const GlobalContext &g) const {
196  assert(st.genpartIndex() != -1);
197  // Note that st.genpartIndex() is the barcode, not the index within GenParticleCollection, so I have to search the particle
198  std::vector<int>::const_iterator it;
199  if (g.barcodesAreSorted) {
200  it = std::lower_bound(g.genBarcodes->begin(), g.genBarcodes->end(), st.genpartIndex());
201  } else {
202  it = std::find(g.genBarcodes->begin(), g.genBarcodes->end(), st.genpartIndex());
203  }
204 
205  // Check that I found something
206  // I need to check '*it == st.genpartIndex()' because lower_bound just finds the right spot for an item in a sorted list, not the item
207  if ((it != g.genBarcodes->end()) && (*it == st.genpartIndex())) {
208  return reco::GenParticleRef(g.gens, it - g.genBarcodes->begin());
209  } else {
210  return reco::GenParticleRef();
211  }
212 }
213 
215  const SimTrack &tk, const edm::Ref<reco::GenParticleCollection> &mother, const GlobalContext &g) const {
216  // Make up a GenParticleCandidate from the GEANT track info.
217  int charge = static_cast<int>(tk.charge());
218  const Particle::LorentzVector &p4 = tk.momentum();
219  Particle::Point vtx; // = (0,0,0) by default
220  if (!tk.noVertex())
221  vtx = g.simvtxs[tk.vertIndex()].position();
222  GenParticle gp(charge, p4, vtx, tk.type(), setStatus_, true);
223  if (mother.isNonnull())
224  gp.addMother(mother);
225  return gp;
226 }
227 
229  if (firstEvent_) {
230  if (!pdts_.empty()) {
231  pdgIds_.clear();
232  for (vector<PdtEntry>::iterator itp = pdts_.begin(), edp = pdts_.end(); itp != edp; ++itp) {
233  itp->setup(iSetup); // decode string->pdgId and vice-versa
234  pdgIds_.insert(std::abs(itp->pdgId()));
235  }
236  pdts_.clear();
237  }
238  if (!motherPdts_.empty()) {
239  motherPdgIds_.clear();
240  for (vector<PdtEntry>::iterator itp = motherPdts_.begin(), edp = motherPdts_.end(); itp != edp; ++itp) {
241  itp->setup(iSetup); // decode string->pdgId and vice-versa
242  motherPdgIds_.insert(std::abs(itp->pdgId()));
243  }
244  motherPdts_.clear();
245  }
246  firstEvent_ = false;
247  }
248 
249  // Simulated tracks (i.e. GEANT particles).
250  Handle<SimTrackContainer> simtracks;
251  event.getByToken(simTracksToken_, simtracks);
252 
253  // Need to check that SimTrackContainer is sorted; otherwise, copy and sort :-(
254  std::unique_ptr<SimTrackContainer> simtracksTmp;
255  const SimTrackContainer *simtracksSorted = &*simtracks;
257  if (!__gnu_cxx::is_sorted(simtracks->begin(), simtracks->end(), LessById())) {
258  simtracksTmp.reset(new SimTrackContainer(*simtracks));
259  std::sort(simtracksTmp->begin(), simtracksTmp->end(), LessById());
260  simtracksSorted = &*simtracksTmp;
261  }
262  }
263 
264  // Get the associated vertices
265  Handle<SimVertexContainer> simvertices;
266  event.getByToken(simVertexToken_, simvertices);
267 
268  // Get the GenParticles and barcodes, if needed to set mother links
270  Handle<std::vector<int> > genBarcodes;
271  bool barcodesAreSorted = true;
272  if (makeMotherLink_) {
273  event.getByToken(genParticlesToken_, gens);
274  event.getByToken(genBarcodesToken_, genBarcodes);
275  if (gens->size() != genBarcodes->size())
276  throw cms::Exception("Corrupt data") << "Barcodes not of the same size as GenParticles!\n";
277  barcodesAreSorted = __gnu_cxx::is_sorted(genBarcodes->begin(), genBarcodes->end());
278  }
279 
280  // make the output collection
281  auto cands = std::make_unique<GenParticleCollection>();
282  edm::RefProd<GenParticleCollection> refprod = event.getRefBeforePut<GenParticleCollection>();
283 
284  GlobalContext globals(*simtracksSorted, *simvertices, gens, genBarcodes, barcodesAreSorted, *cands, refprod);
285 
286  for (SimTrackContainer::const_iterator isimtrk = simtracks->begin(); isimtrk != simtracks->end(); ++isimtrk) {
287  // Skip PYTHIA tracks.
288  if (isimtrk->genpartIndex() != -1)
289  continue;
290 
291  // Maybe apply the PdgId filter
292  if (!pdgIds_.empty()) { // if we have a filter on pdg ids
293  if (pdgIds_.find(std::abs(isimtrk->type())) == pdgIds_.end())
294  continue;
295  }
296 
298 
299  // Maybe apply filter on the particle
300  if (!(filter_(genp)))
301  continue;
302 
303  if (!motherPdgIds_.empty()) {
304  const SimTrack *motherSimTk = findGeantMother(*isimtrk, globals);
305  if (motherSimTk == nullptr)
306  continue;
307  if (motherPdgIds_.find(std::abs(motherSimTk->type())) == motherPdgIds_.end())
308  continue;
309  }
310 
312  Ref<GenParticleCollection> motherRef;
313  const SimTrack *mother = findGeantMother(*isimtrk, globals);
314  if (mother != nullptr)
315  motherRef = findRef(*mother, globals);
316  if (motherRef.isNonnull())
317  genp.addMother(motherRef);
318  }
319 
320  cands->push_back(genp);
321  }
322 
323  // Write to the Event, and get back a handle (which can be useful for debugging)
325 
326 #ifdef DEBUG_PATGenCandsFromSimTracksProducer
327  std::cout << "Produced a list of " << orphans->size() << " genParticles." << std::endl;
328  for (GenParticleCollection::const_iterator it = orphans->begin(), ed = orphans->end(); it != ed; ++it) {
329  std::cout << " ";
330  std::cout << "GenParticle #" << (it - orphans->begin()) << ": pdgId " << it->pdgId() << ", pt = " << it->pt()
331  << ", eta = " << it->eta() << ", phi = " << it->phi() << ", rho = " << it->vertex().Rho()
332  << ", z = " << it->vertex().Z() << std::endl;
333  edm::Ref<GenParticleCollection> mom = it->motherRef();
334  size_t depth = 2;
335  while (mom.isNonnull()) {
336  if (mom.id() == orphans.id()) {
337  // I need to re-make the ref because they are not working until this module returns.
338  mom = edm::Ref<GenParticleCollection>(orphans, mom.key());
339  }
340  for (size_t i = 0; i < depth; ++i)
341  std::cout << " ";
342  std::cout << "GenParticleRef [" << mom.id() << "/" << mom.key() << "]: pdgId " << mom->pdgId()
343  << ", status = " << mom->status() << ", pt = " << mom->pt() << ", eta = " << mom->eta()
344  << ", phi = " << mom->phi() << ", rho = " << mom->vertex().Rho() << ", z = " << mom->vertex().Z()
345  << std::endl;
346  if (mom.id() != orphans.id())
347  break;
348  if ((mom->motherRef().id() == mom.id()) && (mom->motherRef().key() == mom.key())) {
349  throw cms::Exception("Corrupt Data") << "A particle is it's own mother.\n";
350  }
351  mom = mom->motherRef();
352  depth++;
353  }
354  }
355  std::cout << std::endl;
356 #endif
357 }
358 
edm::RefProd< reco::GenParticleCollection >
pat::PATGenCandsFromSimTracksProducer::GlobalContext::genBarcodes
const edm::Handle< std::vector< int > > & genBarcodes
Definition: PATGenCandsFromSimTracksProducer.cc:80
reco::GenParticleRef
edm::Ref< GenParticleCollection > GenParticleRef
persistent reference to a GenParticle
Definition: GenParticleFwd.h:17
CoreSimTrack::momentum
const math::XYZTLorentzVectorD & momentum() const
Definition: CoreSimTrack.h:19
electrons_cff.bool
bool
Definition: electrons_cff.py:372
mps_fire.i
i
Definition: mps_fire.py:355
pat::PATGenCandsFromSimTracksProducer::GlobalContext::simTksProcessed
std::map< unsigned int, int > simTksProcessed
Definition: PATGenCandsFromSimTracksProducer.cc:86
SimVertex
Definition: SimVertex.h:5
skim900GeV_StreamA_MinBiasPD_cfg.output1
output1
Definition: skim900GeV_StreamA_MinBiasPD_cfg.py:212
pat::PATGenCandsFromSimTracksProducer::makeMotherLink_
bool makeMotherLink_
If true, I'll try to make a link from the GEANT particle to a GenParticle.
Definition: PATGenCandsFromSimTracksProducer.cc:50
funct::false
false
Definition: Factorize.h:34
pat::PATGenCandsFromSimTracksProducer::GlobalContext::gens
const edm::Handle< reco::GenParticleCollection > & gens
Definition: PATGenCandsFromSimTracksProducer.cc:79
reco::GenParticle
Definition: GenParticle.h:21
EgammaValidation_cff.genp
genp
produce generated paricles in acceptance #
Definition: EgammaValidation_cff.py:115
pat::PATGenCandsFromSimTracksProducer::filter_
const StrFilter filter_
Definition: PATGenCandsFromSimTracksProducer.cc:47
pat::PATGenCandsFromSimTracksProducer::motherPdts_
std::vector< PdtEntry > motherPdts_
Definition: PATGenCandsFromSimTracksProducer.cc:44
pat::PATGenCandsFromSimTracksProducer::GlobalContext::simtks
const edm::SimTrackContainer & simtks
Definition: PATGenCandsFromSimTracksProducer.cc:76
edm::EDGetTokenT< edm::SimTrackContainer >
edm
HLT enums.
Definition: AlignableModifier.h:19
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
gather_cfg.cout
cout
Definition: gather_cfg.py:144
reco::GenParticleCollection
std::vector< GenParticle > GenParticleCollection
collection of GenParticles
Definition: GenParticleFwd.h:13
pat::PATGenCandsFromSimTracksProducer::simTracksToken_
edm::EDGetTokenT< edm::SimTrackContainer > simTracksToken_
Definition: PATGenCandsFromSimTracksProducer.cc:38
cms::cuda::assert
assert(be >=bs)
EDProducer.h
CoreSimTrack::charge
float charge() const
charge
Definition: CoreSimTrack.cc:17
pat::PATGenCandsFromSimTracksProducer::pdts_
std::vector< PdtEntry > pdts_
Definition: PATGenCandsFromSimTracksProducer.cc:42
pat::PATGenCandsFromSimTracksProducer::findRef
edm::Ref< reco::GenParticleCollection > findRef(const SimTrack &tk, GlobalContext &g) const
Definition: PATGenCandsFromSimTracksProducer.cc:163
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
pat::PATGenCandsFromSimTracksProducer::GlobalContext::simvtxs
const edm::SimVertexContainer & simvtxs
Definition: PATGenCandsFromSimTracksProducer.cc:77
spr::find
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
edm::Handle< reco::GenParticleCollection >
training_settings.idx
idx
Definition: training_settings.py:16
GenParticle
Definition: GenParticle.py:1
pat::PATGenCandsFromSimTracksProducer::setStatus_
int setStatus_
Definition: PATGenCandsFromSimTracksProducer.cc:40
pat::PATGenCandsFromSimTracksProducer
Produces reco::GenParticle from SimTracks.
Definition: PATGenCandsFromSimTracksProducer.cc:29
pat::PATGenCandsFromSimTracksProducer::findGeantMother
const SimTrack * findGeantMother(const SimTrack &tk, const GlobalContext &g) const
Find the mother of a given GEANT track (or NULL if it can't be found).
Definition: PATGenCandsFromSimTracksProducer.cc:148
edm::Ref
Definition: AssociativeIterator.h:58
GenParticle.h
SimTrack::noVertex
bool noVertex() const
Definition: SimTrack.h:31
pat::PATGenCandsFromSimTracksProducer::GlobalContext::refprod
const edm::RefProd< reco::GenParticleCollection > & refprod
Definition: PATGenCandsFromSimTracksProducer.cc:84
MakerMacros.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
pat::PATGenCandsFromSimTracksProducer::LessById
Definition: PATGenCandsFromSimTracksProducer.cc:108
GenParticleFwd.h
pat::PATGenCandsFromSimTracksProducer::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: PATGenCandsFromSimTracksProducer.cc:228
pat::PATGenCandsFromSimTracksProducer::firstEvent_
bool firstEvent_
Definition: PATGenCandsFromSimTracksProducer.cc:37
cuda_std::lower_bound
__host__ constexpr __device__ RandomIt lower_bound(RandomIt first, RandomIt last, const T &value, Compare comp={})
Definition: cudastdAlgorithm.h:27
LEDCalibrationChannels.depth
depth
Definition: LEDCalibrationChannels.py:65
badGlobalMuonTaggersAOD_cff.vtx
vtx
Definition: badGlobalMuonTaggersAOD_cff.py:5
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::LogWarning
Definition: MessageLogger.h:141
ALCARECOTkAlJpsiMuMu_cff.charge
charge
Definition: ALCARECOTkAlJpsiMuMu_cff.py:47
pat::PATGenCandsFromSimTracksProducer::genBarcodesToken_
edm::EDGetTokenT< std::vector< int > > genBarcodesToken_
Definition: PATGenCandsFromSimTracksProducer.cc:56
runTauDisplay.gp
gp
Definition: runTauDisplay.py:431
funct::true
true
Definition: Factorize.h:173
edm::ParameterSet
Definition: ParameterSet.h:36
Event.h
pat::PATGenCandsFromSimTracksProducer::simVertexToken_
edm::EDGetTokenT< edm::SimVertexContainer > simVertexToken_
Definition: PATGenCandsFromSimTracksProducer.cc:39
edm::Ref::isNonnull
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
PdtEntry.h
createfilelist.int
int
Definition: createfilelist.py:10
pat::PATGenCandsFromSimTracksProducer::makeGenParticle_
reco::GenParticle makeGenParticle_(const SimTrack &tk, const edm::Ref< reco::GenParticleCollection > &mother, const GlobalContext &g) const
Make a GenParticle for this SimTrack, with a given mother.
Definition: PATGenCandsFromSimTracksProducer.cc:214
pat::PATGenCandsFromSimTracksProducer::GlobalContext::barcodesAreSorted
bool barcodesAreSorted
Definition: PATGenCandsFromSimTracksProducer.cc:81
p4
double p4[4]
Definition: TauolaWrapper.h:92
edm::stream::EDProducer
Definition: EDProducer.h:38
pat::PATGenCandsFromSimTracksProducer::motherPdgIds_
std::set< int > motherPdgIds_
Definition: PATGenCandsFromSimTracksProducer.cc:43
CoreSimTrack::type
int type() const
particle type (HEP PDT convension)
Definition: CoreSimTrack.h:22
edm::EventSetup
Definition: EventSetup.h:57
pat
Definition: HeavyIon.h:7
pat::PATGenCandsFromSimTracksProducer::GlobalContext::output
reco::GenParticleCollection & output
Definition: PATGenCandsFromSimTracksProducer.cc:83
pat::PATGenCandsFromSimTracksProducer::PATGenCandsFromSimTracksProducer
PATGenCandsFromSimTracksProducer(const edm::ParameterSet &)
Definition: PATGenCandsFromSimTracksProducer.cc:121
looper.cfg
cfg
Definition: looper.py:297
CoreSimTrack::trackId
unsigned int trackId() const
Definition: CoreSimTrack.h:31
pat::PATGenCandsFromSimTracksProducer::GlobalContext::GlobalContext
GlobalContext(const edm::SimTrackContainer &simtks1, const edm::SimVertexContainer &simvtxs1, const edm::Handle< reco::GenParticleCollection > &gens1, const edm::Handle< std::vector< int > > &genBarcodes1, bool barcodesAreSorted1, reco::GenParticleCollection &output1, const edm::RefProd< reco::GenParticleCollection > &refprod1)
Definition: PATGenCandsFromSimTracksProducer.cc:60
edm::OrphanHandleBase::id
ProductID id() const
Definition: OrphanHandleBase.cc:6
edm::Ref::id
ProductID id() const
Accessor for product ID.
Definition: Ref.h:244
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
edm::OrphanHandle
Definition: EDProductfwd.h:39
StringCutObjectSelector.h
pat::PATGenCandsFromSimTracksProducer::~PATGenCandsFromSimTracksProducer
~PATGenCandsFromSimTracksProducer() override
Definition: PATGenCandsFromSimTracksProducer.cc:32
edm::SimTrackContainer
std::vector< SimTrack > SimTrackContainer
Definition: SimTrackContainer.h:12
SimTrack
Definition: SimTrack.h:6
Frameworkfwd.h
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
StringCutObjectSelector< reco::GenParticle >
Exception
Definition: hltDiff.cc:246
pat::PATGenCandsFromSimTracksProducer::LessById::operator()
bool operator()(const SimTrack &tk1, unsigned int id) const
Definition: PATGenCandsFromSimTracksProducer.cc:110
pat::PATGenCandsFromSimTracksProducer::writeAncestors_
bool writeAncestors_
If true, I'll save GenParticles corresponding to the ancestors of this GEANT particle....
Definition: PATGenCandsFromSimTracksProducer.cc:52
pat::PATGenCandsFromSimTracksProducer::GlobalContext
Global context for all recursive methods.
Definition: PATGenCandsFromSimTracksProducer.cc:59
HLT_2018_cff.cands
cands
Definition: HLT_2018_cff.py:13762
SimTrack::vertIndex
int vertIndex() const
index of the vertex in the Event container (-1 if no vertex)
Definition: SimTrack.h:30
pat::PATGenCandsFromSimTracksProducer::genParticlesToken_
edm::EDGetTokenT< reco::GenParticleCollection > genParticlesToken_
Collection of GenParticles I need to make refs to. It must also have its associated vector<int> of ba...
Definition: PATGenCandsFromSimTracksProducer.cc:55
pat::PATGenCandsFromSimTracksProducer::LessById::operator()
bool operator()(const SimTrack &tk1, const SimTrack &tk2) const
Definition: PATGenCandsFromSimTracksProducer.cc:109
edm::Ref::key
key_type key() const
Accessor for product key.
Definition: Ref.h:250
cms::Exception
Definition: Exception.h:70
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ParameterSet.h
pat::PATGenCandsFromSimTracksProducer::pdgIds_
std::set< int > pdgIds_
Definition: PATGenCandsFromSimTracksProducer.cc:41
reco::Candidate::LorentzVector
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:36
pat::PATGenCandsFromSimTracksProducer::StrFilter
StringCutObjectSelector< reco::GenParticle > StrFilter
Definition: PATGenCandsFromSimTracksProducer.cc:46
reco::Candidate::Point
math::XYZPoint Point
point in the space
Definition: Candidate.h:40
event
Definition: event.py:1
edm::Event
Definition: Event.h:73
SimTrack::genpartIndex
int genpartIndex() const
index of the corresponding Generator particle in the Event container (-1 if no Genpart)
Definition: SimTrack.h:34
SimTrackContainer.h
edm::SimVertexContainer
std::vector< SimVertex > SimVertexContainer
Definition: SimVertexContainer.h:12
edm::InputTag
Definition: InputTag.h:15
SimVertexContainer.h
g
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
pat::PATGenCandsFromSimTracksProducer::LessById::operator()
bool operator()(unsigned int id, const SimTrack &tk2) const
Definition: PATGenCandsFromSimTracksProducer.cc:111
pat::PATGenCandsFromSimTracksProducer::generatorRef_
edm::Ref< reco::GenParticleCollection > generatorRef_(const SimTrack &tk, const GlobalContext &g) const
Used by findRef if the track is a PYTHIA particle.
Definition: PATGenCandsFromSimTracksProducer.cc:194