CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
DQMGenericClient Class Reference

#include <DQMGenericClient.h>

Inheritance diagram for DQMGenericClient:
DQMEDHarvester edm::one::EDAnalyzer< edm::one::WatchRuns, edm::one::WatchLuminosityBlocks, edm::one::SharedResources > edm::one::EDAnalyzerBase edm::EDConsumerBase

Classes

struct  CDOption
 
struct  EfficOption
 
struct  NormOption
 
struct  ResolOption
 

Public Member Functions

void computeEfficiency (DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, const std::string &startDir, const std::string &efficMEName, const std::string &efficMETitle, const std::string &recoMEName, const std::string &simMEName, const int type=1, const bool makeProfile=false)
 
void computeResolution (DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, const std::string &startDir, const std::string &fitMEPrefix, const std::string &fitMETitlePrefix, const std::string &srcMEName)
 
void dqmEndJob (DQMStore::IBooker &, DQMStore::IGetter &) override
 
 DQMGenericClient (const edm::ParameterSet &pset)
 
void limitedFit (MonitorElement *srcME, MonitorElement *meanME, MonitorElement *sigmaME)
 
void makeCumulativeDist (DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, const std::string &startDir, const std::string &cdName)
 
void normalizeToEntries (DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, const std::string &startDir, const std::string &histName, const std::string &normHistName)
 
 ~DQMGenericClient ()
 
- Public Member Functions inherited from DQMEDHarvester
virtual void analyze (edm::Event const &, edm::EventSetup const &) final
 
virtual void beginLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) final
 
virtual void beginRun (edm::Run const &, edm::EventSetup const &)
 
 DQMEDHarvester (void)
 
virtual void dqmEndLuminosityBlock (DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &, edm::EventSetup const &)
 
virtual void endJob () final
 
virtual void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) final
 
virtual void endRun (edm::Run const &, edm::EventSetup const &)
 
- Public Member Functions inherited from edm::one::EDAnalyzer< edm::one::WatchRuns, edm::one::WatchLuminosityBlocks, edm::one::SharedResources >
 EDAnalyzer ()=default
 
- Public Member Functions inherited from edm::one::EDAnalyzerBase
 EDAnalyzerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDAnalyzerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Member Functions

void findAllSubdirectories (DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, std::string dir, std::set< std::string > *myList, const TString &pattern)
 
void generic_eff (TH1 *denom, TH1 *numer, MonitorElement *efficiencyHist, const int type=1)
 

Private Attributes

std::vector< CDOptioncdOptions_
 
std::vector< EfficOptionefficOptions_
 
bool isWildcardUsed_
 
std::vector< NormOptionnormOptions_
 
std::string outputFileName_
 
bool resLimitedFit_
 
std::vector< ResolOptionresolOptions_
 
std::vector< std::string > subDirs_
 
DQMStoretheDQM
 
unsigned int verbose_
 

Additional Inherited Members

- Public Types inherited from edm::one::EDAnalyzerBase
typedef EDAnalyzerBase ModuleType
 
- Static Public Member Functions inherited from edm::one::EDAnalyzerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::one::EDAnalyzerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- 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 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)
 

Detailed Description

Definition at line 28 of file DQMGenericClient.h.

Constructor & Destructor Documentation

DQMGenericClient::DQMGenericClient ( const edm::ParameterSet pset)

Definition at line 34 of file DQMGenericClient.cc.

References ExtractAppInfoFromXML::args, DQMGenericClient::EfficOption::denominator, genericClientPSetHelper_cff::efficSet(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), DQMGenericClient::EfficOption::isProfile, DQMGenericClient::EfficOption::name, DQMGenericClient::NormOption::name, DQMGenericClient::CDOption::name, DQMGenericClient::ResolOption::namePrefix, DQMGenericClient::NormOption::normHistName, DQMGenericClient::EfficOption::numerator, or, DQMGenericClient::ResolOption::srcName, DQMGenericClient::EfficOption::title, DQMGenericClient::ResolOption::titlePrefix, and DQMGenericClient::EfficOption::type.

