/
PixelCPETemplateRecoESProducer.cc
89 lines (73 loc) · 3.67 KB
/
PixelCPETemplateRecoESProducer.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
#include "RecoLocalTracker/SiPixelRecHits/interface/PixelCPETemplateReco.h"
#include "RecoLocalTracker/Records/interface/TkPixelCPERecord.h"
#include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h"
#include "MagneticField/Engine/interface/MagneticField.h"
#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
#include "Geometry/Records/interface/TrackerTopologyRcd.h"
#include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/ModuleFactory.h"
#include "FWCore/Framework/interface/ESProducer.h"
#include <string>
#include <memory>
class PixelCPETemplateRecoESProducer : public edm::ESProducer {
public:
PixelCPETemplateRecoESProducer(const edm::ParameterSet& p);
std::unique_ptr<PixelClusterParameterEstimator> produce(const TkPixelCPERecord&);
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
private:
edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> magfieldToken_;
edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> pDDToken_;
edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> hTTToken_;
edm::ESGetToken<SiPixelLorentzAngle, SiPixelLorentzAngleRcd> lorentzAngleToken_;
edm::ESGetToken<SiPixelTemplateDBObject, SiPixelTemplateDBObjectESProducerRcd> templateDBobjectToken_;
edm::ParameterSet pset_;
bool doLorentzFromAlignment_;
bool useLAFromDB_;
};
using namespace edm;
PixelCPETemplateRecoESProducer::PixelCPETemplateRecoESProducer(const edm::ParameterSet& p) {
std::string myname = p.getParameter<std::string>("ComponentName");
useLAFromDB_ = p.getParameter<bool>("useLAFromDB");
doLorentzFromAlignment_ = p.getParameter<bool>("doLorentzFromAlignment");
pset_ = p;
auto c = setWhatProduced(this, myname);
magfieldToken_ = c.consumes();
pDDToken_ = c.consumes();
hTTToken_ = c.consumes();
templateDBobjectToken_ = c.consumes();
if (useLAFromDB_ || doLorentzFromAlignment_) {
char const* laLabel = doLorentzFromAlignment_ ? "fromAlignment" : "";
lorentzAngleToken_ = c.consumes(edm::ESInputTag("", laLabel));
}
}
std::unique_ptr<PixelClusterParameterEstimator> PixelCPETemplateRecoESProducer::produce(
const TkPixelCPERecord& iRecord) {
// Normal, default LA is used in case of template failure, load it unless
// turned off
// if turned off, null is ok, becomes zero
const SiPixelLorentzAngle* lorentzAngleProduct = nullptr;
if (useLAFromDB_ || doLorentzFromAlignment_) {
lorentzAngleProduct = &iRecord.get(lorentzAngleToken_);
}
return std::make_unique<PixelCPETemplateReco>(pset_,
&iRecord.get(magfieldToken_),
iRecord.get(pDDToken_),
iRecord.get(hTTToken_),
lorentzAngleProduct,
&iRecord.get(templateDBobjectToken_));
}
void PixelCPETemplateRecoESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
// from PixelCPEBase
PixelCPEBase::fillPSetDescription(desc);
// from PixelCPETemplateReco
PixelCPETemplateReco::fillPSetDescription(desc);
// specific to PixelCPETemplateRecoESProducer
desc.add<std::string>("ComponentName", "PixelCPETemplateReco");
descriptions.add("_templates_default", desc);
}
DEFINE_FWK_EVENTSETUP_MODULE(PixelCPETemplateRecoESProducer);