CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
HectorProducer Class Reference

#include <HectorProducer.h>

Inheritance diagram for HectorProducer:
edm::one::EDProducer< edm::one::SharedResources, edm::one::WatchRuns > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

void beginRun (const edm::Run &r, const edm::EventSetup &c) override
 
void endRun (const edm::Run &r, const edm::EventSetup &c) override
 
 HectorProducer (edm::ParameterSet const &p)
 
void produce (edm::Event &e, const edm::EventSetup &c) override
 
 ~HectorProducer () override
 
- Public Member Functions inherited from edm::one::EDProducer< edm::one::SharedResources, edm::one::WatchRuns >
 EDProducer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Attributes

HepMC::GenEventevt_
 
int m_evtAnalysed
 just to count events that have been analysed More...
 
bool m_FP420Transport
 
Hectorm_Hector
 
edm::EDGetTokenT< edm::HepMCProductm_HepMC
 
bool m_verbosity
 
bool m_ZDCTransport
 

Additional Inherited Members

- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 27 of file HectorProducer.h.

Constructor & Destructor Documentation

HectorProducer::HectorProducer ( edm::ParameterSet const &  p)
explicit

Definition at line 33 of file HectorProducer.cc.

References Exception, edm::ParameterSet::getParameter(), HectorTransport_cfi::Hector, edm::Service< T >::isAvailable(), m_evtAnalysed, m_FP420Transport, m_Hector, m_verbosity, and m_ZDCTransport.

34  : m_HepMC(consumes<edm::HepMCProduct>(p.getParameter<edm::InputTag>("HepMCProductLabel"))) {
35  m_verbosity = p.getParameter<bool>("Verbosity");
36  m_FP420Transport = p.getParameter<bool>("FP420Transport");
37  m_ZDCTransport = p.getParameter<bool>("ZDCTransport");
38  m_evtAnalysed = 0;
39 
40  produces<edm::HepMCProduct>();
41  produces<edm::LHCTransportLinkContainer>();
42 
43  m_Hector = new Hector(p, m_verbosity, m_FP420Transport, m_ZDCTransport);
44 
46  if (!rng.isAvailable()) {
47  throw cms::Exception("Configuration") << "LHCTransport (HectorProducer) requires the "
48  "RandomNumberGeneratorService\n"
49  "which is not present in the configuration file. You must add the "
50  "service\n"
51  "in the configuration file or remove the modules that require it.";
52  }
53  edm::LogInfo("SimTransportHectorProducer") << "Hector is created";
54 }
int m_evtAnalysed
just to count events that have been analysed
edm::EDGetTokenT< edm::HepMCProduct > m_HepMC
bool isAvailable() const
Definition: Service.h:40
Hector * m_Hector
HectorProducer::~HectorProducer ( )
override

Definition at line 56 of file HectorProducer.cc.

56 {}

Member Function Documentation

void HectorProducer::beginRun ( const edm::Run r,
const edm::EventSetup c 
)
override

Definition at line 58 of file HectorProducer.cc.

58 {}
void HectorProducer::endRun ( const edm::Run r,
const edm::EventSetup c 
)
override

Definition at line 60 of file HectorProducer.cc.

60 {}
void HectorProducer::produce ( edm::Event e,
const edm::EventSetup c 
)
override

Definition at line 62 of file HectorProducer.cc.

References Hector::add(), Hector::addPartToHepMC(), Hector::clear(), Hector::clearApertureFlags(), DEFINE_FWK_MODULE, evt_, Exception, Hector::filterD1(), Hector::filterFP420(), Hector::filterZDC(), edm::Event::getByToken(), Hector::getCorrespondenceMap(), edm::RandomNumberGenerator::getEngine(), edm::HepMCProduct::GetEvent(), mps_fire::i, edm::HandleBase::isValid(), LogDebug, m_evtAnalysed, m_FP420Transport, m_Hector, m_HepMC, m_verbosity, m_ZDCTransport, edm::Provenance::moduleLabel(), eostools::move(), edm::HandleBase::provenance(), edm::Event::put(), and edm::Event::streamID().