35 {
36  typedef std::vector<edm::ParameterSet> VPSet;
37  typedef std::vector<std::string> vstring;
38  typedef boost::escaped_list_separator<char> elsc;
39 
40  elsc commonEscapes("\\", " \t", "\'");
41 
42  verbose_ = pset.getUntrackedParameter<unsigned int>("verbose", 0);
43 
44  // Parse efficiency commands
45  vstring effCmds = pset.getParameter<vstring>("efficiency");
46  for ( vstring::const_iterator effCmd = effCmds.begin();
47  effCmd != effCmds.end(); ++effCmd )
48  {
49  if ( effCmd->empty() ) continue;
50 
51  boost::tokenizer<elsc> tokens(*effCmd, commonEscapes);
52 
53  vector<string> args;
54  for(boost::tokenizer<elsc>::const_iterator iToken = tokens.begin();
55  iToken != tokens.end(); ++iToken) {
56  if ( iToken->empty() ) continue;
57  args.push_back(*iToken);
58  }
59 
60  if ( args.size() < 4 ) {
61  LogInfo("DQMGenericClient") << "Wrong input to effCmds\n";
62  continue;
63  }
64 
65  EfficOption opt;
66  opt.name = args[0];
67  opt.title = args[1];
68  opt.numerator = args[2];
69  opt.denominator = args[3];
70  opt.isProfile = false;
71 
72  const string typeName = args.size() == 4 ? "eff" : args[4];
73  if ( typeName == "eff" ) opt.type = 1;
74  else if ( typeName == "fake" ) opt.type = 2;
75  else opt.type = 0;
76 
77  efficOptions_.push_back(opt);
78  }
79 
80  VPSet efficSets = pset.getUntrackedParameter<VPSet>("efficiencySets", VPSet());
81  for ( VPSet::const_iterator efficSet = efficSets.begin();
82  efficSet != efficSets.end(); ++efficSet )
83  {
84  EfficOption opt;
85  opt.name = efficSet->getUntrackedParameter<string>("name");
86  opt.title = efficSet->getUntrackedParameter<string>("title");
87  opt.numerator = efficSet->getUntrackedParameter<string>("numerator");
88  opt.denominator = efficSet->getUntrackedParameter<string>("denominator");
89  opt.isProfile = false;
90 
91  const string typeName = efficSet->getUntrackedParameter<string>("typeName", "eff");
92  if ( typeName == "eff" ) opt.type = 1;
93  else if ( typeName == "fake" ) opt.type = 2;
94  else opt.type = 0;
95 
96  efficOptions_.push_back(opt);
97  }
98 
99  // Parse profiles
100  vstring profileCmds = pset.getUntrackedParameter<vstring>("efficiencyProfile", vstring());
101  for ( vstring::const_iterator profileCmd = profileCmds.begin();
102  profileCmd != profileCmds.end(); ++profileCmd )
103  {
104  if ( profileCmd->empty() ) continue;
105 
106  boost::tokenizer<elsc> tokens(*profileCmd, commonEscapes);
107 
108  vector<string> args;
109  for(boost::tokenizer<elsc>::const_iterator iToken = tokens.begin();
110  iToken != tokens.end(); ++iToken) {
111  if ( iToken->empty() ) continue;
112  args.push_back(*iToken);
113  }
114 
115  if ( args.size() < 4 ) {
116  LogInfo("DQMGenericClient") << "Wrong input to profileCmds\n";
117  continue;
118  }
119 
120  EfficOption opt;
121  opt.name = args[0];
122  opt.title = args[1];
123  opt.numerator = args[2];
124  opt.denominator = args[3];
125  opt.isProfile = true;
126 
127  const string typeName = args.size() == 4 ? "eff" : args[4];
128  if ( typeName == "eff" ) opt.type = 1;
129  else if ( typeName == "fake" ) opt.type = 2;
130  else opt.type = 0;
131 
132  efficOptions_.push_back(opt);
133  }
134 
135  VPSet profileSets = pset.getUntrackedParameter<VPSet>("efficiencyProfileSets", VPSet());
136  for ( VPSet::const_iterator profileSet = profileSets.begin();
137  profileSet != profileSets.end(); ++profileSet )
138  {
139  EfficOption opt;
140  opt.name = profileSet->getUntrackedParameter<string>("name");
141  opt.title = profileSet->getUntrackedParameter<string>("title");
142  opt.numerator = profileSet->getUntrackedParameter<string>("numerator");
143  opt.denominator = profileSet->getUntrackedParameter<string>("denominator");
144  opt.isProfile = true;
145 
146  const string typeName = profileSet->getUntrackedParameter<string>("typeName", "eff");
147  if ( typeName == "eff" ) opt.type = 1;
148  else if ( typeName == "fake" ) opt.type = 2;
149  else opt.type = 0;
150 
151  efficOptions_.push_back(opt);
152  }
153 
154  // Parse resolution commands
155  vstring resCmds = pset.getParameter<vstring>("resolution");
156  for ( vstring::const_iterator resCmd = resCmds.begin();
157  resCmd != resCmds.end(); ++resCmd )
158  {
159  if ( resCmd->empty() ) continue;
160  boost::tokenizer<elsc> tokens(*resCmd, commonEscapes);
161 
162  vector<string> args;
163  for(boost::tokenizer<elsc>::const_iterator iToken = tokens.begin();
164  iToken != tokens.end(); ++iToken) {
165  if ( iToken->empty() ) continue;
166  args.push_back(*iToken);
167  }
168 
169  if ( args.size() != 3 ) {
170  LogInfo("DQMGenericClient") << "Wrong input to resCmds\n";
171  continue;
172  }
173 
174  ResolOption opt;
175  opt.namePrefix = args[0];
176  opt.titlePrefix = args[1];
177  opt.srcName = args[2];
178 
179  resolOptions_.push_back(opt);
180  }
181 
182  VPSet resolSets = pset.getUntrackedParameter<VPSet>("resolutionSets", VPSet());
183  for ( VPSet::const_iterator resolSet = resolSets.begin();
184  resolSet != resolSets.end(); ++resolSet )
185  {
186  ResolOption opt;
187  opt.namePrefix = resolSet->getUntrackedParameter<string>("namePrefix");
188  opt.titlePrefix = resolSet->getUntrackedParameter<string>("titlePrefix");
189  opt.srcName = resolSet->getUntrackedParameter<string>("srcName");
190 
191  resolOptions_.push_back(opt);
192  }
193 
194  // Parse Normalization commands
195  vstring normCmds = pset.getUntrackedParameter<vstring>("normalization", vstring());
196  for ( vstring::const_iterator normCmd = normCmds.begin();
197  normCmd != normCmds.end(); ++normCmd )
198  {
199  if ( normCmd->empty() ) continue;
200  boost::tokenizer<elsc> tokens(*normCmd, commonEscapes);
201 
202  vector<string> args;
203  for(boost::tokenizer<elsc>::const_iterator iToken = tokens.begin();
204  iToken != tokens.end(); ++iToken) {
205  if ( iToken->empty() ) continue;
206  args.push_back(*iToken);
207  }
208 
209  if ( args.empty() or args.size() > 2 ) {
210  LogInfo("DQMGenericClient") << "Wrong input to normCmds\n";
211  continue;
212  }
213 
214  NormOption opt;
215  opt.name = args[0];
216  opt.normHistName = args.size() == 2 ? args[1] : args[0];
217 
218  normOptions_.push_back(opt);
219  }
220 
221  VPSet normSets = pset.getUntrackedParameter<VPSet>("normalizationSets", VPSet());
222  for ( VPSet::const_iterator normSet = normSets.begin();
223  normSet != normSets.end(); ++normSet )
224  {
225  NormOption opt;
226  opt.name = normSet->getUntrackedParameter<string>("name");
227  opt.normHistName = normSet->getUntrackedParameter<string>("normalizedTo", opt.name);
228 
229  normOptions_.push_back(opt);
230  }
231 
232  // Cumulative distributions
233  vstring cdCmds = pset.getUntrackedParameter<vstring>("cumulativeDists", vstring());
234  for ( vstring::const_iterator cdCmd = cdCmds.begin();
235  cdCmd != cdCmds.end(); ++cdCmd )
236  {
237  if ( cdCmd->empty() ) continue;
238  boost::tokenizer<elsc> tokens(*cdCmd, commonEscapes);
239 
240  vector<string> args;
241  for(boost::tokenizer<elsc>::const_iterator iToken = tokens.begin();
242  iToken != tokens.end(); ++iToken) {
243  if ( iToken->empty() ) continue;
244  args.push_back(*iToken);
245  }
246 
247  if ( args.size() != 1 ) {
248  LogInfo("DQMGenericClient") << "Wrong input to cdCmds\n";
249  continue;
250  }
251 
252  CDOption opt;
253  opt.name = args[0];
254 
255  cdOptions_.push_back(opt);
256  }
257 
258  VPSet cdSets = pset.getUntrackedParameter<VPSet>("cumulativeDistSets", VPSet());
259  for ( VPSet::const_iterator cdSet = cdSets.begin();
260  cdSet != cdSets.end(); ++cdSet )
261  {
262  CDOption opt;
263  opt.name = cdSet->getUntrackedParameter<string>("name");
264 
265  cdOptions_.push_back(opt);
266  }
267 
268  outputFileName_ = pset.getUntrackedParameter<string>("outputFileName", "");
269  subDirs_ = pset.getUntrackedParameter<vstring>("subDirs");
270 
271  resLimitedFit_ = pset.getUntrackedParameter<bool>("resolutionLimitedFit",false);
272  isWildcardUsed_ = false;
273 }
std::vector< EfficOption > efficOptions_
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
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::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
vector< string > vstring
Definition: ExoticaDQM.cc:75
std::vector< ResolOption > resolOptions_
std::vector< std::string > subDirs_
std::string outputFileName_
unsigned int verbose_
std::vector< CDOption > cdOptions_
std::vector< NormOption > normOptions_
DQMGenericClient::~DQMGenericClient ( )
inline

