CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
ThroughputServiceClient Class Reference
Inheritance diagram for ThroughputServiceClient:
DQMEDHarvester edm::one::EDProducer< edm::Accumulator, edm::EndLuminosityBlockProducer, edm::EndRunProducer, edm::one::WatchLuminosityBlocks, edm::one::WatchRuns, edm::one::SharedResources > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 ThroughputServiceClient (edm::ParameterSet const &)
 
 ~ThroughputServiceClient () override=default
 
- Public Member Functions inherited from DQMEDHarvester
void accumulate (edm::Event const &ev, edm::EventSetup const &es) final
 
void beginLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) final
 
void beginRun (edm::Run const &, edm::EventSetup const &) override
 
 DQMEDHarvester ()
 
void endJob () final
 
void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) final
 
void endLuminosityBlockProduce (edm::LuminosityBlock &, edm::EventSetup const &) final
 
void endRun (edm::Run const &, edm::EventSetup const &) override
 
void endRunProduce (edm::Run &run, edm::EventSetup const &setup) override
 
 ~DQMEDHarvester () override=default
 
- Public Member Functions inherited from edm::one::EDProducer< edm::Accumulator, edm::EndLuminosityBlockProducer, edm::EndRunProducer, edm::one::WatchLuminosityBlocks, edm::one::WatchRuns, edm::one::SharedResources >
 EDProducer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) 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
 
ESProxyIndex const * esGetTokenIndices (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::vector< ModuleDescription const * > &modules, 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
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

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

Private Member Functions

void dqmEndJob (DQMStore::IBooker &booker, DQMStore::IGetter &getter) override
 
void dqmEndLuminosityBlock (DQMStore::IBooker &booker, DQMStore::IGetter &getter, edm::LuminosityBlock const &, edm::EventSetup const &) override
 
void fillSummaryPlots (DQMStore::IBooker &booker, DQMStore::IGetter &getter)
 

Private Attributes

const bool m_dqm_merge
 
const std::string m_dqm_path
 

Additional Inherited Members

- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- 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)
 
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 ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
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<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)
 
- Protected Attributes inherited from DQMEDHarvester
edm::EDPutTokenT< DQMTokenlumiToken_
 
edm::EDPutTokenT< DQMTokenrunToken_
 

Detailed Description

Definition at line 26 of file ThroughputServiceClient.cc.

Constructor & Destructor Documentation

ThroughputServiceClient::ThroughputServiceClient ( edm::ParameterSet const &  config)
explicit

Definition at line 45 of file ThroughputServiceClient.cc.

45  :
46  m_dqm_path(config.getUntrackedParameter<std::string>("dqmPath")),
47  m_dqm_merge(config.getUntrackedParameter<bool>("createSummary"))
48 {
49 }
Definition: config.py:1
ThroughputServiceClient::~ThroughputServiceClient ( )
overridedefault

Member Function Documentation

void ThroughputServiceClient::dqmEndJob ( DQMStore::IBooker booker,
DQMStore::IGetter getter 
)
overrideprivatevirtual

Implements DQMEDHarvester.

Definition at line 52 of file ThroughputServiceClient.cc.

References fillSummaryPlots().

53 {
54  fillSummaryPlots(booker, getter);
55 }
void fillSummaryPlots(DQMStore::IBooker &booker, DQMStore::IGetter &getter)
void ThroughputServiceClient::dqmEndLuminosityBlock ( DQMStore::IBooker booker,
DQMStore::IGetter getter,
edm::LuminosityBlock const &  ,
edm::EventSetup const &   
)
overrideprivatevirtual

Reimplemented from DQMEDHarvester.

Definition at line 58 of file ThroughputServiceClient.cc.

References fillSummaryPlots().

59 {
60  fillSummaryPlots(booker, getter);
61 }
void fillSummaryPlots(DQMStore::IBooker &booker, DQMStore::IGetter &getter)
void ThroughputServiceClient::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 159 of file ThroughputServiceClient.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::addUntracked(), DEFINE_FWK_MODULE, and AlCaHLTBitMon_QueryRunRegistry::string.

159  {
161  desc.addUntracked<std::string>("dqmPath", "HLT/Throughput");
162  desc.addUntracked<bool>("createSummary", true);
163  descriptions.add("throughputServiceClient", desc);
164 }
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void ThroughputServiceClient::fillSummaryPlots ( DQMStore::IBooker booker,
DQMStore::IGetter getter 
)
private

Definition at line 64 of file ThroughputServiceClient.cc.

References DQMStore::IBooker::book1D(), plotBeamSpotDB::first, printsummarytable::folder, folders, DQMStore::IGetter::get(), DQMStore::IGetter::getSubdirs(), MonitorElement::getTH1F(), mps_fire::i, plotBeamSpotDB::last, m_dqm_merge, m_dqm_path, SiStripPI::max, min(), eostools::move(), pileupCalc::nbins, DQMStore::IGetter::removeElement(), DQMStore::IBooker::setCurrentFolder(), AlCaHLTBitMon_QueryRunRegistry::string, and ApeEstimator_cff::width.

Referenced by dqmEndJob(), and dqmEndLuminosityBlock().

