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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
#ifndef FWCore_Framework_global_EDAnalyzerBase_h
#define FWCore_Framework_global_EDAnalyzerBase_h
// -*- C++ -*-
//
// Package: FWCore/Framework
// Class : EDAnalyzerBase
//
/**\class EDAnalyzerBase EDAnalyzerBase.h "EDAnalyzerBase.h"
Description: [one line class summary]
Usage:
<usage>
*/
//
// Original Author: Chris Jones
// Created: Thu, 18 Jul 2013 11:51:14 GMT
//
// system include files
// user include files
#include "FWCore/Framework/interface/EDConsumerBase.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Concurrency/interface/WaitingTaskHolder.h"
#include "DataFormats/Provenance/interface/ModuleDescription.h"
#include "FWCore/ParameterSet/interface/ParameterSetfwd.h"
// forward declarations
namespace edm {
class ModuleCallingContext;
class PreallocationConfiguration;
class StreamID;
class ActivityRegistry;
class ThinnedAssociationsHelper;
class SignallingProductRegistryFiller;
namespace maker {
template <typename T>
class ModuleHolderT;
}
namespace global {
class EDAnalyzerBase : public EDConsumerBase {
public:
template <typename T>
friend class edm::WorkerT;
template <typename T>
friend class edm::maker::ModuleHolderT;
typedef EDAnalyzerBase ModuleType;
EDAnalyzerBase();
~EDAnalyzerBase() override;
static void fillDescriptions(ConfigurationDescriptions& descriptions);
static void prevalidate(ConfigurationDescriptions& descriptions);
static const std::string& baseType();
// Warning: the returned moduleDescription will be invalid during construction
ModuleDescription const& moduleDescription() const { return moduleDescription_; }
virtual bool wantsProcessBlocks() const noexcept = 0;
virtual bool wantsInputProcessBlocks() const noexcept = 0;
virtual bool wantsGlobalRuns() const noexcept = 0;
virtual bool wantsGlobalLuminosityBlocks() const noexcept = 0;
virtual bool wantsStreamRuns() const noexcept = 0;
virtual bool wantsStreamLuminosityBlocks() const noexcept = 0;
void callWhenNewProductsRegistered(std::function<void(ProductDescription const&)> const& func) {
callWhenNewProductsRegistered_ = func;
}
private:
bool doEvent(EventTransitionInfo const&, ActivityRegistry*, ModuleCallingContext const*);
//For now this is a placeholder
/*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder,
ModuleCallingContext const&,
Principal const&) const noexcept {}
void doPreallocate(PreallocationConfiguration const&);
void doBeginJob();
void doEndJob();
void doBeginStream(StreamID id);
void doEndStream(StreamID id);
void doStreamBeginRun(StreamID, RunTransitionInfo const&, ModuleCallingContext const*);
void doStreamEndRun(StreamID, RunTransitionInfo const&, ModuleCallingContext const*);
void doStreamBeginLuminosityBlock(StreamID, LumiTransitionInfo const&, ModuleCallingContext const*);
void doStreamEndLuminosityBlock(StreamID, LumiTransitionInfo const&, ModuleCallingContext const*);
void doBeginProcessBlock(ProcessBlockPrincipal const&, ModuleCallingContext const*);
void doAccessInputProcessBlock(ProcessBlockPrincipal const&, ModuleCallingContext const*);
void doEndProcessBlock(ProcessBlockPrincipal const&, ModuleCallingContext const*);
void doBeginRun(RunTransitionInfo const&, ModuleCallingContext const*);
void doEndRun(RunTransitionInfo const&, ModuleCallingContext const*);
void doBeginLuminosityBlock(LumiTransitionInfo const&, ModuleCallingContext const*);
void doEndLuminosityBlock(LumiTransitionInfo const&, ModuleCallingContext const*);
void doRespondToOpenInputFile(FileBlock const&) {}
void doRespondToCloseInputFile(FileBlock const&) {}
void doRespondToCloseOutputFile() { clearInputProcessBlockCaches(); }
void doRegisterThinnedAssociations(ProductRegistry const&, ThinnedAssociationsHelper&) {}
void registerProductsAndCallbacks(EDAnalyzerBase* module, SignallingProductRegistryFiller* reg);
std::string workerType() const { return "WorkerT<EDAnalyzer>"; }
virtual void analyze(StreamID, Event const&, EventSetup const&) const = 0;
virtual void beginJob() {}
virtual void endJob() {}
virtual void preallocStreams(unsigned int);
virtual void preallocRuns(unsigned int);
virtual void preallocRunsSummary(unsigned int);
virtual void preallocLumis(unsigned int);
virtual void preallocLumisSummary(unsigned int);
virtual void preallocate(PreallocationConfiguration const&);
virtual void doBeginStream_(StreamID id);
virtual void doEndStream_(StreamID id);
virtual void doStreamBeginRun_(StreamID id, Run const& rp, EventSetup const& c);
virtual void doStreamEndRun_(StreamID id, Run const& rp, EventSetup const& c);
virtual void doStreamEndRunSummary_(StreamID id, Run const& rp, EventSetup const& c);
virtual void doStreamBeginLuminosityBlock_(StreamID id, LuminosityBlock const& lbp, EventSetup const& c);
virtual void doStreamEndLuminosityBlock_(StreamID id, LuminosityBlock const& lbp, EventSetup const& c);
virtual void doStreamEndLuminosityBlockSummary_(StreamID id, LuminosityBlock const& lbp, EventSetup const& c);
virtual void doBeginProcessBlock_(ProcessBlock const&);
virtual void doAccessInputProcessBlock_(ProcessBlock const&);
virtual void doEndProcessBlock_(ProcessBlock const&);
virtual void doBeginRun_(Run const& rp, EventSetup const& c);
virtual void doBeginRunSummary_(Run const& rp, EventSetup const& c);
virtual void doEndRunSummary_(Run const& rp, EventSetup const& c);
virtual void doEndRun_(Run const& rp, EventSetup const& c);
virtual void doBeginLuminosityBlock_(LuminosityBlock const& lbp, EventSetup const& c);
virtual void doBeginLuminosityBlockSummary_(LuminosityBlock const& rp, EventSetup const& c);
virtual void doEndLuminosityBlockSummary_(LuminosityBlock const& lb, EventSetup const& c);
virtual void doEndLuminosityBlock_(LuminosityBlock const& lb, EventSetup const& c);
virtual void clearInputProcessBlockCaches();
bool hasAcquire() const noexcept { return false; }
bool hasAccumulator() const noexcept { return false; }
void setModuleDescription(ModuleDescription const& md) { moduleDescription_ = md; }
ModuleDescription moduleDescription_;
std::function<void(ProductDescription const&)> callWhenNewProductsRegistered_;
};
} // namespace global
} // namespace edm
#endif
|