Definition at line 32 of file DQMGenericClient.h.

32 {};

Member Function Documentation

void DQMGenericClient::computeEfficiency ( DQMStore::IBooker ibooker,
DQMStore::IGetter igetter,
const std::string &  startDir,
const std::string &  efficMEName,
const std::string &  efficMETitle,
const std::string &  recoMEName,
const std::string &  simMEName,
const int  type = 1,
const bool  makeProfile = false 
)

Definition at line 357 of file DQMGenericClient.cc.

References DQMStore::IBooker::book1D(), DQMStore::IBooker::book2D(), DQMStore::IBooker::book3D(), DQMStore::IBooker::bookProfile(), DQMStore::IBooker::cd(), DQMStore::IGetter::dirExists(), DQMStore::IGetter::get(), i, DQMStore::IBooker::setCurrentFolder(), mathSSE::sqrt(), and AlCaHLTBitMon_QueryRunRegistry::string.

359 {
360  if ( ! igetter.dirExists(startDir) ) {
361  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
362  LogInfo("DQMGenericClient") << "computeEfficiency() : "
363  << "Cannot find sub-directory " << startDir << endl;
364  }
365  return;
366  }
367 
368  ibooker.cd();
369 
370  ME* simME = igetter.get(startDir+"/"+simMEName);
371  ME* recoME = igetter.get(startDir+"/"+recoMEName);
372 
373  if ( !simME ) {
374  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
375  LogInfo("DQMGenericClient") << "computeEfficiency() : "
376  << "No sim-ME '" << simMEName << "' found\n";
377  }
378  return;
379  }
380 
381  if ( !recoME ) {
382  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
383  LogInfo("DQMGenericClient") << "computeEfficiency() : "
384  << "No reco-ME '" << recoMEName << "' found\n";
385  }
386  return;
387  }
388 
389  // Treat everything as the base class, TH1
390 
391  TH1* hSim = simME ->getTH1();
392  TH1* hReco = recoME->getTH1();
393 
394  if ( !hSim || !hReco ) {
395  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
396  LogInfo("DQMGenericClient") << "computeEfficiency() : "
397  << "Cannot create TH1 from ME\n";
398  }
399  return;
400  }
401 
402  string efficDir = startDir;
403  string newEfficMEName = efficMEName;
404  string::size_type shiftPos;
405  if ( string::npos != (shiftPos = efficMEName.rfind('/')) ) {
406  efficDir += "/"+efficMEName.substr(0, shiftPos);
407  newEfficMEName.erase(0, shiftPos+1);
408  }
409  ibooker.setCurrentFolder(efficDir);
410 
411  if (makeProfile) {
412  TProfile * efficHist = (hReco->GetXaxis()->GetXbins()->GetSize()==0) ?
413  new TProfile(newEfficMEName.c_str(), efficMETitle.c_str(),
414  hReco->GetXaxis()->GetNbins(),
415  hReco->GetXaxis()->GetXmin(),
416  hReco->GetXaxis()->GetXmax()) :
417  new TProfile(newEfficMEName.c_str(), efficMETitle.c_str(),
418  hReco->GetXaxis()->GetNbins(),
419  hReco->GetXaxis()->GetXbins()->GetArray());
420 
421  efficHist->GetXaxis()->SetTitle(hSim->GetXaxis()->GetTitle());
422  efficHist->GetYaxis()->SetTitle(hSim->GetYaxis()->GetTitle());
423 
424 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,27,0)
425  for (int i=1; i <= hReco->GetNbinsX(); i++) {
426 
427  const double nReco = hReco->GetBinContent(i);
428  const double nSim = hSim->GetBinContent(i);
429  if(nSim > INT_MAX || nSim < INT_MIN || nReco > INT_MAX || nReco < INT_MIN)
430  {
431  LogError("DQMGenericClient") << "computeEfficiency() : "
432  << "Overflow: bin content either too large or too small to be casted to int";
433  return;
434  }
435 
436  if(std::string(hSim->GetXaxis()->GetBinLabel(i)) != "")
437  efficHist->GetXaxis()->SetBinLabel(i, hSim->GetXaxis()->GetBinLabel(i));
438 
439  if ( nSim == 0 || nReco > nSim ) continue;
440  const double effVal = nReco/nSim;
441 
442  const double errLo = TEfficiency::ClopperPearson((int)nSim,
443  (int)nReco,
444  0.683,false);
445  const double errUp = TEfficiency::ClopperPearson((int)nSim,
446  (int)nReco,
447  0.683,true);
448  const double errVal = (effVal - errLo > errUp - effVal) ? effVal - errLo : errUp - effVal;
449  efficHist->SetBinContent(i, effVal);
450  efficHist->SetBinEntries(i, 1);
451  efficHist->SetBinError(i, sqrt(effVal * effVal + errVal * errVal));
452  }
453 #else
454  for (int i=1; i <= hReco->GetNbinsX(); i++) {
455 
456  const double nReco = hReco->GetBinContent(i);
457  const double nSim = hSim->GetBinContent(i);
458  if(nSim > INT_MAX || nSim < INT_MIN || nReco > INT_MAX || nReco < INT_MIN)
459  {
460  LogError("DQMGenericClient") << "computeEfficiency() : "
461  << "Overflow: bin content either too large or too small to be casted to int";
462  return;
463  }
464 
465  TGraphAsymmErrorsWrapper asymm;
466  std::pair<double, double> efficiencyWithError;
467  efficiencyWithError = asymm.efficiency((int)nReco,
468  (int)nSim);
469  double effVal = efficiencyWithError.first;
470  double errVal = efficiencyWithError.second;
471  if ((int)nSim > 0) {
472  efficHist->SetBinContent(i, effVal);
473  efficHist->SetBinEntries(i, 1);
474  efficHist->SetBinError(i, sqrt(effVal * effVal + errVal * errVal));
475  }
476  if(std::string(hSim->GetXaxis()->GetBinLabel(i)) != "")
477  efficHist->GetXaxis()->SetBinLabel(i, hSim->GetXaxis()->GetBinLabel(i));
478  }
479 #endif
480  ibooker.bookProfile(newEfficMEName.c_str(),efficHist);
481  delete efficHist;
482  }
483 
484  else {
485 
486  TH1* efficHist = (TH1*)hSim->Clone(newEfficMEName.c_str());
487  efficHist->SetTitle(efficMETitle.c_str());
488 
489  // Here is where you have trouble --- you need
490  // to understand what type of hist you have.
491 
492  ME* efficME = 0;
493 
494  // Parse the class name
495  // This works, but there might be a better way
496  TClass * myHistClass = efficHist->IsA();
497  TString histClassName = myHistClass->GetName();
498 
499  if (histClassName == "TH1F"){
500  efficME = ibooker.book1D(newEfficMEName, (TH1F*)efficHist);
501  } else if (histClassName == "TH2F"){
502  efficME = ibooker.book2D(newEfficMEName, (TH2F*)efficHist);
503  } else if (histClassName == "TH3F"){
504  efficME = ibooker.book3D(newEfficMEName, (TH3F*)efficHist);
505  }
506 
507 
508  if ( !efficME ) {
509  LogInfo("DQMGenericClient") << "computeEfficiency() : "
510  << "Cannot book effic-ME from the DQM\n";
511  return;
512  }
513 
514  // Update: 2009-9-16 slaunwhj
515  // call the most generic efficiency function
516  // works up to 3-d histograms
517 
518  generic_eff (hSim, hReco, efficME, type);
519 
520  // const int nBin = efficME->getNbinsX();
521  // for(int bin = 0; bin <= nBin; ++bin) {
522  // const float nSim = simME ->getBinContent(bin);
523  // const float nReco = recoME->getBinContent(bin);
524  // float eff =0;
525  // if (type=="fake")eff = nSim ? 1-nReco/nSim : 0.;
526  // else eff= nSim ? nReco/nSim : 0.;
527  // const float err = nSim && eff <= 1 ? sqrt(eff*(1-eff)/nSim) : 0.;
528  // efficME->setBinContent(bin, eff);
529  // efficME->setBinError(bin, err);
530  // }
531  efficME->setEntries(simME->getEntries());
532 
533  }
534 
535  // Global efficiency
536  ME* globalEfficME = igetter.get(efficDir+"/globalEfficiencies");
537  if ( !globalEfficME ) globalEfficME = ibooker.book1D("globalEfficiencies", "Global efficiencies", 1, 0, 1);
538  if ( !globalEfficME ) {
539  LogInfo("DQMGenericClient") << "computeEfficiency() : "
540  << "Cannot book globalEffic-ME from the DQM\n";
541  return;
542  }
543  TH1F* hGlobalEffic = globalEfficME->getTH1F();
544  if ( !hGlobalEffic ) {
545  LogInfo("DQMGenericClient") << "computeEfficiency() : "
546  << "Cannot create TH1F from ME, globalEfficME\n";
547  return;
548  }
549 
550  const float nSimAll = hSim->GetEntries();
551  const float nRecoAll = hReco->GetEntries();
552  float efficAll=0;
553  if ( type == 1 ) efficAll = nSimAll ? nRecoAll/nSimAll : 0;
554  else if ( type == 2 ) efficAll = nSimAll ? 1-nRecoAll/nSimAll : 0;
555  const float errorAll = nSimAll && efficAll < 1 ? sqrt(efficAll*(1-efficAll)/nSimAll) : 0;
556 
557  const int iBin = hGlobalEffic->Fill(newEfficMEName.c_str(), 0);
558  hGlobalEffic->SetBinContent(iBin, efficAll);
559  hGlobalEffic->SetBinError(iBin, errorAll);
560 }
type
Definition: HCALResponse.h:21
int i
Definition: DBlmapReader.cc:9
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:155
void cd(void)
Definition: DQMStore.cc:266
MonitorElement * get(const std::string &path)
Definition: DQMStore.cc:291
uint16_t size_type
Definition: ME.h:11
T sqrt(T t)
Definition: SSEVec.h:48
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:113
bool dirExists(const std::string &path)
Definition: DQMStore.cc:307
unsigned int verbose_
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:131
MonitorElement * book3D(Args &&...args)
Definition: DQMStore.h:149
void generic_eff(TH1 *denom, TH1 *numer, MonitorElement *efficiencyHist, const int type=1)
void DQMGenericClient::computeResolution ( DQMStore::IBooker ibooker,
DQMStore::IGetter igetter,
const std::string &  startDir,
const std::string &  fitMEPrefix,
const std::string &  fitMETitlePrefix,
const std::string &  srcMEName 
)

