CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
HLTriggerJSONMonitoring Class Reference
Inheritance diagram for HLTriggerJSONMonitoring:
edm::global::EDAnalyzer< edm::StreamCache< HLTriggerJSONMonitoringData::stream >, edm::RunCache< HLTriggerJSONMonitoringData::run >, edm::LuminosityBlockSummaryCache< HLTriggerJSONMonitoringData::lumisection > > edm::global::EDAnalyzerBase edm::EDConsumerBase

Public Member Functions

void analyze (edm::StreamID, edm::Event const &, edm::EventSetup const &) const override
 
std::unique_ptr< HLTriggerJSONMonitoringData::streambeginStream (edm::StreamID) const override
 
std::shared_ptr< HLTriggerJSONMonitoringData::lumisectionglobalBeginLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &) const override
 
std::shared_ptr< HLTriggerJSONMonitoringData::runglobalBeginRun (edm::Run const &, edm::EventSetup const &) const override
 
void globalEndLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &, HLTriggerJSONMonitoringData::lumisection *) const override
 
void globalEndRun (edm::Run const &, edm::EventSetup const &) const override
 
 HLTriggerJSONMonitoring (const edm::ParameterSet &)
 
void streamBeginLuminosityBlock (edm::StreamID, edm::LuminosityBlock const &, edm::EventSetup const &) const override
 
void streamEndLuminosityBlockSummary (edm::StreamID, edm::LuminosityBlock const &, edm::EventSetup const &, HLTriggerJSONMonitoringData::lumisection *) const override
 
 ~HLTriggerJSONMonitoring () override=default
 
- Public Member Functions inherited from edm::global::EDAnalyzer< edm::StreamCache< HLTriggerJSONMonitoringData::stream >, edm::RunCache< HLTriggerJSONMonitoringData::run >, edm::LuminosityBlockSummaryCache< HLTriggerJSONMonitoringData::lumisection > >
 EDAnalyzer ()=default
 
 EDAnalyzer (const EDAnalyzer &)=delete
 
const EDAnalyzeroperator= (const EDAnalyzer &)=delete
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDAnalyzerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzerBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDAnalyzerBase () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESResolverIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESResolverIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::array< std::vector< ModuleDescription const *> *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const *> const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
void selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProductResolverIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::global::EDAnalyzerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Static Private Member Functions

static void writeIniFile (HLTriggerJSONMonitoringData::run const &, unsigned int)
 
static void writeJsdFile (HLTriggerJSONMonitoringData::run const &)
 

Private Attributes

const edm::InputTag triggerResults_
 
const edm::EDGetTokenT< edm::TriggerResultstriggerResultsToken_
 

Static Private Attributes

static constexpr const char * datasetPathNamePrefix_ = "Dataset_"
 
static constexpr const char * streamName_ = "streamHLTRates"
 

Additional Inherited Members

- Public Types inherited from edm::global::EDAnalyzerBase
typedef EDAnalyzerBase ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< Bconsumes (edm::InputTag tag) noexcept
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes ()
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag)
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
void resetItemsToGetFrom (BranchType iType)
 

Detailed Description

Description: This class outputs JSON files with HLT monitoring information.

Definition at line 81 of file HLTriggerJSONMonitoring.cc.

Constructor & Destructor Documentation

◆ HLTriggerJSONMonitoring()

HLTriggerJSONMonitoring::HLTriggerJSONMonitoring ( const edm::ParameterSet config)
explicit

Definition at line 149 of file HLTriggerJSONMonitoring.cc.

References Exception, geometryDiff::file, and AlCaHLTBitMon_QueryRunRegistry::string.

