CMS 3D CMS Logo

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

Public Member Functions

void analyze (edm::StreamID, edm::Event const &, edm::EventSetup const &) const override
 
std::unique_ptr< L1TriggerJSONMonitoringData::streambeginStream (edm::StreamID) const override
 
std::shared_ptr< L1TriggerJSONMonitoringData::lumisectionglobalBeginLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &) const override
 
std::shared_ptr< L1TriggerJSONMonitoringData::runglobalBeginRun (edm::Run const &, edm::EventSetup const &) const override
 
void globalEndLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &, L1TriggerJSONMonitoringData::lumisection *) const override
 
void globalEndRun (edm::Run const &, edm::EventSetup const &) const override
 
 L1TriggerJSONMonitoring (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 &, L1TriggerJSONMonitoringData::lumisection *) const override
 
 ~L1TriggerJSONMonitoring () override=default
 
- Public Member Functions inherited from edm::global::EDAnalyzer< edm::StreamCache< L1TriggerJSONMonitoringData::stream >, edm::RunCache< L1TriggerJSONMonitoringData::run >, edm::LuminosityBlockSummaryCache< L1TriggerJSONMonitoringData::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 (L1TriggerJSONMonitoringData::run const &, unsigned int, std::vector< std::string > const &)
 
static void writeJsdFile (L1TriggerJSONMonitoringData::run const &)
 

Private Attributes

const edm::ESGetToken< L1TUtmTriggerMenu, L1TUtmTriggerMenuRcdl1tUtmTriggerMenuRcdToken_
 
const edm::InputTag level1Results_
 
const edm::EDGetTokenT< GlobalAlgBlkBxCollectionlevel1ResultsToken_
 

Static Private Attributes

static constexpr const char * streamName_ = "streamL1Rates"
 
static constexpr const std::array< const char *, 16 > tcdsTriggerTypes_
 

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 TCDS and L1T monitoring information.

Definition at line 70 of file L1TriggerJSONMonitoring.cc.

Constructor & Destructor Documentation

◆ L1TriggerJSONMonitoring()

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

Definition at line 161 of file L1TriggerJSONMonitoring.cc.

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

162  : level1Results_(config.getParameter<edm::InputTag>("L1Results")),
163  level1ResultsToken_(consumes<GlobalAlgBlkBxCollection>(level1Results_)),
164  l1tUtmTriggerMenuRcdToken_(esConsumes<edm::Transition::BeginRun>()) {
165  if (edm::Service<evf::EvFDaqDirector>().isAvailable()) {
166  //output initemp file. This lets hltd know number of streams early
167  std::string initFileName = edm::Service<evf::EvFDaqDirector>()->getInitTempFilePath("streamL1Rates");
168  std::ofstream file(initFileName);
169  if (!file)
170  throw cms::Exception("L1TriggerJsonMonitoring")
171  << "Cannot create INITEMP file: " << initFileName << " error: " << strerror(errno);
172  file.close();
173  }
174 }
const edm::InputTag level1Results_
Definition: config.py:1
const edm::ESGetToken< L1TUtmTriggerMenu, L1TUtmTriggerMenuRcd > l1tUtmTriggerMenuRcdToken_
const edm::EDGetTokenT< GlobalAlgBlkBxCollection > level1ResultsToken_

◆ ~L1TriggerJSONMonitoring()

L1TriggerJSONMonitoring::~L1TriggerJSONMonitoring ( )
overridedefault

Member Function Documentation

◆ analyze()

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

Implements edm::global::EDAnalyzerBase.

Definition at line 231 of file L1TriggerJSONMonitoring.cc.

References cms::cuda::assert(), edm::EventAuxiliary::CalibrationTrigger, edm::InputTag::encode(), QIE11Task_cfi::eventType, patZpeak::handle, mps_fire::i, L1TriggerJSONMonitoringData::kPrescaleConflict, L1TriggerJSONMonitoringData::kPrescaleUndefined, level1Results_, level1ResultsToken_, GlobalAlgBlk::maxPhysicsTriggers, or, edm::EventAuxiliary::PhysicsTrigger, edm::EventAuxiliary::RandomTrigger, mysort::results, cms::cuda::stream, and tcdsTriggerTypes_.