Definition at line 562 of file DQMGenericClient.cc.

References DQMStore::IBooker::book1D(), DQMStore::IBooker::cd(), DQMStore::IGetter::dirExists(), DQMStore::IGetter::get(), FitSlicesYTool::getFittedMeanWithError(), FitSlicesYTool::getFittedSigmaWithError(), j, and DQMStore::IBooker::setCurrentFolder().

564 {
565  if ( ! igetter.dirExists(startDir) ) {
566  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
567  LogInfo("DQMGenericClient") << "computeResolution() : "
568  << "Cannot find sub-directory " << startDir << endl;
569  }
570  return;
571  }
572 
573  ibooker.cd();
574 
575  ME* srcME = igetter.get(startDir+"/"+srcName);
576  if ( !srcME ) {
577  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
578  LogInfo("DQMGenericClient") << "computeResolution() : "
579  << "No source ME '" << srcName << "' found\n";
580  }
581  return;
582  }
583 
584  TH2F* hSrc = srcME->getTH2F();
585  if ( !hSrc ) {
586  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
587  LogInfo("DQMGenericClient") << "computeResolution() : "
588  << "Cannot create TH2F from source-ME\n";
589  }
590  return;
591  }
592 
593  const int nBin = hSrc->GetNbinsX();
594 
595  string newDir = startDir;
596  string newPrefix = namePrefix;
597  string::size_type shiftPos;
598  if ( string::npos != (shiftPos = namePrefix.rfind('/')) ) {
599  newDir += "/"+namePrefix.substr(0, shiftPos);
600  newPrefix.erase(0, shiftPos+1);
601  }
602 
603  ibooker.setCurrentFolder(newDir);
604 
605  float * lowedgesfloats = new float[nBin+1];
606  ME* meanME;
607  ME* sigmaME;
608  if (hSrc->GetXaxis()->GetXbins()->GetSize())
609  {
610  for (int j=0; j<nBin+1; ++j)
611  lowedgesfloats[j] = (float)hSrc->GetXaxis()->GetXbins()->GetAt(j);
612  meanME = ibooker.book1D(newPrefix+"_Mean", titlePrefix+" Mean", nBin, lowedgesfloats);
613  sigmaME = ibooker.book1D(newPrefix+"_Sigma", titlePrefix+" Sigma", nBin, lowedgesfloats);
614  }
615  else
616  {
617  meanME = ibooker.book1D(newPrefix+"_Mean", titlePrefix+" Mean", nBin,
618  hSrc->GetXaxis()->GetXmin(),
619  hSrc->GetXaxis()->GetXmax());
620  sigmaME = ibooker.book1D(newPrefix+"_Sigma", titlePrefix+" Sigma", nBin,
621  hSrc->GetXaxis()->GetXmin(),
622  hSrc->GetXaxis()->GetXmax());
623  }
624 
625  if (meanME && sigmaME)
626  {
627  meanME->setEfficiencyFlag();
628  sigmaME->setEfficiencyFlag();
629 
630  if (! resLimitedFit_ ) {
631  FitSlicesYTool fitTool(srcME);
632  fitTool.getFittedMeanWithError(meanME);
633  fitTool.getFittedSigmaWithError(sigmaME);
635  } else {
636  limitedFit(srcME,meanME,sigmaME);
637  }
638  }
639  delete[] lowedgesfloats;
640 }
void cd(void)
Definition: DQMStore.cc:266
MonitorElement * get(const std::string &path)
Definition: DQMStore.cc:291
uint16_t size_type
Definition: ME.h:11
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:113
int j
Definition: DBlmapReader.cc:9
bool dirExists(const std::string &path)
Definition: DQMStore.cc:307
unsigned int verbose_
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
void limitedFit(MonitorElement *srcME, MonitorElement *meanME, MonitorElement *sigmaME)
void DQMGenericClient::dqmEndJob ( DQMStore::IBooker ibooker,
DQMStore::IGetter igetter 
)
overridevirtual