150  : triggerResults_(config.getParameter<edm::InputTag>("triggerResults")),
152  if (edm::Service<evf::EvFDaqDirector>().isAvailable()) {
153  //output initemp file. This lets hltd know number of streams early
154  std::string initFileName = edm::Service<evf::EvFDaqDirector>()->getInitTempFilePath("streamHLTRates");
155  std::ofstream file(initFileName);
156  if (!file)
157  throw cms::Exception("HLTriggerJsonMonitoring")
158  << "Cannot create INITEMP file: " << initFileName << " error: " << strerror(errno);
159  file.close();
160  }
161 }
Definition: config.py:1
const edm::EDGetTokenT< edm::TriggerResults > triggerResultsToken_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
const edm::InputTag triggerResults_

◆ ~HLTriggerJSONMonitoring()

HLTriggerJSONMonitoring::~HLTriggerJSONMonitoring ( )
overridedefault

Member Function Documentation

◆ analyze()

void HLTriggerJSONMonitoring::analyze ( edm::StreamID  sid,
edm::Event const &  event,
edm::EventSetup const &   
) const
overridevirtual

Implements edm::global::EDAnalyzerBase.

Definition at line 275 of file HLTriggerJSONMonitoring.cc.

References cms::cuda::assert(), edm::InputTag::encode(), patZpeak::handle, mps_fire::i, heavyIonCSV_trainingSettings::idx, createfilelist::int, or, castor_dqm_sourceclient_file_cfg::path, mysort::results, mps_update::status, cms::cuda::stream, triggerResults_, and triggerResultsToken_.

275  {
276  auto& stream = *streamCache(sid);
277  auto const& rundata = *runCache(event.getRun().index());
278 
279  ++stream.processed;
280 
281  // check that the HLTConfigProvider for the current run has been successfully initialised
282  if (not rundata.hltConfig.inited())
283  return;
284 
285  // get hold of TriggerResults
287  if (not event.getByToken(triggerResultsToken_, handle) or not handle.isValid()) {
288  edm::LogError("HLTriggerJSONMonitoring")
289  << "TriggerResults with label [" + triggerResults_.encode() + "] not present or invalid";
290  return;
291  }
293  assert(results.size() == rundata.hltConfig.triggerNames().size());
294 
295  // check the results for each HLT path
296  for (auto idx = 0u; idx < rundata.indicesOfTriggerPaths.size(); ++idx) {
297  auto const triggerPathIdx = rundata.indicesOfTriggerPaths[idx];
298  auto const& status = results[triggerPathIdx];
299  if (status.wasrun()) {
300  ++stream.hltWasRun[idx];
301  if (status.accept()) {
302  ++stream.hltPrePS[idx];
303  ++stream.hltPostPS[idx];
304  ++stream.hltAccept[idx];
305  } else {
306  int const index = (int)status.index();
307  if (index >= rundata.posPre[idx])
308  ++stream.hltPrePS[idx];
309  if (index > rundata.posPre[idx])
310  ++stream.hltPostPS[idx];
311  if (status.error())
312  ++stream.hltErrors[idx];
313  else
314  ++stream.hltReject[idx];
315  }
316  }
317  }
318 
319  // check the decision for each dataset
320  // FIXME this ignores the prescales, "smart" prescales, and event selection applied in the OutputModule itself
321  for (auto i = 0u; i < rundata.datasets.size(); ++i)
322  if (std::any_of(rundata.datasets[i].begin(), rundata.datasets[i].end(), [&](unsigned int path) {
323  return results.accept(path);
324  }))
325  ++stream.datasets[i];
326 }
std::string encode() const
Definition: InputTag.cc:159
Log< level::Error, false > LogError
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t stream
assert(be >=bs)
const edm::EDGetTokenT< edm::TriggerResults > triggerResultsToken_
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
const edm::InputTag triggerResults_
results
Definition: mysort.py:8
Definition: event.py:1

◆ beginStream()

std::unique_ptr< HLTriggerJSONMonitoringData::stream > HLTriggerJSONMonitoring::beginStream ( edm::StreamID  ) const
override

Definition at line 171 of file HLTriggerJSONMonitoring.cc.

171  {
172  return std::make_unique<HLTriggerJSONMonitoringData::stream>();
173 }

◆ fillDescriptions()

