FastSimulation
EventProducer
src
FamosProducer.cc
Go to the documentation of this file.
1
#include "
FWCore/Framework/interface/Event.h
"
2
#include "
FWCore/Framework/interface/MakerMacros.h
"
3
#include "
FWCore/Framework/interface/EventSetup.h
"
4
#include "
FWCore/Framework/interface/ESHandle.h
"
5
#include "
FWCore/MessageLogger/interface/MessageLogger.h
"
6
7
#include "
SimDataFormats/CaloHit/interface/PCaloHitContainer.h
"
8
#include "
SimDataFormats/TrackingHit/interface/PSimHitContainer.h
"
9
10
#include "
FastSimDataFormats/NuclearInteractions/interface/FSimVertexTypeFwd.h
"
11
12
#include "
DataFormats/Common/interface/Handle.h
"
13
#include "
DataFormats/Candidate/interface/CandidateFwd.h
"
14
#include "
DataFormats/Provenance/interface/EventID.h
"
15
16
#include "
FastSimulation/EventProducer/interface/FamosProducer.h
"
17
#include "
FastSimulation/EventProducer/interface/FamosManager.h
"
18
#include "
FastSimulation/Event/interface/FSimEvent.h
"
19
#include "
FastSimulation/Event/interface/KineParticleFilter.h
"
20
#include "
FastSimulation/Calorimetry/interface/CalorimetryManager.h
"
21
#include "
FastSimulation/TrajectoryManager/interface/TrajectoryManager.h
"
22
#include "
FastSimulation/Utilities/interface/RandomEngineAndDistribution.h
"
23
#include "
Geometry/Records/interface/TrackerTopologyRcd.h
"
24
25
#include "HepMC/GenVertex.h"
26
#include "HepMC/GenEvent.h"
27
28
#include <iostream>
29
#include <memory>
30
#include <vector>
31
32
FamosProducer::FamosProducer
(
edm::ParameterSet
const
&
p
) {
33
produces<edm::SimTrackContainer>();
34
produces<edm::SimVertexContainer>();
35
produces<FSimVertexTypeCollection>(
"VertexTypes"
);
36
produces<edm::PSimHitContainer>(
"TrackerHits"
);
37
produces<edm::PCaloHitContainer>(
"EcalHitsEB"
);
38
produces<edm::PCaloHitContainer>(
"EcalHitsEE"
);
39
produces<edm::PCaloHitContainer>(
"EcalHitsES"
);
40
produces<edm::PCaloHitContainer>(
"HcalHits"
);
41
// Temporary facility to allow for the crossing frame to work...
42
simulateMuons
=
p
.getParameter<
bool
>(
"SimulateMuons"
);
43
if
(
simulateMuons
)
44
produces<edm::SimTrackContainer>(
"MuonSimTracks"
);
45
46
// hepmc event from signal event
47
edm::InputTag
sourceLabel =
p
.getParameter<
edm::InputTag
>(
"SourceLabel"
);
48
sourceToken
= consumes<edm::HepMCProduct>(sourceLabel);
49
50
// famos manager
51
famosManager_
=
new
FamosManager
(
p
);
52
}
53
54
FamosProducer::~FamosProducer
() {
delete
famosManager_
; }
55
56
void
FamosProducer::beginRun
(
edm::Run
const
&
run
,
const
edm::EventSetup
& es) {
57
famosManager_
->
setupGeometryAndField
(
run
, es);
58
}
59
60
void
FamosProducer::produce
(
edm::Event
&
iEvent
,
const
edm::EventSetup
& es) {
61
using namespace
edm
;
62
63
RandomEngineAndDistribution
random(
iEvent
.streamID());
64
65
//Retrieve tracker topology from geometry
66
edm::ESHandle<TrackerTopology>
tTopoHand;
67
es.
get
<
TrackerTopologyRcd
>().
get
(tTopoHand);
68
const
TrackerTopology
* tTopo = tTopoHand.product();
69
70
// get the signal event
71
Handle<HepMCProduct>
theHepMCProduct;
72
iEvent
.getByToken(
sourceToken
, theHepMCProduct);
73
const
HepMC::GenEvent
* myGenEvent = theHepMCProduct->
GetEvent
();
74
75
// do the simulation
76
famosManager_
->
reconstruct
(myGenEvent, tTopo, &random);
77
78
// get the hits, simtracks and simvertices and put in the event
79
CalorimetryManager
*
calo
=
famosManager_
->
calorimetryManager
();
80
TrajectoryManager
*
tracker
=
famosManager_
->
trackerManager
();
81
82
std::unique_ptr<edm::SimTrackContainer>
p1
(
new
edm::SimTrackContainer
);
83
std::unique_ptr<edm::SimTrackContainer> m1(
new
edm::SimTrackContainer
);
84
std::unique_ptr<edm::SimVertexContainer>
p2
(
new
edm::SimVertexContainer
);
85
std::unique_ptr<FSimVertexTypeCollection> v1(
new
FSimVertexTypeCollection
);
86
std::unique_ptr<edm::PSimHitContainer>
p3
(
new
edm::PSimHitContainer
);
87
std::unique_ptr<edm::PCaloHitContainer>
p4
(
new
edm::PCaloHitContainer
);
88
std::unique_ptr<edm::PCaloHitContainer> p5(
new
edm::PCaloHitContainer
);
89
std::unique_ptr<edm::PCaloHitContainer> p6(
new
edm::PCaloHitContainer
);
90
std::unique_ptr<edm::PCaloHitContainer> p7(
new
edm::PCaloHitContainer
);
91
92
FSimEvent
* fevt =
famosManager_
->
simEvent
();
93
fevt->
load
(*
p1
, *m1);
94
fevt->
load
(*
p2
);
95
fevt->
load
(*v1);
96
tracker
->loadSimHits(*
p3
);
97
98
if
(
calo
) {
99
calo
->loadFromEcalBarrel(*
p4
);
100
calo
->loadFromEcalEndcap(*p5);
101
calo
->loadFromPreshower(*p6);
102
calo
->loadFromHcal(*p7);
103
calo
->loadMuonSimTracks(*m1);
104
}
105
106
if
(
simulateMuons
)
107
iEvent
.put(
std::move
(m1),
"MuonSimTracks"
);
108
iEvent
.put(
std::move
(
p1
));
109
iEvent
.put(
std::move
(
p2
));
110
iEvent
.put(
std::move
(
p3
),
"TrackerHits"
);
111
iEvent
.put(
std::move
(v1),
"VertexTypes"
);
112
iEvent
.put(
std::move
(
p4
),
"EcalHitsEB"
);
113
iEvent
.put(
std::move
(p5),
"EcalHitsEE"
);
114
iEvent
.put(
std::move
(p6),
"EcalHitsES"
);
115
iEvent
.put(
std::move
(p7),
"HcalHits"
);
116
}
117
118
DEFINE_FWK_MODULE
(
FamosProducer
);
Handle.h
FSimEvent
Definition:
FSimEvent.h:29
FamosProducer::beginRun
void beginRun(edm::Run const &run, const edm::EventSetup &es) override
Definition:
FamosProducer.cc:56
MessageLogger.h
FamosProducer::FamosProducer
FamosProducer(edm::ParameterSet const &p)
Definition:
FamosProducer.cc:32
ESHandle.h
FamosProducer::simulateMuons
bool simulateMuons
Definition:
FamosProducer.h:27
FamosProducer::produce
void produce(edm::Event &e, const edm::EventSetup &c) override
Definition:
FamosProducer.cc:60
FSimVertexTypeFwd.h
FamosProducer.h
edm::Run
Definition:
Run.h:45
edm
HLT enums.
Definition:
AlignableModifier.h:19
TrackerTopology
Definition:
TrackerTopology.h:16
AlCaHLTBitMon_ParallelJobs.p
p
Definition:
AlCaHLTBitMon_ParallelJobs.py:153
FamosProducer::sourceToken
edm::EDGetTokenT< edm::HepMCProduct > sourceToken
Definition:
FamosProducer.h:30
PSimHitContainer.h
FamosProducer
Definition:
FamosProducer.h:17
FamosManager.h
edm::Handle
Definition:
AssociativeIterator.h:50
RandomEngineAndDistribution.h
HepMC::GenEvent
Definition:
hepmc_rootio.cc:9
CandidateFwd.h
FamosManager::trackerManager
TrajectoryManager * trackerManager() const
The tracker.
Definition:
FamosManager.h:47
FSimEvent.h
MakerMacros.h
TrackerTopologyRcd.h
edm::EventSetup::get
T get() const
Definition:
EventSetup.h:87
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition:
MakerMacros.h:16
FamosProducer::~FamosProducer
~FamosProducer() override
Definition:
FamosProducer.cc:54
FamosManager::simEvent
FSimEvent * simEvent() const
The simulated event.
Definition:
FamosManager.h:41
EventID.h
FamosManager::calorimetryManager
CalorimetryManager * calorimetryManager() const
The calorimeter.
Definition:
FamosManager.h:50
edm::ESHandle< TrackerTopology >
p2
double p2[4]
Definition:
TauolaWrapper.h:90
PbPb_ZMuSkimMuonDPG_cff.tracker
tracker
Definition:
PbPb_ZMuSkimMuonDPG_cff.py:60
edm::ParameterSet
Definition:
ParameterSet.h:47
Event.h
CalorimetryManager
Definition:
CalorimetryManager.h:44
iEvent
int iEvent
Definition:
GenABIO.cc:224
TrajectoryManager.h
p4
double p4[4]
Definition:
TauolaWrapper.h:92
CalorimetryManager.h
p1
double p1[4]
Definition:
TauolaWrapper.h:89
FamosProducer::famosManager_
FamosManager * famosManager_
Definition:
FamosProducer.h:25
FamosManager
Definition:
FamosManager.h:29
edm::EventSetup
Definition:
EventSetup.h:58
edm::HepMCProduct::GetEvent
const HepMC::GenEvent * GetEvent() const
Definition:
HepMCProduct.h:37
get
#define get
FSimEvent::load
void load(edm::SimTrackContainer &c, edm::SimTrackContainer &m) const
Load containers of tracks (and muons) and vertices for the edm::Event.
Definition:
FSimEvent.cc:30
FamosManager::setupGeometryAndField
void setupGeometryAndField(edm::Run const &run, const edm::EventSetup &es)
Get information from the Event Setup.
Definition:
FamosManager.cc:81
eostools.move
def move(src, dest)
Definition:
eostools.py:511
writedatasetfile.run
run
Definition:
writedatasetfile.py:27
edm::SimTrackContainer
std::vector< SimTrack > SimTrackContainer
Definition:
SimTrackContainer.h:12
edm::PCaloHitContainer
std::vector< PCaloHit > PCaloHitContainer
Definition:
PCaloHitContainer.h:8
EventSetup.h
p3
double p3[4]
Definition:
TauolaWrapper.h:91
PCaloHitContainer.h
KineParticleFilter.h
FSimVertexTypeCollection
std::vector< FSimVertexType > FSimVertexTypeCollection
collection of FSimVertexType objects
Definition:
FSimVertexTypeFwd.h:7
edm::PSimHitContainer
std::vector< PSimHit > PSimHitContainer
Definition:
PSimHitContainer.h:11
TrackerTopologyRcd
Definition:
TrackerTopologyRcd.h:10
calo
Definition:
Common.h:9
TrajectoryManager
Definition:
TrajectoryManager.h:59
edm::Event
Definition:
Event.h:73
FamosManager::reconstruct
void reconstruct(const HepMC::GenEvent *evt, const TrackerTopology *tTopo, RandomEngineAndDistribution const *)
The real thing is done here.
Definition:
FamosManager.cc:139
edm::SimVertexContainer
std::vector< SimVertex > SimVertexContainer
Definition:
SimVertexContainer.h:12
edm::InputTag
Definition:
InputTag.h:15
RandomEngineAndDistribution
Definition:
RandomEngineAndDistribution.h:18
Generated for CMSSW Reference Manual by
1.8.16