Implements DQMEDHarvester.

Definition at line 275 of file DQMGenericClient.cc.

References TrackerOfflineValidation_Dqm_cff::dirName, metacharacters(), cppFunctionSkipper::operator, and listBenchmarks::pattern.

275  {
276 
277  typedef vector<string> vstring;
278 
279  // Update 2014-04-02
280  // Migrated back to the endJob. the DQMFileSaver logic has
281  // to be reviewed to guarantee that the endJob is properly
282  // considered. The splitting per run is done centrally when
283  // running the harvesting in production
284 
285  // Update 2009-09-23
286  // Migrated all code from endJob to this function
287  // endJob is not necessarily called in the proper sequence
288  // and does not necessarily book histograms produced in
289  // that step.
290  // It more robust to do the histogram manipulation in
291  // this endRun function
292 
293  // needed to access the DQMStore::save method
294  theDQM = 0;
296 
297  // Process wildcard in the sub-directory
298  set<string> subDirSet;
299 
300  for(vstring::const_iterator iSubDir = subDirs_.begin();
301  iSubDir != subDirs_.end(); ++iSubDir) {
302  string subDir = *iSubDir;
303 
304  if ( subDir[subDir.size()-1] == '/' ) subDir.erase(subDir.size()-1);
305 
306  if ( TString(subDir).Contains(metacharacters) ) {
307  isWildcardUsed_ = true;
308 
309  const string::size_type shiftPos = subDir.rfind('/');
310  const string searchPath = subDir.substr(0, shiftPos);
311  const string pattern = subDir.substr(shiftPos + 1, subDir.length());
312  //std::cout << "\n\n\n\nLooking for all subdirs of " << subDir << std::endl;
313 
314  findAllSubdirectories (ibooker, igetter, searchPath, &subDirSet, pattern);
315 
316  }
317  else {
318  subDirSet.insert(subDir);
319  }
320  }
321 
322  for(set<string>::const_iterator iSubDir = subDirSet.begin();
323  iSubDir != subDirSet.end(); ++iSubDir) {
324  const string& dirName = *iSubDir;
325 
326  for ( vector<EfficOption>::const_iterator efficOption = efficOptions_.begin();
327  efficOption != efficOptions_.end(); ++efficOption )
328  {
329  computeEfficiency(ibooker, igetter, dirName, efficOption->name, efficOption->title,
330  efficOption->numerator, efficOption->denominator,
331  efficOption->type, efficOption->isProfile);
332  }
333 
334  for ( vector<ResolOption>::const_iterator resolOption = resolOptions_.begin();
335  resolOption != resolOptions_.end(); ++resolOption )
336  {
337  computeResolution(ibooker, igetter, dirName, resolOption->namePrefix, resolOption->titlePrefix, resolOption->srcName);
338  }
339 
340  for ( vector<NormOption>::const_iterator normOption = normOptions_.begin();
341  normOption != normOptions_.end(); ++normOption )
342  {
343  normalizeToEntries(ibooker, igetter, dirName, normOption->name, normOption->normHistName);
344  }
345 
346  for ( vector<CDOption>::const_iterator cdOption = cdOptions_.begin();
347  cdOption != cdOptions_.end(); ++cdOption )
348  {
349  makeCumulativeDist(ibooker, igetter, dirName, cdOption->name);
350  }
351  }
352 
353  if ( ! outputFileName_.empty() ) theDQM->save(outputFileName_);
354 
355 }
std::vector< EfficOption > efficOptions_
vector< string > vstring
Definition: ExoticaDQM.cc:75
TPRegexp metacharacters("[\\^\\$\\.\\*\\+\\?\\|\\(\\)\\{\\}\\[\\]]")
uint16_t size_type
std::vector< ResolOption > resolOptions_
std::vector< std::string > subDirs_
void normalizeToEntries(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, const std::string &startDir, const std::string &histName, const std::string &normHistName)
void computeResolution(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, const std::string &startDir, const std::string &fitMEPrefix, const std::string &fitMETitlePrefix, const std::string &srcMEName)
std::string outputFileName_
void findAllSubdirectories(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, std::string dir, std::set< std::string > *myList, const TString &pattern)
std::vector< CDOption > cdOptions_
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", const uint32_t run=0, const uint32_t lumi=0, SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE", const bool resetMEsAfterWriting=false)
Definition: DQMStore.cc:2540
void computeEfficiency(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, const std::string &startDir, const std::string &efficMEName, const std::string &efficMETitle, const std::string &recoMEName, const std::string &simMEName, const int type=1, const bool makeProfile=false)
void makeCumulativeDist(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, const std::string &startDir, const std::string &cdName)
std::vector< NormOption > normOptions_
void DQMGenericClient::findAllSubdirectories ( DQMStore::IBooker ibooker,
DQMStore::IGetter igetter,
std::string  dir,
std::set< std::string > *  myList,
const TString &  pattern = TString("") 
)
private