void HLTriggerJSONMonitoring::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 164 of file HLTriggerJSONMonitoring.cc.

References edm::ConfigurationDescriptions::add(), submitPVResolutionJobs::desc, and ProducerED_cfi::InputTag.

164  {
166  desc.add<edm::InputTag>("triggerResults", edm::InputTag("TriggerResults", "", "@currentProcess"));
167  descriptions.add("HLTriggerJSONMonitoring", desc);
168 }
void add(std::string const &label, ParameterSetDescription const &psetDescription)

◆ globalBeginLuminosityBlockSummary()

std::shared_ptr< HLTriggerJSONMonitoringData::lumisection > HLTriggerJSONMonitoring::globalBeginLuminosityBlockSummary ( edm::LuminosityBlock const &  lumi,
edm::EventSetup const &   
) const
override

Definition at line 329 of file HLTriggerJSONMonitoring.cc.

References contentValuesFiles::datasets, and mps_fire::i.

330  {
331  unsigned int triggers = 0;
332  unsigned int datasets = 0;
333  auto const& rundata = *runCache(lumi.getRun().index());
334  if (rundata.hltConfig.inited()) {
335  triggers = rundata.indicesOfTriggerPaths.size();
336  datasets = rundata.hltConfig.datasetNames().size();
337  };
338 
339  // the API of jsoncollector::HistoJ does not really match our use case,
340  // but it is the only vector-like object available in JsonMonitorable.h
341  auto lumidata = std::make_shared<HLTriggerJSONMonitoringData::lumisection>(HLTriggerJSONMonitoringData::lumisection{
342  jsoncollector::HistoJ<unsigned int>(1), // processed
343  jsoncollector::HistoJ<unsigned int>(triggers), // hltWasRun
344  jsoncollector::HistoJ<unsigned int>(triggers), // hltPrePS
345  jsoncollector::HistoJ<unsigned int>(triggers), // hltPostPS
346  jsoncollector::HistoJ<unsigned int>(triggers), // hltAccept
347  jsoncollector::HistoJ<unsigned int>(triggers), // hltReject
348  jsoncollector::HistoJ<unsigned int>(triggers), // hltErrors
350  });
351  // repeated calls to `update` necessary to set the internal element counter
352  lumidata->processed.update(0);
353  for (unsigned int i = 0; i < triggers; ++i)
354  lumidata->hltWasRun.update(0);
355  for (unsigned int i = 0; i < triggers; ++i)
356  lumidata->hltPrePS.update(0);
357  for (unsigned int i = 0; i < triggers; ++i)
358  lumidata->hltPostPS.update(0);
359  for (unsigned int i = 0; i < triggers; ++i)
360  lumidata->hltAccept.update(0);
361  for (unsigned int i = 0; i < triggers; ++i)
362  lumidata->hltReject.update(0);
363  for (unsigned int i = 0; i < triggers; ++i)
364  lumidata->hltErrors.update(0);
365  for (unsigned int i = 0; i < datasets; ++i)
366  lumidata->datasets.update(0);
367 
368  return lumidata;
369 }

◆ globalBeginRun()

std::shared_ptr< HLTriggerJSONMonitoringData::run > HLTriggerJSONMonitoring::globalBeginRun ( edm::Run const &  run,
edm::EventSetup const &  setup 
) const
override

Definition at line 176 of file HLTriggerJSONMonitoring.cc.

References makeLayoutFileForGui::datasetNames, datasetPathNamePrefix_, contentValuesFiles::datasets, spr::find(), mps_fire::i, edm::Service< T >::isAvailable(), dqmiolumiharvest::j, evf::MergeTypeJSNDATA, AlCaHLTBitMon_ParallelJobs::p, Skims_PA_cff::paths, edm::InputTag::process(), writedatasetfile::run, singleTopDQM_cfi::setup, streamName_, L1TEGammaOffline_cfi::triggerNames, triggerResults_, writeIniFile(), and writeJsdFile().

