CMS 3D CMS Logo

HectorProducer.cc
Go to the documentation of this file.
1 // Framework headers
10 
12 
13 // SimpleConfigurable replacement
15 
16 // HepMC headers
17 #include "HepMC/GenEvent.h"
18 
19 // Hector headers
22 
23 // SimDataFormats headers
26 
27 #include <CLHEP/Random/RandomEngine.h>
28 
29 #include <iostream>
30 #include <memory>
31 #include <string>
32 
33 class TRandom3;
34 
36  : m_HepMC(consumes<edm::HepMCProduct>(p.getParameter<edm::InputTag>("HepMCProductLabel"))) {
37  m_verbosity = p.getParameter<bool>("Verbosity");
38  m_FP420Transport = p.getParameter<bool>("FP420Transport");
39  m_ZDCTransport = p.getParameter<bool>("ZDCTransport");
40  m_evtAnalysed = 0;
41 
42  produces<edm::HepMCProduct>();
43  produces<edm::LHCTransportLinkContainer>();
44 
46 
48  if (!rng.isAvailable()) {
49  throw cms::Exception("Configuration") << "LHCTransport (HectorProducer) requires the "
50  "RandomNumberGeneratorService\n"
51  "which is not present in the configuration file. You must add the "
52  "service\n"
53  "in the configuration file or remove the modules that require it.";
54  }
55  edm::LogVerbatim("SimTransportHectorProducer") << "Hector is created";
56 }
57 
59 
61 
63 
66  CLHEP::HepRandomEngine *engine = &rng->getEngine(iEvent.streamID());
67  if (engine->name() != "TRandom3") {
68  throw cms::Exception("Configuration") << "The TRandom3 engine type must be used with HectorProducer, "
69  << "Random Number Generator Service not correctly configured!";
70  }
71  TRandom3 *rootEngine = ((edm::TRandomAdaptor *)engine)->getRootEngine();
72 
73  ++m_evtAnalysed;
74 
75  edm::LogVerbatim("SimTransportHectorProducer") << "produce evt " << m_evtAnalysed;
76 
78  iEvent.getByToken(m_HepMC, HepMCEvt);
79 
80  if (!HepMCEvt.isValid()) {
81  throw cms::Exception("InvalidReference") << "Invalid reference to HepMCProduct\n";
82  }
83 
84  if (HepMCEvt.provenance()->moduleLabel() == "LHCTransport") {
85  throw cms::Exception("LogicError") << "HectorTrasported HepMCProduce already exists\n";
86  }
87 
88  evt_ = new HepMC::GenEvent(*HepMCEvt->GetEvent());
90  if (m_FP420Transport) {
91  m_Hector->clear();
92  m_Hector->add(evt_, es);
93  m_Hector->filterFP420(rootEngine);
94  }
95  if (m_ZDCTransport) {
96  m_Hector->clear();
97  m_Hector->add(evt_, es);
98  m_Hector->filterZDC(rootEngine);
99 
100  m_Hector->clear();
101  m_Hector->add(evt_, es);
102  m_Hector->filterD1(rootEngine);
103  }
105  if (m_verbosity)
106  evt_->print();
107 
108  edm::LogVerbatim("SimTransportHectorProducer") << "new HepMC product ";
109 
110  unique_ptr<edm::HepMCProduct> NewProduct(new edm::HepMCProduct());
111  NewProduct->addHepMCData(evt_);
112 
113  iEvent.put(std::move(NewProduct));
114 
115  edm::LogVerbatim("SimTransportHectorProducer") << "new LHCTransportLinkContainer ";
116  unique_ptr<edm::LHCTransportLinkContainer> NewCorrespondenceMap(new edm::LHCTransportLinkContainer());
118  (*NewCorrespondenceMap).swap(thisLink);
119 
120  if (m_verbosity) {
121  for (unsigned int i = 0; i < (*NewCorrespondenceMap).size(); ++i)
122  edm::LogVerbatim("HectorEventProcessing") << "Hector correspondence table: " << (*NewCorrespondenceMap)[i];
123  }
124 
125  iEvent.put(std::move(NewCorrespondenceMap));
126  edm::LogVerbatim("SimTransportHectorProducer") << "produce end ";
127 }
128 
edm::Provenance::moduleLabel
std::string const & moduleLabel() const
Definition: Provenance.h:55
Hector::addPartToHepMC
HepMC::GenEvent * addPartToHepMC(HepMC::GenEvent *event)
Definition: Hector.cc:503
edm::RandomNumberGenerator::getEngine
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
mps_fire.i
i
Definition: mps_fire.py:428
edm::LHCTransportLinkContainer
std::vector< LHCTransportLink > LHCTransportLinkContainer
Definition: LHCTransportLinkContainer.h:8
MessageLogger.h
ESHandle.h
HectorProducer::produce
void produce(edm::Event &e, const edm::EventSetup &c) override
Definition: HectorProducer.cc:64
Hector.h
edm::Run
Definition: Run.h:45
edm
HLT enums.
Definition: AlignableModifier.h:19
RandomNumberGenerator.h
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
HectorProducer::m_evtAnalysed
int m_evtAnalysed
just to count events that have been analysed
Definition: HectorProducer.h:43
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89353
HectorProducer::evt_
HepMC::GenEvent * evt_
Definition: HectorProducer.h:36
HectorProducer::m_verbosity
bool m_verbosity
Definition: HectorProducer.h:40
edm::Handle< edm::HepMCProduct >
edm::Service::isAvailable
bool isAvailable() const
Definition: Service.h:40
Hector::filterD1
void filterD1(TRandom3 *)
Definition: Hector.cc:402
HepMC::GenEvent
Definition: hepmc_rootio.cc:9
HectorProducer::m_HepMC
edm::EDGetTokenT< edm::HepMCProduct > m_HepMC
Definition: HectorProducer.h:39
Hector::add
void add(const HepMC::GenEvent *ev, const edm::EventSetup &es)
Definition: Hector.cc:164
MakerMacros.h
HectorProducer.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
Hector::getCorrespondenceMap
std::vector< LHCTransportLink > & getCorrespondenceMap()
Definition: Hector.h:73
TRandomAdaptor.h
HectorProducer::m_Hector
Hector * m_Hector
Definition: HectorProducer.h:37
Service.h
edm::HandleBase::provenance
Provenance const * provenance() const
Definition: HandleBase.h:74
edm::TRandomAdaptor
Definition: TRandomAdaptor.h:13
Hector::clear
void clear()
Definition: Hector.cc:152
edm::ParameterSet
Definition: ParameterSet.h:47
Hector::clearApertureFlags
void clearApertureFlags()
Definition: Hector.cc:146
ModuleDef.h
edm::Service< edm::RandomNumberGenerator >
iEvent
int iEvent
Definition: GenABIO.cc:224
HectorProducer::~HectorProducer
~HectorProducer() override
Definition: HectorProducer.cc:58
edm::EventSetup
Definition: EventSetup.h:57
edm::HepMCProduct::GetEvent
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:34
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
InputTag.h
alignCSCRings.r
r
Definition: alignCSCRings.py:93
HectorProducer
Definition: HectorProducer.h:27
Hector::filterFP420
void filterFP420(TRandom3 *)
Definition: Hector.cc:227
eostools.move
def move(src, dest)
Definition: eostools.py:511
HectorProducer::endRun
void endRun(const edm::Run &r, const edm::EventSetup &c) override
Definition: HectorProducer.cc:62
HectorProducer::m_ZDCTransport
bool m_ZDCTransport
Definition: HectorProducer.h:42
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
Exception
Definition: hltDiff.cc:246
HectorProducer::beginRun
void beginRun(const edm::Run &r, const edm::EventSetup &c) override
Definition: HectorProducer.cc:60
HectorProducer::m_FP420Transport
bool m_FP420Transport
Definition: HectorProducer.h:41
Exception.h
Hector::filterZDC
void filterZDC(TRandom3 *)
Definition: Hector.cc:319
HepMCProduct
edm::HepMCProduct
Definition: HepMCProduct.h:18
ParameterSet.h
HepMCProduct.h
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::Event
Definition: Event.h:73
HectorTransport_cfi.Hector
Hector
Definition: HectorTransport_cfi.py:9
edm::Log
Definition: MessageLogger.h:70
HectorProducer::HectorProducer
HectorProducer(edm::ParameterSet const &p)
Definition: HectorProducer.cc:35