CMS 3D CMS Logo

GenParticleProducer.cc
Go to the documentation of this file.
1 /* \class GenParticleProducer
2  *
3  * \author Luca Lista, INFN
4  *
5  * Convert HepMC GenEvent format into a collection of type
6  * CandidateCollection containing objects of type GenParticle
7  *
8  *
9  */
19 
20 #include <vector>
21 #include <string>
22 #include <unordered_map>
23 
24 namespace edm {
25  class ParameterSet;
26 }
27 namespace HepMC {
28  class GenParticle;
29  class GenEvent;
30 } // namespace HepMC
31 
32 static constexpr int PDGCacheMax = 32768;
33 
34 namespace {
35  struct IDto3Charge {
36  IDto3Charge(HepPDT::ParticleDataTable const&, bool abortOnUnknownPDGCode);
37 
38  int chargeTimesThree(int) const;
39 
40  private:
41  std::vector<int> chargeP_, chargeM_;
42  std::unordered_map<int, int> chargeMap_;
43  bool abortOnUnknownPDGCode_;
44  };
45 
46  IDto3Charge::IDto3Charge(HepPDT::ParticleDataTable const& iTable, bool iAbortOnUnknownPDGCode)
47  : chargeP_(PDGCacheMax, 0), chargeM_(PDGCacheMax, 0), abortOnUnknownPDGCode_(iAbortOnUnknownPDGCode) {
48  for (auto const& p : iTable) {
49  const HepPDT::ParticleID& id = p.first;
50  int pdgId = id.pid(), apdgId = std::abs(pdgId);
51  int q3 = id.threeCharge();
52  if (apdgId < PDGCacheMax && pdgId > 0) {
53  chargeP_[apdgId] = q3;
54  chargeM_[apdgId] = -q3;
55  } else if (apdgId < PDGCacheMax) {
56  chargeP_[apdgId] = -q3;
57  chargeM_[apdgId] = q3;
58  } else {
59  chargeMap_.emplace(pdgId, q3);
60  chargeMap_.emplace(-pdgId, -q3);
61  }
62  }
63  }
64 
65  int IDto3Charge::chargeTimesThree(int id) const {
66  if (std::abs(id) < PDGCacheMax)
67  return id > 0 ? chargeP_[id] : chargeM_[-id];
68  auto f = chargeMap_.find(id);
69  if (f == chargeMap_.end()) {
70  if (abortOnUnknownPDGCode_)
71  throw edm::Exception(edm::errors::LogicError) << "invalid PDG id: " << id;
72  else
73  return HepPDT::ParticleID(id).threeCharge();
74  }
75  return f->second;
76  }
77 
78 } // namespace
79 
80 class GenParticleProducer : public edm::global::EDProducer<edm::RunCache<IDto3Charge>> {
81 public:
85  ~GenParticleProducer() override;
86 
88  void produce(edm::StreamID, edm::Event& e, const edm::EventSetup&) const override;
89  std::shared_ptr<IDto3Charge> globalBeginRun(const edm::Run&, const edm::EventSetup&) const override;
90  void globalEndRun(edm::Run const&, edm::EventSetup const&) const override{};
91 
92  bool convertParticle(reco::GenParticle& cand, const HepMC::GenParticle* part, const IDto3Charge& id2Charge) const;
94  const HepMC::GenParticle* part,
95  reco::GenParticleRefProd const& ref,
96  size_t index,
97  std::unordered_map<int, size_t>& barcodes) const;
98  bool fillIndices(const HepMC::GenEvent* mc,
99  std::vector<const HepMC::GenParticle*>& particles,
100  std::vector<int>& barCodeVector,
101  int offset,
102  std::unordered_map<int, size_t>& barcodes) const;
103 
104 private:
107  std::vector<edm::EDGetTokenT<edm::HepMCProduct>> vectorSrcTokens_;
110 
115 
118  bool useCF_;
119 
122 };
123 
125 
126 //#include "SimDataFormats/HiGenData/interface/SubEventMap.h"
128 
137 
138 #include <fstream>
139 #include <algorithm>
140 using namespace edm;
141 using namespace reco;
142 using namespace std;
143 using namespace HepMC;
144 
145 static const double mmToCm = 0.1;
146 static const double mmToNs = 1.0 / 299792458e-6;
147 
149  : abortOnUnknownPDGCode_(cfg.getUntrackedParameter<bool>("abortOnUnknownPDGCode", true)),
150  saveBarCodes_(cfg.getUntrackedParameter<bool>("saveBarCodes", false)),
151  doSubEvent_(cfg.getUntrackedParameter<bool>("doSubEvent", false)),
152  useCF_(cfg.getUntrackedParameter<bool>("useCrossingFrame", false)) {
153  particleTableToken_ = esConsumes<HepPDT::ParticleDataTable, edm::DefaultRecord, edm::Transition::BeginRun>();
154  produces<GenParticleCollection>();
155  produces<math::XYZPointF>("xyz0");
156  produces<float>("t0");
157  if (saveBarCodes_) {
158  std::string alias(cfg.getParameter<std::string>("@module_label"));
159  produces<vector<int>>().setBranchAlias(alias + "BarCodes");
160  }
161 
162  if (useCF_)
163  mixToken_ =
164  mayConsume<CrossingFrame<HepMCProduct>>(InputTag(cfg.getParameter<std::string>("mix"), "generatorSmeared"));
165  else
166  srcToken_ = mayConsume<HepMCProduct>(cfg.getParameter<InputTag>("src"));
167 }
168 
170 
171 std::shared_ptr<IDto3Charge> GenParticleProducer::globalBeginRun(const Run&, const EventSetup& es) const {
173  return std::make_shared<IDto3Charge>(*pdt, abortOnUnknownPDGCode_);
174 }
175 
177  std::unordered_map<int, size_t> barcodes;
178 
179  size_t totalSize = 0;
180  const GenEvent* mc = nullptr;
181  MixCollection<HepMCProduct>* cfhepmcprod = nullptr;
182  size_t npiles = 1;
183 
184  if (useCF_) {
186  evt.getByToken(mixToken_, cf);
187  cfhepmcprod = new MixCollection<HepMCProduct>(cf.product());
188  npiles = cfhepmcprod->size();
189  LogDebug("GenParticleProducer") << "npiles : " << npiles << endl;
190  for (unsigned int icf = 0; icf < npiles; ++icf) {
191  LogDebug("GenParticleProducer") << "subSize : " << cfhepmcprod->getObject(icf).GetEvent()->particles_size()
192  << endl;
193  totalSize += cfhepmcprod->getObject(icf).GetEvent()->particles_size();
194  }
195  LogDebug("GenParticleProducer") << "totalSize : " << totalSize << endl;
196  } else {
198  evt.getByToken(srcToken_, mcp);
199  mc = mcp->GetEvent();
200  if (mc == nullptr)
201  throw edm::Exception(edm::errors::InvalidReference) << "HepMC has null pointer to GenEvent" << endl;
202  totalSize = mc->particles_size();
203  }
204 
205  // initialise containers
206  const size_t size = totalSize;
207  vector<const HepMC::GenParticle*> particles(size);
208  auto candsPtr = std::make_unique<GenParticleCollection>(size);
209  auto barCodeVector = std::make_unique<vector<int>>(size);
210  std::unique_ptr<math::XYZPointF> xyz0Ptr(new math::XYZPointF(0., 0., 0.));
211  std::unique_ptr<float> t0Ptr(new float(0.f));
213  GenParticleCollection& cands = *candsPtr;
214  size_t offset = 0;
215  size_t suboffset = 0;
216 
217  IDto3Charge const& id2Charge = *runCache(evt.getRun().index());
219  if (doSubEvent_ || useCF_) {
220  for (size_t ipile = 0; ipile < npiles; ++ipile) {
221  LogDebug("GenParticleProducer") << "mixed object ipile : " << ipile << endl;
222  barcodes.clear();
223  if (useCF_)
224  mc = cfhepmcprod->getObject(ipile).GetEvent();
225 
226  //Look whether heavy ion/signal event
227  bool isHI = false;
228  const HepMC::HeavyIon* hi = mc->heavy_ion();
229  if (hi && hi->Ncoll_hard() > 1)
230  isHI = true;
231  size_t num_particles = mc->particles_size();
232  LogDebug("GenParticleProducer") << "num_particles : " << num_particles << endl;
233  if (ipile == 0) {
234  auto origin = (*mc->vertices_begin())->position();
235  xyz0Ptr->SetXYZ(origin.x() * mmToCm, origin.y() * mmToCm, origin.z() * mmToCm);
236  *t0Ptr = origin.t() * mmToNs;
237  }
238  fillIndices(mc, particles, *barCodeVector, offset, barcodes);
239  // fill output collection and save association
240  for (size_t ipar = offset; ipar < offset + num_particles; ++ipar) {
241  const HepMC::GenParticle* part = particles[ipar];
242  reco::GenParticle& cand = cands[ipar];
243  // convert HepMC::GenParticle to new reco::GenParticle
244  convertParticle(cand, part, id2Charge);
245  cand.resetDaughters(ref.id());
246  }
247 
248  for (size_t d = offset; d < offset + num_particles; ++d) {
250  const GenVertex* productionVertex = part->production_vertex();
251  int sub_id = 0;
252  if (productionVertex != nullptr) {
253  sub_id = productionVertex->id();
254  if (!isHI)
255  sub_id = 0;
256  // search barcode map and attach daughters
257  fillDaughters(cands, part, ref, d, barcodes);
258  } else {
259  const GenVertex* endVertex = part->end_vertex();
260  if (endVertex != nullptr)
261  sub_id = endVertex->id();
262  else
263  throw cms::Exception("SubEventID")
264  << "SubEvent not determined. Particle has no production and no end vertex!" << endl;
265  }
266  if (sub_id < 0)
267  sub_id = 0;
268  int new_id = sub_id + suboffset;
269  GenParticleRef dref(ref, d);
270  cands[d].setCollisionId(new_id); // For new GenParticle
271  LogDebug("VertexId") << "SubEvent offset 3 : " << suboffset;
272  }
273  int nsub = -2;
274  if (isHI) {
275  nsub = hi->Ncoll_hard() + 1;
276  suboffset += nsub;
277  } else {
278  suboffset += 1;
279  }
280  offset += num_particles;
281  }
282  } else {
283  auto origin = (*mc->vertices_begin())->position();
284  xyz0Ptr->SetXYZ(origin.x() * mmToCm, origin.y() * mmToCm, origin.z() * mmToCm);
285  *t0Ptr = origin.t() * mmToNs;
286  fillIndices(mc, particles, *barCodeVector, 0, barcodes);
287 
288  // fill output collection and save association
289  for (size_t i = 0; i < particles.size(); ++i) {
292  // convert HepMC::GenParticle to new reco::GenParticle
293  convertParticle(cand, part, id2Charge);
294  cand.resetDaughters(ref.id());
295  }
296 
297  // fill references to daughters
298  for (size_t d = 0; d < cands.size(); ++d) {
300  const GenVertex* productionVertex = part->production_vertex();
301  // search barcode map and attach daughters
302  if (productionVertex != nullptr)
303  fillDaughters(cands, part, ref, d, barcodes);
304  cands[d].setCollisionId(0);
305  }
306  }
307 
308  evt.put(std::move(candsPtr));
309  if (saveBarCodes_)
310  evt.put(std::move(barCodeVector));
311  if (cfhepmcprod)
312  delete cfhepmcprod;
313  evt.put(std::move(xyz0Ptr), "xyz0");
314  evt.put(std::move(t0Ptr), "t0");
315 }
316 
318  const HepMC::GenParticle* part,
319  IDto3Charge const& id2Charge) const {
320  Candidate::LorentzVector p4(part->momentum());
321  int pdgId = part->pdg_id();
322  cand.setThreeCharge(id2Charge.chargeTimesThree(pdgId));
323  cand.setPdgId(pdgId);
324  cand.setStatus(part->status());
325  cand.setP4(p4);
326  cand.setCollisionId(0);
327  const GenVertex* v = part->production_vertex();
328  if (v != nullptr) {
329  ThreeVector vtx = v->point3d();
330  Candidate::Point vertex(vtx.x() * mmToCm, vtx.y() * mmToCm, vtx.z() * mmToCm);
331  cand.setVertex(vertex);
332  } else {
333  cand.setVertex(Candidate::Point(0, 0, 0));
334  }
335  mcTruthHelper_.fillGenStatusFlags(*part, cand.statusFlags());
336  return true;
337 }
338 
340  const HepMC::GenParticle* part,
341  reco::GenParticleRefProd const& ref,
342  size_t index,
343  std::unordered_map<int, size_t>& barcodes) const {
344  const GenVertex* productionVertex = part->production_vertex();
345  size_t numberOfMothers = productionVertex->particles_in_size();
346  if (numberOfMothers > 0) {
347  GenVertex::particles_in_const_iterator motherIt = productionVertex->particles_in_const_begin();
348  for (; motherIt != productionVertex->particles_in_const_end(); motherIt++) {
349  const HepMC::GenParticle* mother = *motherIt;
350  size_t m = barcodes.find(mother->barcode())->second;
351  cands[m].addDaughter(GenParticleRef(ref, index));
352  cands[index].addMother(GenParticleRef(ref, m));
353  }
354  }
355 
356  return true;
357 }
358 
360  vector<const HepMC::GenParticle*>& particles,
361  vector<int>& barCodeVector,
362  int offset,
363  std::unordered_map<int, size_t>& barcodes) const {
364  size_t idx = offset;
365  HepMC::GenEvent::particle_const_iterator begin = mc->particles_begin(), end = mc->particles_end();
366  for (HepMC::GenEvent::particle_const_iterator p = begin; p != end; ++p) {
367  const HepMC::GenParticle* particle = *p;
368  size_t barCode_this_event = particle->barcode();
369  size_t barCode = barCode_this_event + offset;
370  if (barcodes.find(barCode) != barcodes.end())
371  throw cms::Exception("WrongReference") << "barcodes are duplicated! " << endl;
372  particles[idx] = particle;
373  barCodeVector[idx] = barCode;
374  barcodes.insert(make_pair(barCode_this_event, idx++));
375  }
376  return true;
377 }
378 
380 
edm::RefProd< GenParticleCollection >
edm::StreamID
Definition: StreamID.h:30
GenParticleProducer::~GenParticleProducer
~GenParticleProducer() override
destructor
Definition: GenParticleProducer.cc:169
edm::Event::getRefBeforePut
RefProd< PROD > getRefBeforePut()
Definition: Event.h:158
Handle.h
dataCertificationJetMET_cfi.isHI
isHI
Definition: dataCertificationJetMET_cfi.py:65
electrons_cff.bool
bool
Definition: electrons_cff.py:393
mps_fire.i
i
Definition: mps_fire.py:428
funct::false
false
Definition: Factorize.h:29
edm::RefProd::id
ProductID id() const
Accessor for product ID.
Definition: RefProd.h:124
GenParticleProducer::particleTableToken_
edm::ESGetToken< HepPDT::ParticleDataTable, edm::DefaultRecord > particleTableToken_
Definition: GenParticleProducer.cc:109
edm::Handle::product
T const * product() const
Definition: Handle.h:70
GenParticleProducer::doSubEvent_
bool doSubEvent_
input & output modes
Definition: GenParticleProducer.cc:117
edm::errors::InvalidReference
Definition: EDMException.h:39
ESHandle.h
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
CaloTowersParam_cfi.mc
mc
Definition: CaloTowersParam_cfi.py:8
edm::errors::LogicError
Definition: EDMException.h:37
reco::GenParticle
Definition: GenParticle.h:21
edm::Run
Definition: Run.h:45
edm::EDGetTokenT< edm::HepMCProduct >
edm::Run::index
RunIndex index() const
Definition: Run.cc:25
edm
HLT enums.
Definition: AlignableModifier.h:19
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
CrossingFrame.h
GenParticleProducer::saveBarCodes_
bool saveBarCodes_
save bar-codes
Definition: GenParticleProducer.cc:114
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89287
reco::GenParticleCollection
std::vector< GenParticle > GenParticleCollection
collection of GenParticles
Definition: GenParticleFwd.h:13
GenParticleRef
edm::Ref< edm::HepMCProduct, HepMC::GenParticle > GenParticleRef
Definition: MultiTrackValidator.cc:43
GenParticleProducer::fillIndices
bool fillIndices(const HepMC::GenEvent *mc, std::vector< const HepMC::GenParticle * > &particles, std::vector< int > &barCodeVector, int offset, std::unordered_map< int, size_t > &barcodes) const
Definition: GenParticleProducer.cc:359
edm::second
U second(std::pair< T, U > const &p)
Definition: ParameterSet.cc:222
GenParticleProducer
Definition: GenParticleProducer.cc:80
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
findQualityFiles.v
v
Definition: findQualityFiles.py:179
GenParticleProducer::convertParticle
bool convertParticle(reco::GenParticle &cand, const HepMC::GenParticle *part, const IDto3Charge &id2Charge) const
Definition: GenParticleProducer.cc:317
MCTruthHelper< HepMC::GenParticle >
edm::Handle
Definition: AssociativeIterator.h:50
GenParticle
Definition: GenParticle.py:1
ESGetToken.h
ecalTrigSettings_cff.particles
particles
Definition: ecalTrigSettings_cff.py:11
HepMC::GenEvent
Definition: hepmc_rootio.cc:9
edm::Ref< GenParticleCollection >
GenParticleProducer::globalBeginRun
std::shared_ptr< IDto3Charge > globalBeginRun(const edm::Run &, const edm::EventSetup &) const override
Definition: GenParticleProducer.cc:171
heavyIonCSV_trainingSettings.idx
idx
Definition: heavyIonCSV_trainingSettings.py:5
GenParticle.h
CandidateFwd.h
EDMException.h
GenParticleProducer::globalEndRun
void globalEndRun(edm::Run const &, edm::EventSetup const &) const override
Definition: GenParticleProducer.cc:90
GenParticleProducer::mcTruthHelper_
MCTruthHelper< HepMC::GenParticle > mcTruthHelper_
Definition: GenParticleProducer.cc:120
MakerMacros.h
MixCollection::size
int size() const
Definition: MixCollection.h:20
part
part
Definition: HCALResponse.h:20
GeneratorMix_cff.abortOnUnknownPDGCode
abortOnUnknownPDGCode
Definition: GeneratorMix_cff.py:10
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
MCTruthHelper::fillGenStatusFlags
void fillGenStatusFlags(const P &p, reco::GenStatusFlags &statusFlags) const
Definition: MCTruthHelper.h:643
MixCollection.h
MixCollection
Definition: MixCollection.h:11
nsub
const int nsub
Definition: CMTRawAnalyzer.h:421
visualization-live-secondInstance_cfg.m
m
Definition: visualization-live-secondInstance_cfg.py:72
GenParticleFwd.h
mps_fire.end
end
Definition: mps_fire.py:242
Run.h
edm::ESHandle< HepPDT::ParticleDataTable >
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:531
MixCollection::getObject
const T & getObject(unsigned int ip) const
Definition: MixCollection.h:27
edm::global::EDProducer
Definition: EDProducer.h:32
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
funct::true
true
Definition: Factorize.h:173
HLT_FULL_cff.cands
cands
Definition: HLT_FULL_cff.py:15142
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:223
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
ParticleDataTable.h
GenParticleProducer::mixToken_
edm::EDGetTokenT< CrossingFrame< edm::HepMCProduct > > mixToken_
Definition: GenParticleProducer.cc:108
position
static int position[264][3]
Definition: ReadPGInfo.cc:289
cand
Definition: decayParser.h:32
p4
double p4[4]
Definition: TauolaWrapper.h:92
edm::Event::put
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:148
MCTruthHelper.h
EgammaValidation_cff.pdgId
pdgId
Definition: EgammaValidation_cff.py:118
edm::EventSetup
Definition: EventSetup.h:57
GenParticleProducer::produce
void produce(edm::StreamID, edm::Event &e, const edm::EventSetup &) const override
process one event
Definition: GenParticleProducer.cc:176
edm::HepMCProduct::GetEvent
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:34
GenParticleProducer::fillDaughters
bool fillDaughters(reco::GenParticleCollection &cand, const HepMC::GenParticle *part, reco::GenParticleRefProd const &ref, size_t index, std::unordered_map< int, size_t > &barcodes) const
Definition: GenParticleProducer.cc:339
edm::ESGetToken< HepPDT::ParticleDataTable, edm::DefaultRecord >
InputTag.h
GenParticleProducer::GenParticleProducer
GenParticleProducer(const edm::ParameterSet &)
constructor
Definition: GenParticleProducer.cc:148
PDGCacheMax
static constexpr int PDGCacheMax
Definition: GenParticleProducer.cc:32
looper.cfg
cfg
Definition: looper.py:297
GenParticleProducer::abortOnUnknownPDGCode_
bool abortOnUnknownPDGCode_
unknown code treatment flag
Definition: GenParticleProducer.cc:112
hi
Definition: EPCuts.h:4
GenParticle.GenParticle
GenParticle
Definition: GenParticle.py:18
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
mmToCm
static const double mmToCm
Definition: GenParticleProducer.cc:145
GenParticleProducer::useCF_
bool useCF_
Definition: GenParticleProducer.cc:118
extraflags_cff.vtx
vtx
Definition: extraflags_cff.py:18
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
transform.h
mmToNs
static const double mmToNs
Definition: GenParticleProducer.cc:146
HepMC
Definition: GenParticle.h:15
SiStripOfflineCRack_cfg.alias
alias
Definition: SiStripOfflineCRack_cfg.py:128
Exception
Definition: hltDiff.cc:246
GenParticleProducer::mcTruthHelperGenParts_
MCTruthHelper< reco::GenParticle > mcTruthHelperGenParts_
Definition: GenParticleProducer.cc:121
EventSetup.h
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
ztail.d
d
Definition: ztail.py:151
cms::Exception
Definition: Exception.h:70
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ParameterSet.h
GenParticleProducer::vectorSrcTokens_
std::vector< edm::EDGetTokenT< edm::HepMCProduct > > vectorSrcTokens_
Definition: GenParticleProducer.cc:107
HepMCProduct.h
EDProducer.h
reco::Candidate::LorentzVector
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:36
reco::Candidate::Point
math::XYZPoint Point
point in the space
Definition: Candidate.h:40
hltrates_dqm_sourceclient-live_cfg.offset
offset
Definition: hltrates_dqm_sourceclient-live_cfg.py:82
math::XYZPointF
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< float > > XYZPointF
point in space with cartesian internal representation
Definition: Point3D.h:10
edm::Event
Definition: Event.h:73
LHEGenericFilter_cfi.ParticleID
ParticleID
Definition: LHEGenericFilter_cfi.py:6
ParticleDataTable
HepPDT::ParticleDataTable ParticleDataTable
Definition: ParticleDataTable.h:8
edm::InputTag
Definition: InputTag.h:15
edm::Event::getRun
Run const & getRun() const
Definition: Event.cc:111
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
GenParticleProducer::srcToken_
edm::EDGetTokenT< edm::HepMCProduct > srcToken_
source collection name
Definition: GenParticleProducer.cc:106