CMS 3D CMS Logo

AlCaRecoTriggerBitsRcdUpdate.cc
Go to the documentation of this file.
1 
10 #include <string>
11 #include <map>
12 #include <vector>
13 
14 // Framework
22 
23 // Database
25 
26 // What I want to write:
28 // Rcd for reading old one:
30 
32 public:
35 
36  void analyze(const edm::Event &evt, const edm::EventSetup &evtSetup) override;
37 
38 private:
39  typedef std::map<std::string, std::string> TriggerMap;
41  bool removeKeysFromMap(const std::vector<std::string> &keys, TriggerMap &triggerMap) const;
42  bool replaceKeysFromMap(const std::vector<edm::ParameterSet> &alcarecoReplace, TriggerMap &triggerMap) const;
43  bool addTriggerLists(const std::vector<edm::ParameterSet> &triggerListsAdd, AlCaRecoTriggerBits &bits) const;
45  void writeBitsToDB(AlCaRecoTriggerBits *bitsToWrite) const;
46 
48  unsigned int nEventCalls_;
49  const unsigned int firstRunIOV_;
50  const int lastRunIOV_;
51  const bool startEmpty_;
52  const std::vector<std::string> listNamesRemove_;
53  const std::vector<edm::ParameterSet> triggerListsAdd_;
54  const std::vector<edm::ParameterSet> alcarecoReplace_;
55 };
56 
60 
62  : triggerBitsToken_(esConsumes()),
63  nEventCalls_(0),
64  firstRunIOV_(cfg.getParameter<unsigned int>("firstRunIOV")),
65  lastRunIOV_(cfg.getParameter<int>("lastRunIOV")),
66  startEmpty_(cfg.getParameter<bool>("startEmpty")),
67  listNamesRemove_(cfg.getParameter<std::vector<std::string> >("listNamesRemove")),
68  triggerListsAdd_(cfg.getParameter<std::vector<edm::ParameterSet> >("triggerListsAdd")),
69  alcarecoReplace_(cfg.getParameter<std::vector<edm::ParameterSet> >("alcarecoToReplace")) {}
70 
73  if (nEventCalls_++ > 0) { // postfix increment!
74  edm::LogWarning("BadConfig") << "@SUB=analyze"
75  << "Writing to DB to be done only once, set\n"
76  << "'process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(1))'\n"
77  << " next time. But your writing is fine.)";
78  return;
79  }
80 
81  // create what to write - starting from empty or existing list (auto_ptr?)
82  AlCaRecoTriggerBits *bitsToWrite = this->createStartTriggerBits(startEmpty_, iSetup);
83 
84  // remove some existing entries in map
86 
87  // now add new entries
88  this->addTriggerLists(triggerListsAdd_, *bitsToWrite);
89 
90  // now replace keys
92 
93  // finally write to DB
94  this->writeBitsToDB(bitsToWrite);
95 }
96 
98 AlCaRecoTriggerBits * // auto_ptr?
100  if (startEmpty) {
101  return new AlCaRecoTriggerBits;
102  } else {
103  const auto &triggerBits = &evtSetup.getData(triggerBitsToken_);
104  return new AlCaRecoTriggerBits(*triggerBits); // copy old one
105  }
106 }
107 
109 bool AlCaRecoTriggerBitsRcdUpdate::removeKeysFromMap(const std::vector<std::string> &keys,
110  TriggerMap &triggerMap) const {
111  for (std::vector<std::string>::const_iterator iKey = keys.begin(), endKey = keys.end(); iKey != endKey; ++iKey) {
112  if (triggerMap.find(*iKey) != triggerMap.end()) {
113  // remove
114  // edm::LogError("Temp") << "@SUB=removeKeysFromMap" << "Cannot yet remove '" << *iKey
115  // << "' from map.";
116  // FIXME: test next line@
117  triggerMap.erase(*iKey);
118  } else { // not in list ==> misconfiguartion!
119  throw cms::Exception("BadConfig") << "[AlCaRecoTriggerBitsRcdUpdate::removeKeysFromMap] "
120  << "Cannot remove key '" << *iKey << "' since not in "
121  << "list - typo in configuration?\n";
122  return false;
123  }
124  }
125  return true;
126 }
127 
129 bool AlCaRecoTriggerBitsRcdUpdate::replaceKeysFromMap(const std::vector<edm::ParameterSet> &alcarecoReplace,
130  TriggerMap &triggerMap) const {
131  std::vector<std::pair<std::string, std::string> > keyPairs;
132  keyPairs.reserve(alcarecoReplace.size());
133 
134  for (auto &iSet : alcarecoReplace) {
135  const std::string oldKey(iSet.getParameter<std::string>("oldKey"));
136  const std::string newKey(iSet.getParameter<std::string>("newKey"));
137  keyPairs.push_back(std::make_pair(oldKey, newKey));
138  }
139 
140  for (auto &iKey : keyPairs) {
141  if (triggerMap.find(iKey.first) != triggerMap.end()) {
142  std::string bitsToReplace = triggerMap[iKey.first];
143  triggerMap.erase(iKey.first);
144  triggerMap[iKey.second] = bitsToReplace;
145  } else { // not in list ==> misconfiguration!
146  edm::LogWarning("AlCaRecoTriggerBitsRcdUpdate")
147  << "[AlCaRecoTriggerBitsRcdUpdate::replaceKeysFromMap] "
148  << "Cannot replace key '" << iKey.first << "with " << iKey.second << " since not in "
149  << "list - typo in configuration?\n";
150  return false;
151  }
152  }
153  return true;
154 }
155 
157 bool AlCaRecoTriggerBitsRcdUpdate::addTriggerLists(const std::vector<edm::ParameterSet> &triggerListsAdd,
158  AlCaRecoTriggerBits &bits) const {
159  TriggerMap &triggerMap = bits.m_alcarecoToTrig;
160 
161  // loop on PSets, each containing the key (filter name) and a vstring with triggers
162  for (std::vector<edm::ParameterSet>::const_iterator iSet = triggerListsAdd.begin(); iSet != triggerListsAdd.end();
163  ++iSet) {
164  const std::vector<std::string> paths(iSet->getParameter<std::vector<std::string> >("hltPaths"));
165  // We must avoid a map<string,vector<string> > in DB for performance reason,
166  // so we have to merge the paths into one string that will be decoded when needed:
167  const std::string mergedPaths = bits.compose(paths);
168 
169  const std::string filter(iSet->getParameter<std::string>("listName"));
170  if (triggerMap.find(filter) != triggerMap.end()) {
171  throw cms::Exception("BadConfig") << "List name '" << filter << "' already in map, either "
172  << "remove from 'triggerListsAdd' or "
173  << " add to 'listNamesRemove'.\n";
174  }
175  triggerMap[filter] = mergedPaths;
176  }
177 
178  return true;
179 }
180 
183  edm::LogInfo("") << "Uploading to the database...";
184 
186  if (!poolDbService.isAvailable()) {
187  throw cms::Exception("NotAvailable") << "PoolDBOutputService not available.\n";
188  }
189 
190  // ownership of bitsToWrite transferred
191  // FIXME: Have to check that timetype is run number! How?
192  const std::string recordName("AlCaRecoTriggerBitsRcd");
193  if (poolDbService->isNewTagRequest(recordName)) { // tag not yet existing
194  // lastRunIOV_ = -1 means infinity:
195  const cond::Time_t lastRun = (lastRunIOV_ < 0 ? poolDbService->endOfTime() : lastRunIOV_);
196  poolDbService->createNewIOV(bitsToWrite, firstRunIOV_, lastRun, recordName);
197  } else { // tag exists, can only append
198  if (lastRunIOV_ >= 0) {
199  throw cms::Exception("BadConfig") << "Tag already exists, can only append until infinity,"
200  << " but lastRunIOV = " << lastRunIOV_ << ".\n";
201  }
202  poolDbService->appendSinceTime(bitsToWrite, firstRunIOV_, recordName);
203  }
204 
205  edm::LogInfo("") << "...done for runs " << firstRunIOV_ << " to " << lastRunIOV_ << " (< 0 meaning infinity)!";
206 }
207 
208 //define this as a plug-in
electrons_cff.bool
bool
Definition: electrons_cff.py:366
AlCaRecoTriggerBitsRcdUpdate::analyze
void analyze(const edm::Event &evt, const edm::EventSetup &evtSetup) override
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:72
MessageLogger.h
ESHandle.h
AlCaRecoTriggerBitsRcdUpdate::startEmpty_
const bool startEmpty_
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:51
AlCaRecoTriggerBitsRcdUpdate::createStartTriggerBits
AlCaRecoTriggerBits * createStartTriggerBits(bool startEmpty, const edm::EventSetup &evtSetup) const
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:99
edm
HLT enums.
Definition: AlignableModifier.h:19
align_cfg.recordName
recordName
Definition: align_cfg.py:66
cond::service::PoolDBOutputService::appendSinceTime
void appendSinceTime(const T *payloadObj, cond::Time_t sinceTime, const std::string &recordName)
Definition: PoolDBOutputService.h:141
AlCaRecoTriggerBitsRcdUpdate::writeBitsToDB
void writeBitsToDB(AlCaRecoTriggerBits *bitsToWrite) const
Takes over memory uresponsibility for 'bitsToWrite'.
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:182
EDAnalyzer.h
relativeConstraints.keys
keys
Definition: relativeConstraints.py:89
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
AlCaRecoTriggerBits.h
AlCaRecoTriggerBitsRcdUpdate::alcarecoReplace_
const std::vector< edm::ParameterSet > alcarecoReplace_
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:54
edm::Service::isAvailable
bool isAvailable() const
Definition: Service.h:40
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
edm::EDAnalyzer
Definition: EDAnalyzer.h:28
AlCaRecoTriggerBitsRcdUpdate::removeKeysFromMap
bool removeKeysFromMap(const std::vector< std::string > &keys, TriggerMap &triggerMap) const
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:109
AlCaRecoTriggerBitsRcdUpdate::listNamesRemove_
const std::vector< std::string > listNamesRemove_
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:52
MakerMacros.h
PoolDBOutputService.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
cond::service::PoolDBOutputService::createNewIOV
void createNewIOV(const T *firstPayloadObj, cond::Time_t firstSinceTime, cond::Time_t, const std::string &recordName)
Definition: PoolDBOutputService.h:116
Service.h
AlCaRecoTriggerBitsRcdUpdate::triggerBitsToken_
edm::ESGetToken< AlCaRecoTriggerBits, AlCaRecoTriggerBitsRcd > triggerBitsToken_
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:47
CreateSqliteForCondDB_cfg.startEmpty
startEmpty
Definition: CreateSqliteForCondDB_cfg.py:88
ALCARECOTkAlBeamHalo_cff.filter
filter
Definition: ALCARECOTkAlBeamHalo_cff.py:27
AlCaRecoTriggerBits
Definition: AlCaRecoTriggerBits.h:9
AlCaRecoTriggerBitsRcdUpdate::nEventCalls_
unsigned int nEventCalls_
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:48
AlCaRecoTriggerBitsRcdUpdate::AlCaRecoTriggerBitsRcdUpdate
AlCaRecoTriggerBitsRcdUpdate(const edm::ParameterSet &cfg)
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:61
BeamSpotPI::lastRun
Definition: BeamSpotPayloadInspectorHelper.h:40
AlCaRecoTriggerBitsRcdUpdate
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:31
edm::ParameterSet
Definition: ParameterSet.h:47
ParameterSet
Definition: Functions.h:16
AlCaRecoTriggerBitsRcdUpdate::TriggerMap
std::map< std::string, std::string > TriggerMap
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:39
cond::Time_t
unsigned long long Time_t
Definition: Time.h:14
edm::Service< cond::service::PoolDBOutputService >
createfilelist.int
int
Definition: createfilelist.py:10
AlCaRecoTriggerBitsRcd.h
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
AlCaRecoTriggerBitsRcdUpdate::addTriggerLists
bool addTriggerLists(const std::vector< edm::ParameterSet > &triggerListsAdd, AlCaRecoTriggerBits &bits) const
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:157
edm::EventSetup
Definition: EventSetup.h:58
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::ESGetToken< AlCaRecoTriggerBits, AlCaRecoTriggerBitsRcd >
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:127
looper.cfg
cfg
Definition: looper.py:296
cond::service::PoolDBOutputService::endOfTime
cond::Time_t endOfTime() const
Definition: PoolDBOutputService.cc:213
AlCaRecoTriggerBitsRcdUpdate::firstRunIOV_
const unsigned int firstRunIOV_
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:49
std
Definition: JetResolutionObject.h:76
AlCaRecoTriggerBits::m_alcarecoToTrig
std::map< std::string, std::string > m_alcarecoToTrig
Definition: AlCaRecoTriggerBits.h:21
AlCaRecoTriggerBitsRcdUpdate::replaceKeysFromMap
bool replaceKeysFromMap(const std::vector< edm::ParameterSet > &alcarecoReplace, TriggerMap &triggerMap) const
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:129
Exception
Definition: hltDiff.cc:245
AlCaRecoTriggerBitsRcdUpdate::lastRunIOV_
const int lastRunIOV_
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:50
EventSetup.h
cond::service::PoolDBOutputService::isNewTagRequest
bool isNewTagRequest(const std::string &recordName)
Definition: PoolDBOutputService.cc:128
Skims_PA_cff.paths
paths
Definition: Skims_PA_cff.py:18
AlCaRecoTriggerBitsRcdUpdate::triggerListsAdd_
const std::vector< edm::ParameterSet > triggerListsAdd_
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:53
ParameterSet.h
AlCaRecoTriggerBits::compose
std::string compose(const std::vector< std::string > &paths) const
Compose several paths into one string :
Definition: AlCaRecoTriggerBits.cc:9
DeDxTools::esConsumes
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
edm::Event
Definition: Event.h:73
CreateSqliteForCondDB_cfg.triggerListsAdd
triggerListsAdd
Definition: CreateSqliteForCondDB_cfg.py:91
AlCaRecoTriggerBitsRcdUpdate::~AlCaRecoTriggerBitsRcdUpdate
~AlCaRecoTriggerBitsRcdUpdate() override
Definition: AlCaRecoTriggerBitsRcdUpdate.cc:34