177  {
178  auto rundata = std::make_shared<HLTriggerJSONMonitoringData::run>();
179 
180  // set the DAQ parameters
182  rundata->streamDestination = edm::Service<evf::EvFDaqDirector>()->getStreamDestinations(streamName_);
183  rundata->streamMergeType =
185  rundata->baseRunDir = edm::Service<evf::EvFDaqDirector>()->baseRunDir();
186  } else {
187  rundata->streamDestination = "";
188  rundata->streamMergeType = "";
189  rundata->baseRunDir = ".";
190  }
191 
192  // initialize HLTConfigProvider
193  bool changed = true;
194  if (not rundata->hltConfig.init(run, setup, triggerResults_.process(), changed)) {
195  edm::LogError("HLTriggerJSONMonitoring") << "HLTConfigProvider initialization failed!";
196  } else if (changed) {
197  // triggerNames from TriggerResults (includes DatasetPaths)
198  auto const& triggerNames = rundata->hltConfig.triggerNames();
199  auto const triggerNamesSize = triggerNames.size();
200 
201  // update the list of indices of the HLT Paths (without DatasetPaths) in the TriggerNames list
202  rundata->indicesOfTriggerPaths.clear();
203  rundata->indicesOfTriggerPaths.reserve(triggerNamesSize);
204  for (auto triggerNameIdx = 0u; triggerNameIdx < triggerNamesSize; ++triggerNameIdx) {
205  // skip DatasetPaths
206  if (triggerNames[triggerNameIdx].find(datasetPathNamePrefix_) != 0) {
207  rundata->indicesOfTriggerPaths.emplace_back(triggerNameIdx);
208  }
209  }
210  auto const triggersSize = rundata->indicesOfTriggerPaths.size();
211 
212  // update the list of paths in each dataset
213  auto const& datasets = rundata->hltConfig.datasetContents();
214  auto const& datasetNames = rundata->hltConfig.datasetNames();
215  auto const datasetsSize = datasetNames.size();
216  rundata->datasets.resize(datasetsSize);
217  for (auto ds = 0u; ds < datasetsSize; ++ds) {
218  auto& dataset = rundata->datasets[ds];
219  // check if TriggerNames include the DatasetPath corresponding to this Dataset
220  // - DatasetPaths are normal cms.Path objects
221  // - in Run-3 HLT menus, DatasetPaths are used to define PrimaryDatasets
222  auto const datasetPathName = datasetPathNamePrefix_ + datasetNames[ds];
223  auto const datasetPathExists =
224  std::find(triggerNames.begin(), triggerNames.end(), datasetPathName) != triggerNames.end();
225  if (datasetPathExists) {
226  // if a DatasetPath exists, only that Path is assigned to the Dataset
227  // - this way, the counts of the Dataset properly include prescales on the DatasetPath
228  // and smart-Prescales applied by the DatasetPath to its triggers
229  dataset.reserve(1);
230  auto const index = rundata->hltConfig.triggerIndex(datasetPathName);
231  if (index < triggerNamesSize)
232  dataset.push_back(index);
233  } else {
234  auto const paths = datasets[ds].size();
235  dataset.reserve(paths);
236  for (auto p = 0u; p < paths; p++) {
237  auto const index = rundata->hltConfig.triggerIndex(datasets[ds][p]);
238  if (index < triggerNamesSize)
239  dataset.push_back(index);
240  }
241  }
242  }
243 
244  // find the positions of the prescale filters
245  rundata->posPre.resize(triggersSize);
246  for (auto i = 0u; i < triggersSize; ++i) {
247  rundata->posPre[i] = -1;
248  auto const trigNameIndx = rundata->indicesOfTriggerPaths[i];
249  auto const& moduleLabels = rundata->hltConfig.moduleLabels(trigNameIndx);
250  for (auto j = 0u; j < moduleLabels.size(); ++j) {
251  auto const& moduleType = rundata->hltConfig.moduleType(moduleLabels[j]);
252  if (moduleType == "HLTPrescaler") {
253  rundata->posPre[i] = j;
254  break;
255  }
256  }
257  }
258  }
259 
260  // write the per-run .jsd file
261  rundata->jsdFileName = fmt::sprintf("run%06d_ls0000_streamHLTRates_pid%05d.jsd", run.run(), getpid());
262  writeJsdFile(*rundata);
263 
264  // write the per-run .ini file
265  //iniFileName = fmt::sprintf("run%06d_ls0000_streamHLTRates_pid%05d.ini", run.run(), getpid());
266  writeIniFile(*rundata, run.run());
267 
268  return rundata;
269 }
static constexpr const char * streamName_
static constexpr const char * datasetPathNamePrefix_
static void writeIniFile(HLTriggerJSONMonitoringData::run const &, unsigned int)
Log< level::Error, false > LogError
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
static void writeJsdFile(HLTriggerJSONMonitoringData::run const &)
const edm::InputTag triggerResults_
bool isAvailable() const
Definition: Service.h:40
std::string const & process() const
Definition: InputTag.h:40