231  {
232  auto& stream = *streamCache(sid);
233 
234  ++stream.processed;
235  unsigned int eventType = event.experimentType();
236  if (eventType < tcdsTriggerTypes_.size())
237  ++stream.tcdsAccept[eventType];
238  else
239  edm::LogWarning("L1TriggerJSONMonitoring") << "Unexpected event type " << eventType;
240 
241  // get hold of TriggerResults
243  if (not event.getByToken(level1ResultsToken_, handle) or not handle.isValid() or handle->isEmpty(0)) {
244  edm::LogError("L1TriggerJSONMonitoring")
245  << "L1 trigger results with label [" + level1Results_.encode() + "] not present or invalid";
246  return;
247  }
248 
249  // The GlobalAlgBlkBxCollection is a vector of vectors, but the second layer can only ever
250  // have one entry since there can't be more than one collection per bunch crossing.
251  // The first "0" here means BX = 0, while the second "0" is used to access the first and only element.
252  auto const& results = handle->at(0, 0);
253  auto const& decision = results.getAlgoDecisionFinal();
254  assert(decision.size() == GlobalAlgBlk::maxPhysicsTriggers);
255 
256  // check the results for each HLT path
257  for (unsigned int i = 0; i < decision.size(); ++i) {
258  if (decision[i]) {
259  ++stream.l1tAccept[i];
260  switch (eventType) {
262  ++stream.l1tAcceptPhysics[i];
263  break;
265  ++stream.l1tAcceptCalibration[i];
266  break;
268  ++stream.l1tAcceptRandom[i];
269  break;
270  default:
271  break;
272  }
273  }
274  }
275 
276  // check for conflicting values in the prescale column index, and store it
277  int prescaleIndex = results.getPreScColumn();
279  stream.prescaleIndex = prescaleIndex;
280  } else if (stream.prescaleIndex == L1TriggerJSONMonitoringData::kPrescaleConflict) {
281  // do nothing
282  } else if (stream.prescaleIndex != prescaleIndex) {
283  edm::LogWarning("L1TriggerJSONMonitoring") << "Prescale index changed from " << stream.prescaleIndex << " to "
284  << prescaleIndex << " inside lumisection " << event.luminosityBlock();
286  }
287 }
static constexpr const int kPrescaleConflict
const edm::InputTag level1Results_
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)
static constexpr const int kPrescaleUndefined
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
static constexpr const std::array< const char *, 16 > tcdsTriggerTypes_
results
Definition: mysort.py:8
static constexpr unsigned int maxPhysicsTriggers
Definition: GlobalAlgBlk.h:52
Log< level::Warning, false > LogWarning
const edm::EDGetTokenT< GlobalAlgBlkBxCollection > level1ResultsToken_
Definition: event.py:1

◆ beginStream()

std::unique_ptr< L1TriggerJSONMonitoringData::stream > L1TriggerJSONMonitoring::beginStream ( edm::StreamID  ) const
override

Definition at line 184 of file L1TriggerJSONMonitoring.cc.

184  {
185  return std::make_unique<L1TriggerJSONMonitoringData::stream>();
186 }

◆ fillDescriptions()

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

Definition at line 177 of file L1TriggerJSONMonitoring.cc.

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

177  {
179  desc.add<edm::InputTag>("L1Results", edm::InputTag("hltGtStage2Digis"));
180  descriptions.add("L1TriggerJSONMonitoring", desc);
181 }
void add(std::string const &label, ParameterSetDescription const &psetDescription)

◆ globalBeginLuminosityBlockSummary()

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

Definition at line 290 of file L1TriggerJSONMonitoring.cc.

