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
|
// -*- C++ -*-
//
// Package: SiPixelQualityESProducer
// Class: SiPixelQualityESProducer
//
/**\class SiPixelQualityESProducer SiPixelQualityESProducer.h CalibTracker/SiPixelESProducer/src/SiPixelQualityESProducer.cc
Description: <one line class summary>
Implementation:
<Notes on implementation>
*/
//
// Original Author: Gemma Tinti
// Created: Jan 13 2011
//
//
#include <memory>
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/ESProducer.h"
#include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h"
#include "FWCore/Framework/interface/ModuleFactory.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "CondFormats/DataRecord/interface/SiPixelQualityFromDbRcd.h"
#include "CondFormats/DataRecord/interface/SiPixelQualityRcd.h"
#include "CondFormats/SiPixelObjects/interface/SiPixelQuality.h"
#include "CondFormats/SiStripObjects/interface/SiStripDetVOff.h"
class SiPixelQualityESProducer : public edm::ESProducer, public edm::EventSetupRecordIntervalFinder {
public:
SiPixelQualityESProducer(const edm::ParameterSet& iConfig);
~SiPixelQualityESProducer() override = default;
std::unique_ptr<SiPixelQuality> produce(const SiPixelQualityRcd& iRecord);
static void fillDescriptions(edm::ConfigurationDescriptions&);
private:
void setIntervalFor(const edm::eventsetup::EventSetupRecordKey&,
const edm::IOVSyncValue&,
edm::ValidityInterval&) override;
edm::ESGetToken<SiPixelQuality, SiPixelQualityFromDbRcd> siPixelQualityFromDbToken_;
edm::ESGetToken<SiStripDetVOff, SiPixelDetVOffRcd> voffToken_;
};
SiPixelQualityESProducer::SiPixelQualityESProducer(const edm::ParameterSet& iConfig) {
// setWhatProduced internally uses "appendToDataLabel" to name the output product of this ESProducer
auto const& appendToDataLabel = iConfig.getParameter<std::string>("appendToDataLabel");
auto esCC = setWhatProduced(this);
// "siPixelQualityFromDbLabel" corresponds to the Label of a tag with Record
// "SiPixelQualityFromDbRcd" in the EventSetup (normally provided by the GlobalTag)
auto const& siPixelQualityFromDbLabel = iConfig.getParameter<std::string>("siPixelQualityFromDbLabel");
siPixelQualityFromDbToken_ = esCC.consumes(edm::ESInputTag{"", siPixelQualityFromDbLabel});
voffToken_ = esCC.consumes();
findingRecord<SiPixelQualityRcd>();
edm::LogInfo("SiPixelQualityESProducer")
<< "Module = \"" << description().label_ << "\" (appendToDataLabel = \"" << appendToDataLabel
<< "\", siPixelQualityFromDbLabel = \"" << siPixelQualityFromDbLabel << "\")";
}
std::unique_ptr<SiPixelQuality> SiPixelQualityESProducer::produce(const SiPixelQualityRcd& iRecord) {
///////////////////////////////////////////////////////
// errortype "whole" = int 0 in DB BadRocs = 65535 //
// errortype "tbmA" = int 1 in DB BadRocs = 255 //
// errortype "tbmB" = int 2 in DB Bad Rocs = 65280 //
// errortype "none" = int 3 in DB //
///////////////////////////////////////////////////////
//if I have understood this is the one got from the DB or file, but in any case the ORIGINAL(maybe i need to get the record for it)
//SiPixelQuality * obj = new SiPixelQuality();
//SiPixelQuality::disabledModuleType BadModule;
//BadModule.DetID = 1; BadModule.errorType = 0; BadModule.BadRocs = 65535; obj->addDisabledModule(BadModule);
//now the dbobject is the one copied from the db
auto dbptr = std::make_unique<SiPixelQuality>(iRecord.get(siPixelQualityFromDbToken_));
//here is the magic line in which it switches off Bad Modules
dbptr->add(&(iRecord.get(voffToken_)));
return dbptr;
}
void SiPixelQualityESProducer::setIntervalFor(const edm::eventsetup::EventSetupRecordKey&,
const edm::IOVSyncValue& iosv,
edm::ValidityInterval& oValidity) {
edm::ValidityInterval infinity(iosv.beginOfTime(), iosv.endOfTime());
oValidity = infinity;
}
void SiPixelQualityESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<std::string>("siPixelQualityFromDbLabel", "");
{
edm::ParameterSetDescription desc_ps;
desc_ps.add<std::string>("record", "SiPixelQualityFromDbRcd");
desc_ps.add<std::string>("tag", "");
std::vector<edm::ParameterSet> default_ps;
default_ps.reserve(2);
{
edm::ParameterSet temp;
temp.addParameter<std::string>("record", "SiPixelQualityFromDbRcd");
temp.addParameter<std::string>("tag", "");
default_ps.push_back(temp);
}
{
edm::ParameterSet temp;
temp.addParameter<std::string>("record", "SiPixelDetVOffRcd");
temp.addParameter<std::string>("tag", "");
default_ps.push_back(temp);
}
desc.addVPSet("ListOfRecordToMerge", desc_ps, default_ps);
}
descriptions.addWithDefaultLabel(desc);
}
DEFINE_FWK_EVENTSETUP_MODULE(SiPixelQualityESProducer);
|