◆ globalEndLuminosityBlockSummary()

void HLTriggerJSONMonitoring::globalEndLuminosityBlockSummary ( edm::LuminosityBlock const &  lumi,
edm::EventSetup const &  ,
HLTriggerJSONMonitoringData::lumisection lumidata 
) const
override

Definition at line 424 of file HLTriggerJSONMonitoring.cc.

References cms::Adler32(), Json::Value::append(), jsoncollector::DataPoint::DATA, HLTriggerJSONMonitoringData::lumisection::datasets, jsoncollector::DataPoint::DEFINITION, HLTriggerJSONMonitoringData::lumisection::hltAccept, HLTriggerJSONMonitoringData::lumisection::hltErrors, HLTriggerJSONMonitoringData::lumisection::hltPostPS, HLTriggerJSONMonitoringData::lumisection::hltPrePS, HLTriggerJSONMonitoringData::lumisection::hltReject, HLTriggerJSONMonitoringData::lumisection::hltWasRun, eostools::ls(), HLTriggerJSONMonitoringData::lumisection::processed, mps_fire::result, writedatasetfile::run, evf::FastMonitoringService::shouldWriteFiles(), jsoncollector::DataPoint::SOURCE, AlCaHLTBitMon_QueryRunRegistry::string, jsoncollector::HistoJ< T >::toJsonValue(), jsoncollector::HistoJ< T >::value(), and convertToRaw::writer.