References mps_fire::i, L1TriggerJSONMonitoringData::kPrescaleUndefined, GlobalAlgBlk::maxPhysicsTriggers, and tcdsTriggerTypes_.

291  {
292  // the API of jsoncollector::HistoJ does not really match our use case,
293  // but it is the only vector-like object available in JsonMonitorable.h
294  auto lumidata = std::make_shared<L1TriggerJSONMonitoringData::lumisection>(L1TriggerJSONMonitoringData::lumisection{
295  jsoncollector::HistoJ<unsigned int>(1), // processed
301  });
302  // repeated calls to `update` necessary to set the internal element counter
303  lumidata->processed.update(0);
304  for (unsigned int i = 0; i < GlobalAlgBlk::maxPhysicsTriggers; ++i)
305  lumidata->l1tAccept.update(0);
306  for (unsigned int i = 0; i < GlobalAlgBlk::maxPhysicsTriggers; ++i)
307  lumidata->l1tAcceptPhysics.update(0);
308  for (unsigned int i = 0; i < GlobalAlgBlk::maxPhysicsTriggers; ++i)
309  lumidata->l1tAcceptCalibration.update(0);
310  for (unsigned int i = 0; i < GlobalAlgBlk::maxPhysicsTriggers; ++i)
311  lumidata->l1tAcceptRandom.update(0);
312  for (unsigned int i = 0; i < tcdsTriggerTypes_.size(); ++i)
313  lumidata->tcdsAccept.update(0);
314  lumidata->prescaleIndex = L1TriggerJSONMonitoringData::kPrescaleUndefined;
315 
316  return lumidata;
317 }
static constexpr const int kPrescaleUndefined
static constexpr const std::array< const char *, 16 > tcdsTriggerTypes_
static constexpr unsigned int maxPhysicsTriggers
Definition: GlobalAlgBlk.h:52

◆ globalBeginRun()

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

Definition at line 189 of file L1TriggerJSONMonitoring.cc.

References edm::Service< T >::isAvailable(), l1tUtmTriggerMenuRcdToken_, GlobalAlgBlk::maxPhysicsTriggers, evf::MergeTypeJSNDATA, writedatasetfile::run, alignCSCRings::s, singleTopDQM_cfi::setup, streamName_, L1TEGammaOffline_cfi::triggerNames, writeIniFile(), and writeJsdFile().

190  {
191  auto rundata = std::make_shared<L1TriggerJSONMonitoringData::run>();
192 
193  // set the DAQ parameters
195  rundata->streamDestination = edm::Service<evf::EvFDaqDirector>()->getStreamDestinations(streamName_);
196  rundata->streamMergeType =
198  rundata->baseRunDir = edm::Service<evf::EvFDaqDirector>()->baseRunDir();
199  } else {
200  rundata->streamDestination = "";
201  rundata->streamMergeType = "";
202  rundata->baseRunDir = ".";
203  }
204 
205  // read the L1 trigger names from the EventSetup
206  std::vector<std::string> triggerNames(GlobalAlgBlk::maxPhysicsTriggers, ""s);
207  auto const& menuHandle = setup.getHandle(l1tUtmTriggerMenuRcdToken_);
208  if (menuHandle.isValid()) {
209  for (auto const& algo : menuHandle->getAlgorithmMap())
210  triggerNames[algo.second.getIndex()] = algo.first;
211  } else {
212  edm::LogWarning("L1TriggerJSONMonitoring") << "L1TUtmTriggerMenu not found in the EventSetup.\nThe Level 1 Trigger "
213  "rate monitoring will not include the trigger names.";
214  }
215 
216  // write the per-run .jsd file
217  rundata->jsdFileName = fmt::sprintf("run%06d_ls0000_streamL1Rates_pid%05d.jsd", run.run(), getpid());
218  writeJsdFile(*rundata);
219 
220  // write the per-run .ini file
221  //iniFileName = fmt::sprintf("run%06d_ls0000_streamL1Rates_pid%05d.ini", run.run(), getpid());
222  writeIniFile(*rundata, run.run(), triggerNames);
223 
224  return rundata;
225 }
static void writeJsdFile(L1TriggerJSONMonitoringData::run const &)
static void writeIniFile(L1TriggerJSONMonitoringData::run const &, unsigned int, std::vector< std::string > const &)
const edm::ESGetToken< L1TUtmTriggerMenu, L1TUtmTriggerMenuRcd > l1tUtmTriggerMenuRcdToken_
static constexpr unsigned int maxPhysicsTriggers
Definition: GlobalAlgBlk.h:52
bool isAvailable() const
Definition: Service.h:40
Log< level::Warning, false > LogWarning
static constexpr const char * streamName_