62  {
64  CLHEP::HepRandomEngine *engine = &rng->getEngine(iEvent.streamID());
65  if (engine->name() != "TRandom3") {
66  throw cms::Exception("Configuration") << "The TRandom3 engine type must be used with HectorProducer, "
67  << "Random Number Generator Service not correctly configured!";
68  }
69  TRandom3 *rootEngine = ((edm::TRandomAdaptor *)engine)->getRootEngine();
70 
71  ++m_evtAnalysed;
72 
73  edm::LogInfo("SimTransportHectorProducer") << "produce evt " << m_evtAnalysed;
74 
76  iEvent.getByToken(m_HepMC, HepMCEvt);
77 
78  if (!HepMCEvt.isValid()) {
79  throw cms::Exception("InvalidReference") << "Invalid reference to HepMCProduct\n";
80  }
81 
82  if (HepMCEvt.provenance()->moduleLabel() == "LHCTransport") {
83  throw cms::Exception("LogicError") << "HectorTrasported HepMCProduce already exists\n";
84  }
85 
86  evt_ = new HepMC::GenEvent(*HepMCEvt->GetEvent());
88  if (m_FP420Transport) {
89  m_Hector->clear();
90  m_Hector->add(evt_, es);
91  m_Hector->filterFP420(rootEngine);
92  }
93  if (m_ZDCTransport) {
94  m_Hector->clear();
95  m_Hector->add(evt_, es);
96  m_Hector->filterZDC(rootEngine);
97 
98  m_Hector->clear();
99  m_Hector->add(evt_, es);
100  m_Hector->filterD1(rootEngine);
101  }
103  if (m_verbosity) {
104  evt_->print();
105  }
106 
107  edm::LogInfo("SimTransportHectorProducer") << "new HepMC product ";
108 
109  unique_ptr<edm::HepMCProduct> NewProduct(new edm::HepMCProduct());
110  NewProduct->addHepMCData(evt_);
111 
112  iEvent.put(std::move(NewProduct));
113 
114  edm::LogInfo("SimTransportHectorProducer") << "new LHCTransportLinkContainer ";
115  unique_ptr<edm::LHCTransportLinkContainer> NewCorrespondenceMap(new edm::LHCTransportLinkContainer());
117  (*NewCorrespondenceMap).swap(thisLink);
118 
119  if (m_verbosity) {
120  for (unsigned int i = 0; i < (*NewCorrespondenceMap).size(); i++)
121  LogDebug("HectorEventProcessing") << "Hector correspondence table: " << (*NewCorrespondenceMap)[i];
122  }
123 
124  iEvent.put(std::move(NewCorrespondenceMap));
125  edm::LogInfo("SimTransportHectorProducer") << "produce end ";
126 }
#define LogDebug(id)
int m_evtAnalysed
just to count events that have been analysed
edm::EDGetTokenT< edm::HepMCProduct > m_HepMC
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
void clear()
Definition: Hector.cc:152
int iEvent
Definition: GenABIO.cc:224
void filterD1(TRandom3 *)
Definition: Hector.cc:414
void filterFP420(TRandom3 *)
Definition: Hector.cc:237
bool isValid() const
Definition: HandleBase.h:74
void filterZDC(TRandom3 *)
Definition: Hector.cc:329
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:38
Hector * m_Hector
std::string const & moduleLabel() const
Definition: Provenance.h:53
void add(const HepMC::GenEvent *ev, const edm::EventSetup &es)
Definition: Hector.cc:175
std::vector< LHCTransportLink > & getCorrespondenceMap()
Definition: Hector.h:73
HepMC::GenEvent * addPartToHepMC(HepMC::GenEvent *event)
Definition: Hector.cc:515
std::vector< LHCTransportLink > LHCTransportLinkContainer
HepMC::GenEvent * evt_
def move(src, dest)
Definition: eostools.py:511
Provenance const * provenance() const
Definition: HandleBase.h:83
void clearApertureFlags()
Definition: Hector.cc:146

Member Data Documentation

HepMC::GenEvent* HectorProducer::evt_
private

Definition at line 36 of file HectorProducer.h.

Referenced by produce().

int HectorProducer::m_evtAnalysed
private

just to count events that have been analysed

Definition at line 43 of file HectorProducer.h.

Referenced by HectorProducer(), and produce().

bool HectorProducer::m_FP420Transport
private

Definition at line 41 of file HectorProducer.h.

Referenced by HectorProducer(), and produce().

Hector* HectorProducer::m_Hector
private

Definition at line 37 of file HectorProducer.h.

Referenced by HectorProducer(), and produce().

edm::EDGetTokenT<edm::HepMCProduct> HectorProducer::m_HepMC
private

Definition at line 39 of file HectorProducer.h.

Referenced by produce().

bool HectorProducer::m_verbosity
private

Definition at line 40 of file HectorProducer.h.

Referenced by HectorProducer(), and produce().

bool HectorProducer::m_ZDCTransport
private

Definition at line 42 of file HectorProducer.h.

Referenced by HectorProducer(), and produce().