Definition at line 797 of file DQMGenericClient.cc.

References DQMStore::IBooker::cd(), DQMStore::IGetter::dirExists(), TrackerOfflineValidation_Dqm_cff::dirName, DQMStore::IGetter::getSubdirs(), nonPerlWildcard(), and listBenchmarks::pattern.

798  {
799  TString pattern = _pattern;
800  if (!igetter.dirExists(dir)) {
801  LogError("DQMGenericClient") << " DQMGenericClient::findAllSubdirectories ==> Missing folder " << dir << " !!!";
802  return;
803  }
804  if (pattern != "") {
805  if (pattern.Contains(nonPerlWildcard)) pattern.ReplaceAll("*",".*");
806  TPRegexp regexp(pattern);
807  ibooker.cd(dir);
808  vector <string> foundDirs = igetter.getSubdirs();
809  for(vector<string>::const_iterator iDir = foundDirs.begin();
810  iDir != foundDirs.end(); ++iDir) {
811  TString dirName = iDir->substr(iDir->rfind('/') + 1, iDir->length());
812  if (dirName.Contains(regexp))
813  findAllSubdirectories (ibooker, igetter, *iDir, myList);
814  }
815  }
816  //std::cout << "Looking for directory " << dir ;
817  else if (igetter.dirExists(dir)){
818  //std::cout << "... it exists! Inserting it into the list ";
819  myList->insert(dir);
820  //std::cout << "... now list has size " << myList->size() << std::endl;
821  ibooker.cd(dir);
822  findAllSubdirectories (ibooker, igetter, dir, myList, "*");
823  } else {
824  //std::cout << "... DOES NOT EXIST!!! Skip bogus dir" << std::endl;
825 
826  LogInfo ("DQMGenericClient") << "Trying to find sub-directories of " << dir
827  << " failed because " << dir << " does not exist";
828 
829  }
830  return;
831 }
void cd(void)
Definition: DQMStore.cc:266
bool dirExists(const std::string &path)
Definition: DQMStore.cc:307
void findAllSubdirectories(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, std::string dir, std::set< std::string > *myList, const TString &pattern)
std::vector< std::string > getSubdirs(void)
Definition: DQMStore.cc:295
TPRegexp nonPerlWildcard("\\w\\*|^\\*")
dbl *** dir
Definition: mlp_gen.cc:35
void DQMGenericClient::generic_eff ( TH1 *  denom,
TH1 *  numer,
MonitorElement efficiencyHist,
const int  type = 1 
)
private

