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 83 of file HLTriggerJSONMonitoring.cc.

Constructor & Destructor Documentation

◆ HLTriggerJSONMonitoring()

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

Definition at line 151 of file HLTriggerJSONMonitoring.cc.

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

152  : triggerResults_(config.getParameter<edm::InputTag>("triggerResults")),
154  if (edm::Service<evf::EvFDaqDirector>().isAvailable()) {
155  //output initemp file. This lets hltd know number of streams early
156  std::string initFileName = edm::Service<evf::EvFDaqDirector>()->getInitTempFilePath("streamHLTRates");
157  std::ofstream file(initFileName);
158  if (!file)
159  throw cms::Exception("HLTriggerJsonMonitoring")
160  << "Cannot create INITEMP file: " << initFileName << " error: " << strerror(errno);
161  file.close();
162  }
163 }
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 277 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_.

277  {
278  auto& stream = *streamCache(sid);
279  auto const& rundata = *runCache(event.getRun().index());
280 
281  ++stream.processed;
282 
283  // check that the HLTConfigProvider for the current run has been successfully initialised
284  if (not rundata.hltConfig.inited())
285  return;
286 
287  // get hold of TriggerResults
289  if (not event.getByToken(triggerResultsToken_, handle) or not handle.isValid()) {
290  edm::LogError("HLTriggerJSONMonitoring")
291  << "TriggerResults with label [" + triggerResults_.encode() + "] not present or invalid";
292  return;
293  }
295  assert(results.size() == rundata.hltConfig.triggerNames().size());
296 
297  // check the results for each HLT path
298  for (auto idx = 0u; idx < rundata.indicesOfTriggerPaths.size(); ++idx) {
299  auto const triggerPathIdx = rundata.indicesOfTriggerPaths[idx];
300  auto const& status = results[triggerPathIdx];
301  if (status.wasrun()) {
302  ++stream.hltWasRun[idx];
303  if (status.accept()) {
304  ++stream.hltPrePS[idx];
305  ++stream.hltPostPS[idx];
306  ++stream.hltAccept[idx];
307  } else {
308  int const index = (int)status.index();
309  if (index >= rundata.posPre[idx])
310  ++stream.hltPrePS[idx];
311  if (index > rundata.posPre[idx])
312  ++stream.hltPostPS[idx];
313  if (status.error())
314  ++stream.hltErrors[idx];
315  else
316  ++stream.hltReject[idx];
317  }
318  }
319  }
320 
321  // check the decision for each dataset
322  // FIXME this ignores the prescales, "smart" prescales, and event selection applied in the OutputModule itself
323  for (auto i = 0u; i < rundata.datasets.size(); ++i)
324  if (std::any_of(rundata.datasets[i].begin(), rundata.datasets[i].end(), [&](unsigned int path) {
325  return results.accept(path);
326  }))
327  ++stream.datasets[i];
328 }
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 173 of file HLTriggerJSONMonitoring.cc.

173  {
174  return std::make_unique<HLTriggerJSONMonitoringData::stream>();
175 }

◆ fillDescriptions()

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

Definition at line 166 of file HLTriggerJSONMonitoring.cc.

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

166  {
168  desc.add<edm::InputTag>("triggerResults", edm::InputTag("TriggerResults", "", "@currentProcess"));
169  descriptions.add("HLTriggerJSONMonitoring", desc);
170 }
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 331 of file HLTriggerJSONMonitoring.cc.

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

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

◆ globalBeginRun()

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

Definition at line 178 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().

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

References cms::Adler32(), jsoncollector::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.

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

274 {}

◆ streamBeginLuminosityBlock()

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

Definition at line 374 of file HLTriggerJSONMonitoring.cc.

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

376  {
377  auto& stream = *streamCache(sid);
378 
379  unsigned int triggers = 0;
380  unsigned int datasets = 0;
381  auto const& rundata = *runCache(lumi.getRun().index());
382  if (rundata.hltConfig.inited()) {
383  triggers = rundata.indicesOfTriggerPaths.size();
384  datasets = rundata.hltConfig.datasetNames().size();
385  };
386 
387  // reset the stream counters
388  stream.processed = 0;
389  stream.hltWasRun.assign(triggers, 0);
390  stream.hltPrePS.assign(triggers, 0);
391  stream.hltPostPS.assign(triggers, 0);
392  stream.hltAccept.assign(triggers, 0);
393  stream.hltReject.assign(triggers, 0);
394  stream.hltErrors.assign(triggers, 0);
395  stream.datasets.assign(datasets, 0);
396 }
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 399 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().

402  {
403  auto const& stream = *streamCache(sid);
404  auto const& rundata = *runCache(lumi.getRun().index());
405  lumidata->processed.value()[0] += stream.processed;
406 
407  // check that the HLTConfigProvider for the current run has been successfully initialised
408  if (not rundata.hltConfig.inited())
409  return;
410 
411  auto const triggers = rundata.indicesOfTriggerPaths.size();
412  for (auto i = 0u; i < triggers; ++i) {
413  lumidata->hltWasRun.value()[i] += stream.hltWasRun[i];
414  lumidata->hltPrePS.value()[i] += stream.hltPrePS[i];
415  lumidata->hltPostPS.value()[i] += stream.hltPostPS[i];
416  lumidata->hltAccept.value()[i] += stream.hltAccept[i];
417  lumidata->hltReject.value()[i] += stream.hltReject[i];
418  lumidata->hltErrors.value()[i] += stream.hltErrors[i];
419  }
420  auto const datasets = rundata.hltConfig.datasetNames().size();
421  for (auto i = 0u; i < datasets; ++i)
422  lumidata->datasets.value()[i] += stream.datasets[i];
423 }
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 533 of file HLTriggerJSONMonitoring.cc.

References jsoncollector::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().

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

◆ writeJsdFile()

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

Definition at line 515 of file HLTriggerJSONMonitoring.cc.

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

Referenced by globalBeginRun().

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

Member Data Documentation

◆ datasetPathNamePrefix_

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

Definition at line 140 of file HLTriggerJSONMonitoring.cc.

Referenced by globalBeginRun().

◆ streamName_

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

Definition at line 138 of file HLTriggerJSONMonitoring.cc.

Referenced by globalBeginRun().

◆ triggerResults_

const edm::InputTag HLTriggerJSONMonitoring::triggerResults_
private

Definition at line 146 of file HLTriggerJSONMonitoring.cc.

Referenced by analyze(), and globalBeginRun().

◆ triggerResultsToken_

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

Definition at line 147 of file HLTriggerJSONMonitoring.cc.

Referenced by analyze().