/
ThingExtSource.cc
98 lines (73 loc) · 3.19 KB
/
ThingExtSource.cc
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
#include "FWCore/Integration/test/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::InLumi>("beginLumi");
produces<ThingCollection, edm::InLumi>("endLumi");
produces<ThingCollection, edm::InRun>("beginRun");
produces<ThingCollection, edm::InRun>("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
std::unique_ptr<ThingCollection> result(new 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
std::unique_ptr<ThingCollection> result(new 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");
}
void ThingExtSource::endLuminosityBlock(edm::LuminosityBlock& lb) {
// Step A: Get Inputs
// Step B: Create empty output
std::unique_ptr<ThingCollection> result(new 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
std::unique_ptr<ThingCollection> result(new 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");
}
void ThingExtSource::endRun(edm::Run& r) {
// Step A: Get Inputs
// Step B: Create empty output
std::unique_ptr<ThingCollection> result(new 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");
}
}
using edmtest::ThingExtSource;
DEFINE_FWK_INPUT_SOURCE(ThingExtSource);