Definition at line 834 of file DQMGenericClient.cc.

References LogDebug, MonitorElement::setBinContent(), MonitorElement::setBinError(), MonitorElement::setEfficiencyFlag(), and mathSSE::sqrt().

834  {
835  for (int iBinX = 1; iBinX < denom->GetNbinsX()+1; iBinX++){
836  for (int iBinY = 1; iBinY < denom->GetNbinsY()+1; iBinY++){
837  for (int iBinZ = 1; iBinZ < denom->GetNbinsZ()+1; iBinZ++){
838 
839  int globalBinNum = denom->GetBin(iBinX, iBinY, iBinZ);
840 
841  float numerVal = numer->GetBinContent(globalBinNum);
842  float denomVal = denom->GetBinContent(globalBinNum);
843 
844  float effVal = 0;
845 
846  // fake eff is in use
847  if (type == 2 ) {
848  effVal = denomVal ? (1 - numerVal / denomVal) : 0;
849  } else {
850  effVal = denomVal ? numerVal / denomVal : 0;
851  }
852 
853  float errVal = (denomVal && (effVal <=1)) ? sqrt(effVal*(1-effVal)/denomVal) : 0;
854 
855  LogDebug ("DQMGenericClient") << "(iBinX, iBinY, iBinZ) = "
856  << iBinX << ", "
857  << iBinY << ", "
858  << iBinZ << "), global bin = " << globalBinNum
859  << "eff = " << numerVal << " / " << denomVal
860  << " = " << effVal
861  << " ... setting the error for that bin ... " << endl
862  << endl;
863 
864 
865  efficiencyHist->setBinContent(globalBinNum, effVal);
866  efficiencyHist->setBinError(globalBinNum, errVal);
867  efficiencyHist->setEfficiencyFlag();
868  }
869  }
870  }
871 
872  //efficiencyHist->setMinimum(0.0);
873  //efficiencyHist->setMaximum(1.0);
874 }
#define LogDebug(id)
type
Definition: HCALResponse.h:21
void setBinContent(int binx, double content)
set content of bin (1-D)
T sqrt(T t)
Definition: SSEVec.h:48
void setBinError(int binx, double error)
set uncertainty on content of bin (1-D)
void setEfficiencyFlag(void)
void DQMGenericClient::limitedFit ( MonitorElement srcME,
MonitorElement meanME,
MonitorElement sigmaME 
)

Definition at line 745 of file DQMGenericClient.cc.

References cont, MonitorElement::getTH2F(), timingPdfMaker::histo, i, MonitorElement::setBinContent(), and MonitorElement::setBinError().

746 {
747  TH2F * histo = srcME->getTH2F();
748 
749  static int i = 0;
750  i++;
751 
752  // Fit slices projected along Y from bins in X
753  double cont_min = 100; //Minimum number of entries
754  Int_t binx = histo->GetXaxis()->GetNbins();
755 
756  for (int i = 1; i <= binx ; i++) {
757  TString iString(i);
758  TH1 *histoY = histo->ProjectionY(" ", i, i);
759  double cont = histoY->GetEntries();
760 
761  if (cont >= cont_min) {
762  float minfit = histoY->GetMean() - histoY->GetRMS();
763  float maxfit = histoY->GetMean() + histoY->GetRMS();
764 
765  TF1 *fitFcn = new TF1(TString("g")+histo->GetName()+iString,"gaus",minfit,maxfit);
766  double x1,x2;
767  fitFcn->GetRange(x1,x2);
768 
769  histoY->Fit(fitFcn,"QR0","",x1,x2);
770 
771 // histoY->Fit(fitFcn->GetName(),"RME");
772  double *par = fitFcn->GetParameters();
773  double *err = fitFcn->GetParErrors();
774 
775  meanME->setBinContent(i, par[1]);
776  meanME->setBinError(i, err[1]);
777 // meanME->setBinEntries(i, 1.);
778 // meanME->setBinError(i,sqrt(err[1]*err[1]+par[1]*par[1]));
779 
780  sigmaME->setBinContent(i, par[2]);
781  sigmaME->setBinError(i, err[2]);
782 // sigmaME->setBinEntries(i, 1.);
783 // sigmaME->setBinError(i,sqrt(err[2]*err[2]+par[2]*par[2]));
784 
785  if(fitFcn) delete fitFcn;
786  if(histoY) delete histoY;
787  }
788  else {
789  if(histoY) delete histoY;
790  continue;
791  }
792  }
793 }
int i
Definition: DBlmapReader.cc:9
void setBinContent(int binx, double content)
set content of bin (1-D)
void setBinError(int binx, double error)
set uncertainty on content of bin (1-D)
int cont
TH2F * getTH2F(void) const
void DQMGenericClient::makeCumulativeDist ( DQMStore::IBooker ibooker,
DQMStore::IGetter igetter,
const std::string &  startDir,
const std::string &  cdName 
)

