forked from cms-sw/cmssw
/
DDTestSpecParsFilter.cc
68 lines (58 loc) · 2.1 KB
/
DDTestSpecParsFilter.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
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/Framework/interface/ESTransientHandle.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "Geometry/Records/interface/DDSpecParRegistryRcd.h"
#include "DetectorDescription/DDCMS/interface/DDSpecParRegistry.h"
#include <iostream>
using namespace std;
using namespace cms;
using namespace edm;
class DDTestSpecParsFilter : public one::EDAnalyzer<> {
public:
explicit DDTestSpecParsFilter(const ParameterSet& iConfig)
: m_tag(iConfig.getParameter<ESInputTag>("DDDetector")),
m_attribute(iConfig.getUntrackedParameter<string>("attribute", "")),
m_value(iConfig.getUntrackedParameter<string>("value", ""))
{}
void beginJob() override {}
void analyze(Event const& iEvent, EventSetup const&) override;
void endJob() override {}
private:
const ESInputTag m_tag;
const string m_attribute;
const string m_value;
};
void
DDTestSpecParsFilter::analyze(const Event&, const EventSetup& iEventSetup)
{
LogVerbatim("Geometry") << "DDTestSpecParsFilter::analyze: " << m_tag;
ESTransientHandle<DDSpecParRegistry> registry;
iEventSetup.get<DDSpecParRegistryRcd>().get(m_tag, registry);
LogVerbatim("Geometry") << "DDTestSpecParsFilter::analyze: " << m_tag
<< " for attribute " << m_attribute << " and value " << m_value;
LogVerbatim("Geometry") << "DD SpecPar Registry size: " << registry->specpars.size();
DDSpecParRefs myReg;
if(m_value.empty())
registry->filter(myReg, m_attribute);
else
registry->filter(myReg, m_attribute, m_value);
LogVerbatim("Geometry").log([&myReg](auto& log) {
log << "Filtered DD SpecPar Registry size: " << myReg.size() << "\n";
for(const auto& t: myReg) {
log << "\nRegExps { ";
for(const auto& ki : t->paths)
log << ki << " ";
log << "};\n ";
for(const auto& kl : t->spars) {
log << kl.first << " = ";
for(const auto& kil : kl.second) {
log << kil << " ";
}
log << "\n ";
}
}
});
}
DEFINE_FWK_MODULE(DDTestSpecParsFilter);