◆ globalEndLuminosityBlockSummary()

void L1TriggerJSONMonitoring::globalEndLuminosityBlockSummary ( edm::LuminosityBlock const &  lumi,
edm::EventSetup const &  ,
L1TriggerJSONMonitoringData::lumisection lumidata 
) const
override

Definition at line 360 of file L1TriggerJSONMonitoring.cc.

References cms::Adler32(), Json::Value::append(), edm::EventAuxiliary::CalibrationTrigger, jsoncollector::DataPoint::DATA, jsoncollector::DataPoint::DEFINITION, L1TriggerJSONMonitoringData::lumisection::l1tAccept, L1TriggerJSONMonitoringData::lumisection::l1tAcceptCalibration, L1TriggerJSONMonitoringData::lumisection::l1tAcceptPhysics, L1TriggerJSONMonitoringData::lumisection::l1tAcceptRandom, eostools::ls(), edm::EventAuxiliary::PhysicsTrigger, L1TriggerJSONMonitoringData::lumisection::prescaleIndex, L1TriggerJSONMonitoringData::lumisection::processed, edm::EventAuxiliary::RandomTrigger, mps_fire::result, writedatasetfile::run, evf::FastMonitoringService::shouldWriteFiles(), jsoncollector::DataPoint::SOURCE, AlCaHLTBitMon_QueryRunRegistry::string, L1TriggerJSONMonitoringData::lumisection::tcdsAccept, jsoncollector::HistoJ< T >::toJsonValue(), jsoncollector::HistoJ< T >::update(), jsoncollector::HistoJ< T >::value(), and convertToRaw::writer.