426  {
427  unsigned int ls = lumi.luminosityBlock();
428  unsigned int run = lumi.run();
429 
430  bool writeFiles = true;
431  if (edm::Service<evf::MicroStateService>().isAvailable()) {
434  if (fms)
435  writeFiles = fms->shouldWriteFiles(ls);
436  }
437  if (not writeFiles)
438  return;
439 
440  unsigned int processed = lumidata->processed.value().at(0);
441  auto const& rundata = *runCache(lumi.getRun().index());
443 
444  // [SIC]
445  char hostname[33];
446  gethostname(hostname, 32);
447  std::string sourceHost(hostname);
448 
449  // [SIC]
450  std::stringstream sOutDef;
451  sOutDef << rundata.baseRunDir << "/"
452  << "output_" << getpid() << ".jsd";
453 
454  std::string jsndataFileList = "";
455  unsigned int jsndataSize = 0;
456  unsigned int jsndataAdler32 = 1; // adler32 checksum for an empty file
457 
458  if (processed) {
459  // write the .jsndata files which contain the actual rates
460  Json::Value jsndata;
461  jsndata[jsoncollector::DataPoint::SOURCE] = sourceHost;
462  jsndata[jsoncollector::DataPoint::DEFINITION] = rundata.jsdFileName;
471 
472  auto jsndataFileName = fmt::sprintf("run%06d_ls%04d_streamHLTRates_pid%05d.jsndata", run, ls, getpid());
473 
474  std::string result = writer.write(jsndata);
475  std::ofstream jsndataFile(rundata.baseRunDir + "/" + jsndataFileName);
476  jsndataFile << result;
477  jsndataFile.close();
478 
479  jsndataFileList = jsndataFileName;
480  jsndataSize = result.size();
481  jsndataAdler32 = cms::Adler32(result.c_str(), result.size());
482  }
483 
484  // create a metadata json file for the "HLT rates" pseudo-stream
485  unsigned int jsnProcessed = processed;
486  unsigned int jsnAccepted = processed;
487  unsigned int jsnErrorEvents = 0;
488  unsigned int jsnRetCodeMask = 0;
489  std::string jsnInputFiles = "";
490  unsigned int jsnHLTErrorEvents = 0;
491 
492  Json::Value jsn;
493  jsn[jsoncollector::DataPoint::SOURCE] = sourceHost;
494  jsn[jsoncollector::DataPoint::DEFINITION] = sOutDef.str();
495  jsn[jsoncollector::DataPoint::DATA].append(jsnProcessed);
496  jsn[jsoncollector::DataPoint::DATA].append(jsnAccepted);
497  jsn[jsoncollector::DataPoint::DATA].append(jsnErrorEvents);
498  jsn[jsoncollector::DataPoint::DATA].append(jsnRetCodeMask);
499  jsn[jsoncollector::DataPoint::DATA].append(jsndataFileList);
500  jsn[jsoncollector::DataPoint::DATA].append(jsndataSize);
501  jsn[jsoncollector::DataPoint::DATA].append(jsnInputFiles);
502  jsn[jsoncollector::DataPoint::DATA].append(jsndataAdler32);
503  jsn[jsoncollector::DataPoint::DATA].append(rundata.streamDestination);
504  jsn[jsoncollector::DataPoint::DATA].append(rundata.streamMergeType);
505  jsn[jsoncollector::DataPoint::DATA].append(jsnHLTErrorEvents);
506 
507  auto jsnFileName = fmt::sprintf("run%06d_ls%04d_streamHLTRates_pid%05d.jsn", run, ls, getpid());
508  std::ofstream jsnFile(rundata.baseRunDir + "/" + jsnFileName);
509  jsnFile << writer.write(jsn);
510  jsnFile.close();
511 }
static const std::string SOURCE
Definition: DataPoint.h:116
Value & append(const Value &value)
Append value to array at the end.
jsoncollector::HistoJ< unsigned int > hltReject
Represents a JSON value.
Definition: value.h:99
jsoncollector::HistoJ< unsigned int > hltErrors
std::vector< T > & value()
static const std::string DATA
Definition: DataPoint.h:118
void Adler32(char const *data, size_t len, uint32_t &a, uint32_t &b)
def ls(path, rec=False)
Definition: eostools.py:349
virtual Json::Value toJsonValue() const
jsoncollector::HistoJ< unsigned int > hltWasRun
jsoncollector::HistoJ< unsigned int > hltPrePS
jsoncollector::HistoJ< unsigned int > processed
Writes a Value in JSON format in a human friendly way.
Definition: writer.h:63
bool shouldWriteFiles(unsigned int lumi, unsigned int *proc=nullptr)
static const std::string DEFINITION
Definition: DataPoint.h:117
jsoncollector::HistoJ< unsigned int > datasets
jsoncollector::HistoJ< unsigned int > hltAccept
jsoncollector::HistoJ< unsigned int > hltPostPS

◆ globalEndRun()

void HLTriggerJSONMonitoring::globalEndRun ( edm::Run const &  ,
edm::EventSetup const &   
) const
override

Definition at line 272 of file HLTriggerJSONMonitoring.cc.

272 {}

◆ streamBeginLuminosityBlock()

void HLTriggerJSONMonitoring::streamBeginLuminosityBlock ( edm::StreamID  sid,
edm::LuminosityBlock const &  lumi,
edm::EventSetup const &   
) const
override

