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
|
// system include files
#include <atomic>
#include <memory>
#include <cmath>
// user include files
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/global/EDFilter.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/Run.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "DataFormats/Common/interface/Handle.h"
#include "DataFormats/Common/interface/Ref.h"
#include "DataFormats/HcalCalibObjects/interface/HcalHBHEMuonVariables.h"
//#define EDM_ML_DEBUG
//
// class declaration
//
namespace alcaHcalHBHEMuonFilter {
struct Counters {
Counters() : nAll_(0), nGood_(0), nFinal_(0) {}
mutable std::atomic<unsigned int> nAll_, nGood_, nFinal_;
};
} // namespace alcaHcalHBHEMuonFilter
class AlCaHcalHBHEMuonFilter : public edm::global::EDFilter<edm::RunCache<alcaHcalHBHEMuonFilter::Counters> > {
public:
AlCaHcalHBHEMuonFilter(edm::ParameterSet const&);
~AlCaHcalHBHEMuonFilter() override = default;
std::shared_ptr<alcaHcalHBHEMuonFilter::Counters> globalBeginRun(edm::Run const&,
edm::EventSetup const&) const override;
bool filter(edm::StreamID, edm::Event&, edm::EventSetup const&) const override;
void globalEndRun(edm::Run const& iRun, edm::EventSetup const&) const override;
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
private:
// ----------member data ---------------------------
const int prescale_;
const double minimumMuonP_;
const edm::InputTag labelHBHEMuonVar_;
const edm::EDGetTokenT<HcalHBHEMuonVariablesCollection> tokHBHEMuonVar_;
};
//
// constructors and destructor
//
AlCaHcalHBHEMuonFilter::AlCaHcalHBHEMuonFilter(edm::ParameterSet const& iConfig)
: prescale_(iConfig.getParameter<int>("prescale")),
minimumMuonP_(iConfig.getParameter<double>("minimumMuonP")),
labelHBHEMuonVar_(iConfig.getParameter<edm::InputTag>("hbheMuonLabel")),
tokHBHEMuonVar_(consumes<HcalHBHEMuonVariablesCollection>(labelHBHEMuonVar_)) {
edm::LogVerbatim("HBHEMuon") << "Parameters read from config file \n\t prescale_ " << prescale_ << "\t minimumMuonP_ "
<< minimumMuonP_ << "\n\t Labels " << labelHBHEMuonVar_;
} // AlCaHcalHBHEMuonFilter::AlCaHcalHBHEMuonFilter constructor
//
// member functions
//
// ------------ method called on each new Event ------------
bool AlCaHcalHBHEMuonFilter::filter(edm::StreamID, edm::Event& iEvent, edm::EventSetup const&) const {
bool accept(false);
++(runCache(iEvent.getRun().index())->nAll_);
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HBHEMuon") << "AlCaHcalHBHEMuonFilter::Run " << iEvent.id().run() << " Event "
<< iEvent.id().event() << " Luminosity " << iEvent.luminosityBlock() << " Bunch "
<< iEvent.bunchCrossing();
#endif
auto const& hbheMuonColl = iEvent.getHandle(tokHBHEMuonVar_);
if (hbheMuonColl.isValid()) {
auto hbheMuon = hbheMuonColl.product();
if (!hbheMuon->empty()) {
bool ok(false);
for (auto const& muon : *hbheMuon)
if (muon.pMuon_ >= minimumMuonP_)
ok = true;
if (ok) {
++(runCache(iEvent.getRun().index())->nGood_);
if (prescale_ <= 1)
accept = true;
else if (runCache(iEvent.getRun().index())->nGood_ % prescale_ == 1)
accept = true;
}
}
} else {
edm::LogVerbatim("HBHEMuon") << "AlCaHcalHBHEMuonFilter::Cannot find the collection for HcalHBHEMuonVariables";
}
// Return the acceptance flag
if (accept)
++(runCache(iEvent.getRun().index())->nFinal_);
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HBHEMuon") << "AlCaHcalHBHEMuonFilter::Accept flag " << accept << " All "
<< runCache(iEvent.getRun().index())->nAll_ << " Good "
<< runCache(iEvent.getRun().index())->nGood_ << " Final "
<< runCache(iEvent.getRun().index())->nFinal_;
#endif
return accept;
} // AlCaHcalHBHEMuonFilter::filter
// ------------ method called when starting to processes a run ------------
std::shared_ptr<alcaHcalHBHEMuonFilter::Counters> AlCaHcalHBHEMuonFilter::globalBeginRun(edm::Run const& iRun,
edm::EventSetup const&) const {
edm::LogVerbatim("HBHEMuon") << "Start the Run " << iRun.run();
return std::make_shared<alcaHcalHBHEMuonFilter::Counters>();
}
// ------------ method called when ending the processing of a run ------------
void AlCaHcalHBHEMuonFilter::globalEndRun(edm::Run const& iRun, edm::EventSetup const&) const {
edm::LogVerbatim("HBHEMuon") << "Select " << runCache(iRun.index())->nFinal_ << " out of "
<< runCache(iRun.index())->nGood_ << " good and " << runCache(iRun.index())->nAll_
<< " total events";
}
// ------------ method fills 'descriptions' with the allowed parameters for the module ------------
void AlCaHcalHBHEMuonFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<int>("prescale", 1);
desc.add<double>("minimumMuonP", 5.0);
desc.add<edm::InputTag>("hbheMuonLabel", edm::InputTag("alcaHcalHBHEMuonProducer", "hbheMuon"));
descriptions.add("alcaHcalHBHEMuonFilter", desc);
}
//define this as a plug-in
#include "FWCore/Framework/interface/MakerMacros.h"
DEFINE_FWK_MODULE(AlCaHcalHBHEMuonFilter);
|