362  {
363  unsigned int ls = lumi.luminosityBlock();
364  unsigned int run = lumi.run();
365 
366  bool writeFiles = true;
367  if (edm::Service<evf::MicroStateService>().isAvailable()) {
370  if (fms)
371  writeFiles = fms->shouldWriteFiles(ls);
372  }
373  if (not writeFiles)
374  return;
375 
376  unsigned int processed = lumidata->processed.value().at(0);
377  auto const& rundata = *runCache(lumi.getRun().index());
379 
380  // [SIC]
381  char hostname[33];
382  gethostname(hostname, 32);
383  std::string sourceHost(hostname);
384 
385  // [SIC]
386  std::stringstream sOutDef;
387  sOutDef << rundata.baseRunDir << "/"
388  << "output_" << getpid() << ".jsd";
389 
390  std::string jsndataFileList = "";
391  unsigned int jsndataSize = 0;
392  unsigned int jsndataAdler32 = 1; // adler32 checksum for an empty file
393 
394  if (processed) {
395  // write the .jsndata files which contain the actual rates
396  Json::Value jsndata;
397  jsndata[jsoncollector::DataPoint::SOURCE] = sourceHost;
398  jsndata[jsoncollector::DataPoint::DEFINITION] = rundata.jsdFileName;
404 
405  // write only the number of "physics", "calibration" and "random" events
410  jsndata[jsoncollector::DataPoint::DATA].append(tcdsAccept.toJsonValue());
411  /* FIXME send information for all event types instead of only these three
412  jsndata[jsoncollector::DataPoint::DATA].append(lumidata->tcdsAccept.toJsonValue());
413  */
415 
416  auto jsndataFileName = fmt::sprintf("run%06d_ls%04d_streamL1Rates_pid%05d.jsndata", run, ls, getpid());
417 
418  std::string result = writer.write(jsndata);
419  std::ofstream jsndataFile(rundata.baseRunDir + "/" + jsndataFileName);
420  jsndataFile << result;
421  jsndataFile.close();
422 
423  jsndataFileList = jsndataFileName;
424  jsndataSize = result.size();
425  jsndataAdler32 = cms::Adler32(result.c_str(), result.size());
426  }
427 
428  // create a metadata json file for the "HLT rates" pseudo-stream
429  unsigned int jsnProcessed = processed;
430  unsigned int jsnAccepted = processed;
431  unsigned int jsnErrorEvents = 0;
432  unsigned int jsnRetCodeMask = 0;
433  std::string jsnInputFiles = "";
434  unsigned int jsnHLTErrorEvents = 0;
435 
436  Json::Value jsn;
437  jsn[jsoncollector::DataPoint::SOURCE] = sourceHost;
438  jsn[jsoncollector::DataPoint::DEFINITION] = sOutDef.str();
439  jsn[jsoncollector::DataPoint::DATA].append(jsnProcessed);
440  jsn[jsoncollector::DataPoint::DATA].append(jsnAccepted);
441  jsn[jsoncollector::DataPoint::DATA].append(jsnErrorEvents);
442  jsn[jsoncollector::DataPoint::DATA].append(jsnRetCodeMask);
443  jsn[jsoncollector::DataPoint::DATA].append(jsndataFileList);
444  jsn[jsoncollector::DataPoint::DATA].append(jsndataSize);
445  jsn[jsoncollector::DataPoint::DATA].append(jsnInputFiles);
446  jsn[jsoncollector::DataPoint::DATA].append(jsndataAdler32);
447  jsn[jsoncollector::DataPoint::DATA].append(rundata.streamDestination);
448  jsn[jsoncollector::DataPoint::DATA].append(rundata.streamMergeType);
449  jsn[jsoncollector::DataPoint::DATA].append(jsnHLTErrorEvents);
450 
451  auto jsnFileName = fmt::sprintf("run%06d_ls%04d_streamL1Rates_pid%05d.jsn", run, ls, getpid());
452  std::ofstream jsnFile(rundata.baseRunDir + "/" + jsnFileName);
453  jsnFile << writer.write(jsn);
454  jsnFile.close();
455 }
jsoncollector::HistoJ< unsigned int > l1tAcceptRandom
jsoncollector::HistoJ< unsigned int > l1tAccept
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 > l1tAcceptCalibration
jsoncollector::HistoJ< unsigned int > processed
Represents a JSON value.
Definition: value.h:99
std::vector< T > & value()
static const std::string DATA
Definition: DataPoint.h:118
jsoncollector::HistoJ< unsigned int > tcdsAccept
jsoncollector::HistoJ< unsigned int > l1tAcceptPhysics
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
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

◆ globalEndRun()

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

Definition at line 228 of file L1TriggerJSONMonitoring.cc.

228 {}

◆ streamBeginLuminosityBlock()

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

Definition at line 320 of file L1TriggerJSONMonitoring.cc.

References L1TriggerJSONMonitoringData::kPrescaleUndefined, GlobalAlgBlk::maxPhysicsTriggers, cms::cuda::stream, and tcdsTriggerTypes_.