Definition at line 372 of file HLTriggerJSONMonitoring.cc.

References contentValuesFiles::datasets, and cms::cuda::stream.

374  {
375  auto& stream = *streamCache(sid);
376 
377  unsigned int triggers = 0;
378  unsigned int datasets = 0;
379  auto const& rundata = *runCache(lumi.getRun().index());
380  if (rundata.hltConfig.inited()) {
381  triggers = rundata.indicesOfTriggerPaths.size();
382  datasets = rundata.hltConfig.datasetNames().size();
383  };
384 
385  // reset the stream counters
386  stream.processed = 0;
387  stream.hltWasRun.assign(triggers, 0);
388  stream.hltPrePS.assign(triggers, 0);
389  stream.hltPostPS.assign(triggers, 0);
390  stream.hltAccept.assign(triggers, 0);
391  stream.hltReject.assign(triggers, 0);
392  stream.hltErrors.assign(triggers, 0);
393  stream.datasets.assign(datasets, 0);
394 }
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t stream

◆ streamEndLuminosityBlockSummary()

void HLTriggerJSONMonitoring::streamEndLuminosityBlockSummary ( edm::StreamID  sid,
edm::LuminosityBlock const &  lumi,
edm::EventSetup const &  ,
HLTriggerJSONMonitoringData::lumisection lumidata 
) const
override

Definition at line 397 of file HLTriggerJSONMonitoring.cc.

References contentValuesFiles::datasets, HLTriggerJSONMonitoringData::lumisection::datasets, HLTriggerJSONMonitoringData::lumisection::hltAccept, HLTriggerJSONMonitoringData::lumisection::hltErrors, HLTriggerJSONMonitoringData::lumisection::hltPostPS, HLTriggerJSONMonitoringData::lumisection::hltPrePS, HLTriggerJSONMonitoringData::lumisection::hltReject, HLTriggerJSONMonitoringData::lumisection::hltWasRun, mps_fire::i, HLTriggerJSONMonitoringData::lumisection::processed, cms::cuda::stream, and jsoncollector::HistoJ< T >::value().

400  {
401  auto const& stream = *streamCache(sid);
402  auto const& rundata = *runCache(lumi.getRun().index());
403  lumidata->processed.value()[0] += stream.processed;
404 
405  // check that the HLTConfigProvider for the current run has been successfully initialised
406  if (not rundata.hltConfig.inited())
407  return;
408 
409  auto const triggers = rundata.indicesOfTriggerPaths.size();
410  for (auto i = 0u; i < triggers; ++i) {
411  lumidata->hltWasRun.value()[i] += stream.hltWasRun[i];
412  lumidata->hltPrePS.value()[i] += stream.hltPrePS[i];
413  lumidata->hltPostPS.value()[i] += stream.hltPostPS[i];
414  lumidata->hltAccept.value()[i] += stream.hltAccept[i];
415  lumidata->hltReject.value()[i] += stream.hltReject[i];
416  lumidata->hltErrors.value()[i] += stream.hltErrors[i];
417  }
418  auto const datasets = rundata.hltConfig.datasetNames().size();
419  for (auto i = 0u; i < datasets; ++i)
420  lumidata->datasets.value()[i] += stream.datasets[i];
421 }
jsoncollector::HistoJ< unsigned int > hltReject
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t stream
jsoncollector::HistoJ< unsigned int > hltErrors
std::vector< T > & value()
jsoncollector::HistoJ< unsigned int > hltWasRun
jsoncollector::HistoJ< unsigned int > hltPrePS
jsoncollector::HistoJ< unsigned int > processed
jsoncollector::HistoJ< unsigned int > datasets
jsoncollector::HistoJ< unsigned int > hltAccept
jsoncollector::HistoJ< unsigned int > hltPostPS

◆ writeIniFile()

void HLTriggerJSONMonitoring::writeIniFile ( HLTriggerJSONMonitoringData::run const &  rundata,
unsigned int  run 
)
staticprivate

