1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
#include "ThingExtSource.h"
#include "DataFormats/TestObjects/interface/ThingCollection.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/LuminosityBlock.h"
#include "FWCore/Framework/interface/Run.h"
#include "FWCore/Framework/interface/InputSourceMacros.h"
namespace edmtest {
ThingExtSource::ThingExtSource(edm::ParameterSet const& pset, edm::InputSourceDescription const& desc)
: ProducerSourceFromFiles(pset, desc, true), alg_() {
produces<ThingCollection>();
produces<ThingCollection, edm::Transition::BeginLuminosityBlock>("beginLumi");
produces<ThingCollection, edm::Transition::BeginLuminosityBlock>("endLumi");
produces<ThingCollection, edm::Transition::BeginRun>("beginRun");
produces<ThingCollection, edm::Transition::BeginRun>("endRun");
}
// Virtual destructor needed.
ThingExtSource::~ThingExtSource() {}
// Functions that gets called by framework every event
bool ThingExtSource::setRunAndEventInfo(edm::EventID&, edm::TimeValue_t&, edm::EventAuxiliary::ExperimentType&) {
// Fake running out of data.
if (event() > 2)
return false;
return true;
}
void ThingExtSource::produce(edm::Event& e) {
// Step A: Get Inputs
// Step B: Create empty output
auto result = std::make_unique<ThingCollection>(); //Empty
// Step C: Invoke the algorithm, passing in inputs (NONE) and getting back outputs.
alg_.run(*result);
// Step D: Put outputs into event
e.put(std::move(result));
}
// Functions that gets called by framework every luminosity block
void ThingExtSource::beginLuminosityBlock(edm::LuminosityBlock& lb) {
// Step A: Get Inputs
// Step B: Create empty output
auto result = std::make_unique<ThingCollection>(); //Empty
// Step C: Invoke the algorithm, passing in inputs (NONE) and getting back outputs.
alg_.run(*result);
// Step D: Put outputs into lumi block
lb.put(std::move(result), "beginLumi");
endLuminosityBlock(lb);
}
void ThingExtSource::endLuminosityBlock(edm::LuminosityBlock& lb) {
// Step A: Get Inputs
// Step B: Create empty output
auto result = std::make_unique<ThingCollection>(); //Empty
// Step C: Invoke the algorithm, passing in inputs (NONE) and getting back outputs.
alg_.run(*result);
// Step D: Put outputs into lumi block
lb.put(std::move(result), "endLumi");
}
// Functions that gets called by framework every run
void ThingExtSource::beginRun(edm::Run& r) {
// Step A: Get Inputs
// Step B: Create empty output
auto result = std::make_unique<ThingCollection>(); //Empty
// Step C: Invoke the algorithm, passing in inputs (NONE) and getting back outputs.
alg_.run(*result);
// Step D: Put outputs into event
r.put(std::move(result), "beginRun");
endRun(r);
}
void ThingExtSource::endRun(edm::Run& r) {
// Step A: Get Inputs
// Step B: Create empty output
auto result = std::make_unique<ThingCollection>(); //Empty
// Step C: Invoke the algorithm, passing in inputs (NONE) and getting back outputs.
alg_.run(*result);
// Step D: Put outputs into event
r.put(std::move(result), "endRun");
}
void ThingExtSource::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.setComment("Creates ThingCollections from a file for testing.");
edm::ProducerSourceFromFiles::fillDescription(desc);
descriptions.add("source", desc);
}
} // namespace edmtest
using edmtest::ThingExtSource;
DEFINE_FWK_INPUT_SOURCE(ThingExtSource);
|