322  {
323  auto& stream = *streamCache(sid);
324 
325  // reset the stream counters
326  stream.processed = 0;
327  stream.l1tAccept.assign(GlobalAlgBlk::maxPhysicsTriggers, 0);
328  stream.l1tAcceptPhysics.assign(GlobalAlgBlk::maxPhysicsTriggers, 0);
329  stream.l1tAcceptCalibration.assign(GlobalAlgBlk::maxPhysicsTriggers, 0);
330  stream.l1tAcceptRandom.assign(GlobalAlgBlk::maxPhysicsTriggers, 0);
331  stream.tcdsAccept.assign(tcdsTriggerTypes_.size(), 0);
333 }
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t stream
static constexpr const int kPrescaleUndefined
static constexpr const std::array< const char *, 16 > tcdsTriggerTypes_
static constexpr unsigned int maxPhysicsTriggers
Definition: GlobalAlgBlk.h:52

◆ streamEndLuminosityBlockSummary()

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

Definition at line 336 of file L1TriggerJSONMonitoring.cc.

References mps_fire::i, L1TriggerJSONMonitoringData::kPrescaleConflict, L1TriggerJSONMonitoringData::kPrescaleUndefined, L1TriggerJSONMonitoringData::lumisection::l1tAccept, L1TriggerJSONMonitoringData::lumisection::l1tAcceptCalibration, L1TriggerJSONMonitoringData::lumisection::l1tAcceptPhysics, L1TriggerJSONMonitoringData::lumisection::l1tAcceptRandom, GlobalAlgBlk::maxPhysicsTriggers, L1TriggerJSONMonitoringData::lumisection::prescaleIndex, L1TriggerJSONMonitoringData::lumisection::processed, cms::cuda::stream, L1TriggerJSONMonitoringData::lumisection::tcdsAccept, tcdsTriggerTypes_, and jsoncollector::HistoJ< T >::value().

339  {
340  auto const& stream = *streamCache(sid);
341  lumidata->processed.value()[0] += stream.processed;
342 
343  for (unsigned int i = 0; i < GlobalAlgBlk::maxPhysicsTriggers; ++i) {
344  lumidata->l1tAccept.value()[i] += stream.l1tAccept[i];
345  lumidata->l1tAcceptPhysics.value()[i] += stream.l1tAcceptPhysics[i];
346  lumidata->l1tAcceptCalibration.value()[i] += stream.l1tAcceptCalibration[i];
347  lumidata->l1tAcceptRandom.value()[i] += stream.l1tAcceptRandom[i];
348  }
349  for (unsigned int i = 0; i < tcdsTriggerTypes_.size(); ++i)
350  lumidata->tcdsAccept.value()[i] += stream.tcdsAccept[i];
351 
352  // check for conflicting values in the prescale column index
354  lumidata->prescaleIndex = stream.prescaleIndex;
355  else if (lumidata->prescaleIndex != stream.prescaleIndex)
357 }
jsoncollector::HistoJ< unsigned int > l1tAcceptRandom
static constexpr const int kPrescaleConflict
jsoncollector::HistoJ< unsigned int > l1tAccept
jsoncollector::HistoJ< unsigned int > l1tAcceptCalibration
jsoncollector::HistoJ< unsigned int > processed
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t stream
std::vector< T > & value()
jsoncollector::HistoJ< unsigned int > tcdsAccept
static constexpr const int kPrescaleUndefined
jsoncollector::HistoJ< unsigned int > l1tAcceptPhysics
static constexpr const std::array< const char *, 16 > tcdsTriggerTypes_
static constexpr unsigned int maxPhysicsTriggers
Definition: GlobalAlgBlk.h:52

◆ writeIniFile()

void L1TriggerJSONMonitoring::writeIniFile ( L1TriggerJSONMonitoringData::run const &  rundata,
unsigned int  run,
std::vector< std::string > const &  l1TriggerNames 
)
staticprivate

Definition at line 473 of file L1TriggerJSONMonitoring.cc.

References Json::arrayValue, L1TriggerJSONMonitoringData::run::baseRunDir, edm::EventAuxiliary::CalibrationTrigger, Skims_PA_cff::content, RawDataTask_cfi::eventTypes, geometryDiff::file, Skims_PA_cff::name, edm::EventAuxiliary::PhysicsTrigger, edm::EventAuxiliary::RandomTrigger, writedatasetfile::run, AlCaHLTBitMon_QueryRunRegistry::string, tcdsTriggerTypes_, L1TEGammaOffline_cfi::triggerNames, and convertToRaw::writer.