65 {
66  // find whether the plots are in the main folder, or in per-number-of-processess subfolders
67  std::vector<std::string> folders;
68  if (getter.get(m_dqm_path + "/throughput_sourced")) {
69  // the plots are in the main folder
70  folders.push_back(m_dqm_path);
71  } else {
72  static const boost::regex running_n_processes(".*/Running .*");
74  std::vector<std::string> subdirs = getter.getSubdirs();
75  for (auto const & subdir: subdirs) {
76  if (boost::regex_match(subdir, running_n_processes)) {
77  if (getter.get(subdir + "/throughput_sourced"))
78  // the plots are in a per-number-of-processes subfolder
79  folders.push_back(subdir);
80  }
81  }
82  }
83  // create a summary folder if there are more than one
84  if (m_dqm_merge and folders.size() > 1) {
85  std::string summary_folder = m_dqm_path + "/Summary";
86  booker.setCurrentFolder(summary_folder);
87  // drop the summary histograms, if they exist
88  if (getter.get(summary_folder + "/throughput_sourced"))
89  getter.removeElement(summary_folder, "throughput_sourced", true);
90  if (getter.get(summary_folder + "/throughput_retired"))
91  getter.removeElement(summary_folder, "throughput_retired", true);
92  // clone the first set of histograms
93  auto folder = folders.begin();
94  TH1F * sourced = booker.book1D("throughput_sourced", getter.get(*folder + "/throughput_sourced")->getTH1F())->getTH1F();
95  TH1F * retired = booker.book1D("throughput_retired", getter.get(*folder + "/throughput_retired")->getTH1F())->getTH1F();
96  // add the other sets of histograms
97  for (++folder; folder != folders.end(); ++folder) {
98  sourced->Add(getter.get(*folder + "/throughput_sourced")->getTH1F());
99  retired->Add(getter.get(*folder + "/throughput_retired")->getTH1F());
100  }
101  // move the summary folder to the list
102  folders.push_back(std::move(summary_folder));
103  }
104  for (auto const & folder: folders) {
105  TH1F * sourced = getter.get(folder + "/throughput_sourced")->getTH1F();
106  TH1F * retired = getter.get(folder + "/throughput_retired")->getTH1F();
107  booker.setCurrentFolder(folder);
108  unsigned int nbins = sourced->GetXaxis()->GetNbins();
109  double range = sourced->GetXaxis()->GetXmax();
110 
111  // drop .../concurrent, if it exists
112  if (getter.get(folder + "/concurrent"))
113  getter.removeElement(folder, "concurrent", true);
114  // (re)book and fill .../concurrent
115  TH1F* concurrent = booker.book1D("concurrent", "Concurrent events being processed", nbins, 0., range)->getTH1F();
116  double sum = 0;
117  // from bin=0 (underflow) to bin=nbins+1 (overflow)
118  for (unsigned int i = 0; i <= nbins+1; ++i) {
119  sum += sourced->GetBinContent(i) - retired->GetBinContent(i);
120  concurrent->Fill(concurrent->GetXaxis()->GetBinCenter(i), sum);
121  }
122 
123  TH1F* average = nullptr;
124  double avg_min = std::min(sourced->GetMinimum(0.), retired->GetMinimum(0.));
125  double avg_max = std::max(sourced->GetMaximum(), retired->GetMaximum());
126  double width = avg_max - avg_min;
127  avg_min = std::floor(avg_min - width * 0.2);
128  if (avg_min < 0.) avg_min = 0.;
129  avg_max = std::ceil(avg_max + width * 0.2);
130  width = avg_max - avg_min;
131 
132  // drop .../average_sourced, if it exists
133  if (getter.get(folder + "/average_sourced"))
134  getter.removeElement(folder, "average_sourced", true);
135  // define the range for .../average_sourced
136  uint64_t first = sourced->FindFirstBinAbove(0.);
137  uint64_t last = sourced->FindLastBinAbove(0.);
138  booker.setCurrentFolder(folder);
139  // (re)book and fill .../average_sourced
140  average = booker.book1D("average_sourced", "Throughput (sourced events)", (int) width, avg_min, avg_max)->getTH1F();
141  for (unsigned int i = first; i <= last; ++i)
142  average->Fill(sourced->GetBinContent(i));
143 
144  // drop .../average_retired, if it exists
145  if (getter.get(folder + "/average_retired"))
146  getter.removeElement(folder, "average_retired", true);
147  // define the range for .../average_retired
148  first = retired->FindFirstBinAbove(0.);
149  last = retired->FindLastBinAbove(0.);
150  booker.setCurrentFolder(folder);
151  // (re)book and fill .../average_retired
152  average = booker.book1D("average_retired", "Throughput (retired events)", (int) width, avg_min, avg_max)->getTH1F();
153  for (unsigned int i = first; i <= last; ++i)
154  average->Fill(retired->GetBinContent(i));
155  }
156 }
TH1F * getTH1F() const
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:268
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle otherwise a larger ***bin number will have no effects or even make the ***precision lower than before *********************************************************************************************************it lies in three folders
Definition: invegas.h:5
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:106
T min(T a, T b)
Definition: MathUtil.h:58
MonitorElement * get(std::string const &path)
Definition: DQMStore.cc:303
unsigned long long uint64_t
Definition: Time.h:15
std::vector< std::string > getSubdirs()
Definition: DQMStore.cc:325
void removeElement(Args &&...args)
Definition: DQMStore.h:199
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

const bool ThroughputServiceClient::m_dqm_merge
private

Definition at line 35 of file ThroughputServiceClient.cc.

Referenced by fillSummaryPlots().

const std::string ThroughputServiceClient::m_dqm_path
private

Definition at line 34 of file ThroughputServiceClient.cc.

Referenced by fillSummaryPlots().