Definition at line 704 of file DQMGenericClient.cc.

References DQMStore::IBooker::cd(), DQMStore::IGetter::dirExists(), DQMStore::IGetter::get(), and i.

705 {
706  if ( ! igetter.dirExists(startDir) ) {
707  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
708  LogInfo("DQMGenericClient") << "makeCumulativeDist() : "
709  << "Cannot find sub-directory " << startDir << endl;
710  }
711  return;
712  }
713 
714  ibooker.cd();
715 
716  ME* element_cd = igetter.get(startDir+"/"+cdName);
717 
718  if ( !element_cd ) {
719  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
720  LogInfo("DQMGenericClient") << "makeCumulativeDist() : "
721  << "No such element '" << cdName << "' found\n";
722  }
723  return;
724  }
725 
726  TH1F* cd = element_cd->getTH1F();
727 
728  if ( !cd ) {
729  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
730  LogInfo("DQMGenericClient") << "makeCumulativeDist() : "
731  << "Cannot create TH1F from ME\n";
732  }
733  return;
734  }
735 
736  int n_bins = cd->GetNbinsX() + 1;
737 
738  for (int i = 1; i <= n_bins; i++) {
739  cd->SetBinContent(i,cd->GetBinContent(i) + cd->GetBinContent(i-1));
740  }
741 
742  return;
743 }
int i
Definition: DBlmapReader.cc:9
void cd(void)
Definition: DQMStore.cc:266
MonitorElement * get(const std::string &path)
Definition: DQMStore.cc:291
Definition: ME.h:11
bool dirExists(const std::string &path)
Definition: DQMStore.cc:307
unsigned int verbose_
void DQMGenericClient::normalizeToEntries ( DQMStore::IBooker ibooker,
DQMStore::IGetter igetter,
const std::string &  startDir,
const std::string &  histName,
const std::string &  normHistName 
)

Definition at line 642 of file DQMGenericClient.cc.

References DQMStore::IBooker::cd(), DQMStore::IGetter::dirExists(), python.tagInventory::entries, DQMStore::IGetter::get(), and estimatePileup::hist.

644 {
645  if ( ! igetter.dirExists(startDir) ) {
646  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
647  LogInfo("DQMGenericClient") << "normalizeToEntries() : "
648  << "Cannot find sub-directory " << startDir << endl;
649  }
650  return;
651  }
652 
653  ibooker.cd();
654 
655  ME* element = igetter.get(startDir+"/"+histName);
656  ME* normME = igetter.get(startDir+"/"+normHistName);
657 
658  if ( !element ) {
659  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
660  LogInfo("DQMGenericClient") << "normalizeToEntries() : "
661  << "No such element '" << histName << "' found\n";
662  }
663  return;
664  }
665 
666  if ( !normME ) {
667  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
668  LogInfo("DQMGenericClient") << "normalizeToEntries() : "
669  << "No such element '" << normHistName << "' found\n";
670  }
671  return;
672  }
673 
674  TH1F* hist = element->getTH1F();
675  if ( !hist) {
676  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
677  LogInfo("DQMGenericClient") << "normalizeToEntries() : "
678  << "Cannot create TH1F from ME\n";
679  }
680  return;
681  }
682 
683  TH1F* normHist = normME->getTH1F();
684  if ( !normHist ) {
685  if ( verbose_ >= 2 || (verbose_ == 1 && !isWildcardUsed_) ) {
686  LogInfo("DQMGenericClient") << "normalizeToEntries() : "
687  << "Cannot create TH1F from ME\n";
688  }
689  return;
690  }
691 
692  const double entries = normHist->GetEntries();
693  if ( entries != 0 ) {
694  hist->Scale(1./entries);
695  }
696  else {
697  LogInfo("DQMGenericClient") << "normalizeToEntries() : "
698  << "Zero entries in histogram\n";
699  }
700 
701  return;
702 }
void cd(void)
Definition: DQMStore.cc:266
MonitorElement * get(const std::string &path)
Definition: DQMStore.cc:291
Definition: ME.h:11
bool dirExists(const std::string &path)
Definition: DQMStore.cc:307
unsigned int verbose_

Member Data Documentation

std::vector<CDOption> DQMGenericClient::cdOptions_
private

Definition at line 99 of file DQMGenericClient.h.

std::vector<EfficOption> DQMGenericClient::efficOptions_
private

Definition at line 96 of file DQMGenericClient.h.

bool DQMGenericClient::isWildcardUsed_
private

Definition at line 89 of file DQMGenericClient.h.

std::vector<NormOption> DQMGenericClient::normOptions_
private

Definition at line 98 of file DQMGenericClient.h.

std::string DQMGenericClient::outputFileName_
private

Definition at line 94 of file DQMGenericClient.h.

bool DQMGenericClient::resLimitedFit_
private

Definition at line 90 of file DQMGenericClient.h.

std::vector<ResolOption> DQMGenericClient::resolOptions_
private

Definition at line 97 of file DQMGenericClient.h.

std::vector<std::string> DQMGenericClient::subDirs_
private

Definition at line 93 of file DQMGenericClient.h.

DQMStore* DQMGenericClient::theDQM
private

Definition at line 92 of file DQMGenericClient.h.

unsigned int DQMGenericClient::verbose_
private

Definition at line 88 of file DQMGenericClient.h.