Referenced by globalBeginRun().

475  {
477 
479  for (auto const& name : l1TriggerNames)
480  triggerNames.append(name);
481  content["L1-Algo-Names"] = triggerNames;
482 
487  /* FIXME send information for all event types instead of only these three
488  for (auto const& name : tcdsTriggerTypes_)
489  eventTypes.append(name);
490  */
491  content["Event-Type"] = eventTypes;
492 
493  std::string iniFileName = fmt::sprintf("run%06d_ls0000_streamL1Rates_pid%05d.ini", run, getpid());
494  std::ofstream file(rundata.baseRunDir + "/" + iniFileName);
496  file << writer.write(content);
497  file.close();
498 }
Represents a JSON value.
Definition: value.h:99
static constexpr const std::array< const char *, 16 > tcdsTriggerTypes_
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 L1TriggerJSONMonitoring::writeJsdFile ( L1TriggerJSONMonitoringData::run const &  rundata)
staticprivate

Definition at line 457 of file L1TriggerJSONMonitoring.cc.

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

Referenced by globalBeginRun().

457  {
458  std::ofstream file(rundata.baseRunDir + "/" + rundata.jsdFileName);
459  file << R"""({
460  "data" : [
461  { "name" : "Processed", "type" : "integer", "operation" : "histo"},
462  { "name" : "L1-AlgoAccepted", "type" : "integer", "operation" : "histo"},
463  { "name" : "L1-AlgoAccepted-Physics", "type" : "integer", "operation" : "histo"},
464  { "name" : "L1-AlgoAccepted-Calibration", "type" : "integer", "operation" : "histo"},
465  { "name" : "L1-AlgoAccepted-Random", "type" : "integer", "operation" : "histo"},
466  { "name" : "L1-Global", "type" : "integer", "operation" : "histo"},
467  { "name" : "Prescale-Index", "type" : "integer", "operation" : "sample"}
468  ]
469 })""";
470  file.close();
471 }

Member Data Documentation

◆ l1tUtmTriggerMenuRcdToken_

const edm::ESGetToken<L1TUtmTriggerMenu, L1TUtmTriggerMenuRcd> L1TriggerJSONMonitoring::l1tUtmTriggerMenuRcdToken_
private

Definition at line 154 of file L1TriggerJSONMonitoring.cc.

Referenced by globalBeginRun().

◆ level1Results_

const edm::InputTag L1TriggerJSONMonitoring::level1Results_
private

Definition at line 152 of file L1TriggerJSONMonitoring.cc.

Referenced by analyze().

◆ level1ResultsToken_

const edm::EDGetTokenT<GlobalAlgBlkBxCollection> L1TriggerJSONMonitoring::level1ResultsToken_
private

Definition at line 153 of file L1TriggerJSONMonitoring.cc.

Referenced by analyze().

◆ streamName_

constexpr const char* L1TriggerJSONMonitoring::streamName_ = "streamL1Rates"
staticprivate

Definition at line 146 of file L1TriggerJSONMonitoring.cc.

Referenced by globalBeginRun().

◆ tcdsTriggerTypes_

constexpr const std::array< const char *, 16 > L1TriggerJSONMonitoring::tcdsTriggerTypes_
staticprivate
Initial value:
= {{
"Error",
"Physics",
"Calibration",
"Random",
"Auxiliary",
"",
"",
"",
"Cyclic",
"Bunch-pattern",
"Software",
"TTS",
"",
"",
"",
""
}}

Definition at line 127 of file L1TriggerJSONMonitoring.cc.

Referenced by analyze(), globalBeginLuminosityBlockSummary(), streamBeginLuminosityBlock(), streamEndLuminosityBlockSummary(), and writeIniFile().