Definition at line 531 of file HLTriggerJSONMonitoring.cc.

References Json::arrayValue, HLTriggerJSONMonitoringData::run::baseRunDir, Skims_PA_cff::content, makeLayoutFileForGui::datasetNames, HLTConfigProvider::datasetNames(), geometryDiff::file, HLTriggerJSONMonitoringData::run::hltConfig, heavyIonCSV_trainingSettings::idx, HLTriggerJSONMonitoringData::run::indicesOfTriggerPaths, Skims_PA_cff::name, writedatasetfile::run, AlCaHLTBitMon_QueryRunRegistry::string, L1TEGammaOffline_cfi::triggerNames, HLTConfigProvider::triggerNames(), and convertToRaw::writer.

Referenced by globalBeginRun().

531  {
533 
535  for (auto idx : rundata.indicesOfTriggerPaths)
536  triggerNames.append(rundata.hltConfig.triggerNames()[idx]);
537  content["Path-Names"] = triggerNames;
538 
540  for (auto const& name : rundata.hltConfig.datasetNames())
541  datasetNames.append(name);
542  content["Dataset-Names"] = datasetNames;
543 
544  std::string iniFileName = fmt::sprintf("run%06d_ls0000_streamHLTRates_pid%05d.ini", run, getpid());
545  std::ofstream file(rundata.baseRunDir + "/" + iniFileName);
547  file << writer.write(content);
548  file.close();
549 }
Represents a JSON value.
Definition: value.h:99
Writes a Value in JSON format in a human friendly way.
Definition: writer.h:63
array value (ordered list)
Definition: value.h:30

◆ writeJsdFile()

void HLTriggerJSONMonitoring::writeJsdFile ( HLTriggerJSONMonitoringData::run const &  rundata)
staticprivate

Definition at line 513 of file HLTriggerJSONMonitoring.cc.

References HLTriggerJSONMonitoringData::run::baseRunDir, geometryDiff::file, and HLTriggerJSONMonitoringData::run::jsdFileName.

Referenced by globalBeginRun().

513  {
514  std::ofstream file(rundata.baseRunDir + "/" + rundata.jsdFileName);
515  file << R"""({
516  "data" : [
517  { "name" : "Processed", "type" : "integer", "operation" : "histo"},
518  { "name" : "Path-WasRun", "type" : "integer", "operation" : "histo"},
519  { "name" : "Path-AfterL1Seed", "type" : "integer", "operation" : "histo"},
520  { "name" : "Path-AfterPrescale", "type" : "integer", "operation" : "histo"},
521  { "name" : "Path-Accepted", "type" : "integer", "operation" : "histo"},
522  { "name" : "Path-Rejected", "type" : "integer", "operation" : "histo"},
523  { "name" : "Path-Errors", "type" : "integer", "operation" : "histo"},
524  { "name" : "Dataset-Accepted", "type" : "integer", "operation" : "histo"}
525  ]
526 }
527 )""";
528  file.close();
529 }

Member Data Documentation

◆ datasetPathNamePrefix_

constexpr const char* HLTriggerJSONMonitoring::datasetPathNamePrefix_ = "Dataset_"
staticprivate

Definition at line 138 of file HLTriggerJSONMonitoring.cc.

Referenced by globalBeginRun().

◆ streamName_

constexpr const char* HLTriggerJSONMonitoring::streamName_ = "streamHLTRates"
staticprivate

Definition at line 136 of file HLTriggerJSONMonitoring.cc.

Referenced by globalBeginRun().

◆ triggerResults_

const edm::InputTag HLTriggerJSONMonitoring::triggerResults_
private

Definition at line 144 of file HLTriggerJSONMonitoring.cc.

Referenced by analyze(), and globalBeginRun().

◆ triggerResultsToken_

const edm::EDGetTokenT<edm::TriggerResults> HLTriggerJSONMonitoring::triggerResultsToken_
private

Definition at line 145 of file HLTriggerJSONMonitoring.cc.

Referenced by analyze().