ATLAS Offline Software
HanOutput.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include <TDirectory.h>
8 #include <TEfficiency.h>
9 #include <TFile.h>
10 #include <TGraph.h>
11 #include <TH1.h>
12 #include <TKey.h>
13 #include <TList.h>
14 #include <TNamed.h>
15 #include <TObjArray.h>
16 #include <TObjString.h>
17 #include <TObject.h>
18 #include <TROOT.h>
19 #include <string.h> // strncmp()
20 
21 #include <boost/algorithm/string.hpp>
22 #include <iomanip>
23 #include <iostream>
24 #include <map>
25 #include <sstream>
26 
29 #include "dqm_core/OutputListener.h"
30 #include "dqm_core/Parameter.h"
31 #include "dqm_core/Region.h"
32 #include "dqm_core/Result.h"
33 #include "dqm_core/exceptions.h"
34 
35 namespace
36 {
37 
38  std::string StatusToStr(const dqm_core::Result::Status& status);
39 }
40 
41 namespace dqi
42 {
43 
44  bool setNameGeneral(TObject* obj, const std::string& name)
45  {
46  if (obj != 0)
47  {
48  // some special cases, to avoid interpreter
49  if (TH1* h = dynamic_cast<TH1*>(obj))
50  {
51  h->SetName(name.c_str());
52  return true;
53  }
54  else if (TObjArray* a = dynamic_cast<TObjArray*>(obj))
55  {
56  a->SetName(name.c_str());
57  return true;
58  }
59  else if (TGraph* g = dynamic_cast<TGraph*>(obj))
60  {
61  g->SetName(name.c_str());
62  return true;
63  }
64  else if (TEfficiency* e = dynamic_cast<TEfficiency*>(obj))
65  {
66  e->SetName(name.c_str());
67  return true;
68  }
69  else
70  {
71  TClass* kl = obj->IsA();
72  TMethod* klm = kl->GetMethod("SetName", "\"Reference\"");
73  if (!klm)
74  {
75  std::cerr << "Error: attempt to change object name to " << name << " failed as its name is not settable"
76  << std::endl;
77  }
78  else
79  {
80  std::cout << "Manually doing cast for " << name << " of class " << kl->GetName() << std::endl;
81  obj->Execute("SetName", ("\"" + name + "\"").c_str());
82  return true;
83  }
84  }
85  }
86  return false;
87  }
88 
89  const int HanOutput::Result::s_charArrSize = 10;
90 
91  // *********************************************************************
92  // Public Methods
93  // *********************************************************************
94 
95  HanOutput::HanOutput(const std::string& rootFileName, DQOutputMap_t* outMap, TSeqCollection* outList)
96  : m_fileName(rootFileName),
97  m_file(TFile::Open(rootFileName.c_str(), "RECREATE")),
98  m_retainUnpubData(false),
99  m_config(0),
100  m_input(0)
101  {
102  m_outputMap = outMap;
104  if (m_file.get() == 0)
105  {
106  std::cerr << "File not writable: " << rootFileName << "\n";
107  }
108  }
109 
111  {
112  DQResultMap_t::const_iterator rend = m_dqResults.end();
113  for (DQResultMap_t::const_iterator i = m_dqResults.begin(); i != rend; ++i)
114  {
115  dqm_core::Result* result = i->second;
116  delete result;
117  }
118  m_file->Close();
119  }
120 
121  void HanOutput::addListener(const std::string& name, dqm_core::OutputListener* listener)
122  {
123  dqm_core::Region* region = dynamic_cast<dqm_core::Region*>(listener);
124  if (region == 0) return;
125 
126  DQParMap_t::const_iterator i = m_dqPars.find(name);
127  if (i != m_dqPars.end())
128  {
129  if (i->second != region)
130  {
131  std::cerr << "Attempt to add " << name << " twice; ignoring" << std::endl;
132  }
133  else
134  {
135  return;
136  }
137  }
138 
139  DQParMap_t::value_type dqParVal(name, region);
140  m_dqPars.insert(dqParVal);
141 
142  DQRegMap_t::value_type dqRegVal(region, name);
143  m_dqRegs.insert(dqRegVal);
144 
145  m_unpublishedDQPars.insert(name);
146  }
147 
148  void HanOutput::addListener(const dqm_core::Parameter& parameter, dqm_core::OutputListener* listener)
149  {
150  addListener(parameter.getName(), listener);
151  }
152 
153  void HanOutput::publishResult(const std::string& name, const dqm_core::Result& result)
154  {
155  // std::cout << "Publish " << name << std::endl;
156  delete m_dqResults[name];
157  m_dqResults[name] = result.clone();
158 
160  if (dqpari != m_unpublishedDQPars.end() && !m_retainUnpubData)
161  {
162  m_unpublishedDQPars.erase(dqpari);
163  }
164 
165  if (m_retainUnpubData)
166  {
167  DQParMap_t::const_iterator i = m_dqPars.find(name);
168  if (i != m_dqPars.end())
169  {
170  dqm_core::Region* parent = i->second;
171  dqm_core::OutputListener* plistener = parent;
172  plistener->handleResult(name, result);
173  }
174  }
175  }
176 
178  {
179  // store regex lists
180  DQOutputMap_t tmpRegex;
181  DQParSet_t::const_iterator regexEnd = m_regexlist.end();
182  for (DQParSet_t::const_iterator regex = m_regexlist.begin(); regex != regexEnd; ++regex)
183  {
184  TSeqCollection* resultList = (*m_outputMap)[*regex];
185  if (resultList == 0)
186  {
187  std::cerr << "Can't find original list for regex???" << std::endl;
188  }
189  else
190  {
191  tmpRegex.insert(DQOutputMap_t::value_type(*regex, resultList));
192  (*m_outputMap).erase(*regex);
193  DQParMap_t::const_iterator i = m_dqPars.find(*regex);
194  if (i != m_dqPars.end())
195  {
196  dqm_core::Region* parent = i->second;
197 
198  std::string parentName = parent->getName();
199  // just remove, don't delete
200  dynamic_cast<TSeqCollection*>((*m_outputMap)[parentName])->Remove(resultList);
201  }
202  }
203  }
204 
205  // replay results
206  DQResultMap_t::const_iterator rEnd = m_dqResults.end();
207  for (DQResultMap_t::const_iterator r = m_dqResults.begin(); r != rEnd; ++r)
208  {
209  const std::string name(r->first);
210  const dqm_core::Result& result(*(r->second));
211 
212  std::string parentName("top_level");
213  DQParMap_t::const_iterator i = m_dqPars.find(name);
214 
215  if (i != m_dqPars.end())
216  {
217  dqm_core::Region* parent = i->second;
218  parentName = parent->getName();
219  }
220  // copy-paste ENDS here
221 
222  TSeqCollection* resultList = (*m_outputMap)[name];
223  std::string parname(name);
224  std::string storename(name);
225 
226  if (resultList == NULL)
227  {
228  // is regex?
229  bool isRegex = false;
230  std::string extra;
231  for (DQParSet_t::const_iterator regex = m_regexlist.begin(); regex != regexEnd; ++regex)
232  {
233  std::string::size_type regexlen = regex->length();
234  if (*regex + "_" == name.substr(0, regexlen + 1))
235  {
236  isRegex = true;
237  parname = *regex;
238  std::string::size_type atsign = regex->rfind('@');
239  if (atsign != std::string::npos)
240  {
241  extra = regex->substr(atsign, std::string::npos);
242  }
243  storename = name.substr(regexlen + 1, std::string::npos);
244  break;
245  }
246  }
247  if (isRegex)
248  {
249  if (m_input == NULL)
250  {
251  std::cerr << "WARNING: setInput() has not been set; cannot publish regex results" << std::endl;
252  continue;
253  }
254  resultList = dynamic_cast<TSeqCollection*>(tmpRegex[parname]->Clone());
255  (*m_outputMap)[storename + extra] = resultList;
256  DQParMap_t::const_iterator i = m_dqPars.find(parname);
257  parentName = i->second->getName();
258  bool use_full_name = false;
259  if (m_config)
260  {
261  std::unique_ptr<const HanConfigAssessor> a(m_config->GetAssessor(parentName, parname));
262  if (a.get())
263  {
264  std::string store_using_path;
265  const HanConfigParMap* hcpm = a->GetAnnotation("store_using_path");
266  if (hcpm)
267  {
268  store_using_path.assign(hcpm->GetValue());
269  }
270  boost::algorithm::to_lower(store_using_path);
271  if (store_using_path == "1" || store_using_path == "yes" || store_using_path == "true")
272  {
273  use_full_name = true;
274  }
275  }
276  }
277  if (use_full_name)
278  {
279  resultList->SetName((boost::algorithm::replace_all_copy(storename, "/", "_") + extra + "_").c_str());
280  }
281  else
282  {
283  resultList->SetName((storename + extra + "_").c_str());
284  }
285  dynamic_cast<TSeqCollection*>((*m_outputMap)[parentName])->Add(resultList);
286  TKey* key = getObjKey(m_input, storename);
287  if (key != 0)
288  {
289  const char* className = key->GetClassName();
290  if ((strncmp(className, "TH", 2) == 0) || (strncmp(className, "TGraph", 6) == 0) ||
291  (strncmp(className, "TProfile", 8) == 0) || (strncmp(className, "TEfficiency", 11) == 0))
292  {
293  TNamed* transobj = dynamic_cast<TNamed*>(key->ReadObj());
294  if (transobj != NULL)
295  {
296  HanHistogramLink* hhl = new HanHistogramLink(m_input, storename);
297  if (use_full_name)
298  {
299  hhl->SetName((boost::algorithm::replace_all_copy(storename, "/", "_") + extra).c_str());
300  }
301  else
302  {
303  hhl->SetName((std::string(transobj->GetName()) + extra).c_str());
304  }
305  // transobj->SetName((std::string(transobj->GetName()) + extra).c_str());
306  // resultList->Add(transobj);
307  resultList->Add(hhl);
308  }
309  else
310  {
311  std::cerr << "TNamed* cast failed for " << storename << std::endl;
312  }
313  }
314  }
315  else
316  {
317  std::cout << "key is NULL" << std::endl;
318  }
319  }
320  else
321  {
322  std::cerr << "WARNING: Unable to find mapping for " << name << std::endl;
323  continue;
324  }
325  }
326 
327 
328 
329  resultList = dynamic_cast<TSeqCollection*>(resultList->FindObject("Results"));
330 
331  if (resultList == 0)
332  {
333  std::cerr << "Warning: no result list found associated with '" << name << "'\n";
334  continue;
335  }
336  resultList->Add(newTObjArray("Status", new TObjString(StatusToStr(result.status_).c_str()), 1));
337 
338  // iterate through the tags
339  std::map<std::string, double>::const_iterator iter = result.tags_.begin();
340  for (; iter != result.tags_.end(); ++iter)
341  {
342  std::ostringstream tagval;
343  tagval << std::setprecision(4) << iter->second;
344  resultList->Add(newTObjArray(iter->first.c_str(), new TObjString(tagval.str().c_str()), 1));
345  }
346 
347  // if there's an output object from the algorithm, include a clone
348  TObject* resultobj = result.getObject();
349  if (resultobj != 0)
350  {
351  TObject* resultobjclone = resultobj->Clone();
352  if (setNameGeneral(resultobj, "ResultObject"))
353  {
354  resultList->Add(resultobjclone);
355  }
356  else
357  {
358  std::cerr << "Discarding result object " << result.getObject()->GetName() << std::endl;
359  delete resultobjclone;
360  }
361  }
362 
363  if (m_config != 0)
364  {
366  if (ref)
367  {
368  if (setNameGeneral(ref, "Reference"))
369  {
370  resultList->Add(ref);
371  }
372  else
373  {
374  std::cerr << "Discarding reference object " << ref->GetName() << std::endl;
375  }
376  }
377  }
378  }
379  }
380 
381  void HanOutput::activate() { gROOT->cd(); }
382 
383  void HanOutput::setInput(TDirectory* input) { m_input = input; }
384 
385  static bool include_hist(TObject* obj) { //Check if object a hist or include hist
386  bool result = false;
387 
388  if ((strncmp(obj->ClassName(), "TH", 2) == 0) || (strncmp(obj->ClassName(), "TGraph", 6) == 0) ||
389  (strncmp(obj->ClassName(), "TProfile", 8) == 0) || (strncmp(obj->ClassName(), "TEfficiency", 11) == 0))
390  {
391  return true;
392  }
393 
394  TSeqCollection* tmpList{};
395  tmpList = dynamic_cast<TSeqCollection*>(obj);
396  if (tmpList != 0)
397  { //If it is collection - check, that it contains histograms or not
398  TIter nextElem(tmpList);
399  TObject* tmpobj{};
400  while ((tmpobj = nextElem()) != 0)
401  {
402  result = include_hist(tmpobj);
403  if (result == true)
404  {
405  return result;
406  }
407  }
408  }
409  return result;
410  }
411 
412  static void WriteListToDirectory(
413  TDirectory* dir, TSeqCollection* list, TFile* file, int level, int HanOutput_FileVersion)
414  {
415  TIter nextElem(list);
416  TObject* obj{};
417  TSeqCollection* tmpList{};
418 
419  while ((obj = nextElem()) != 0)
420  {
421  bool delete_when_done = false;
422  HanHistogramLink* hhl = dynamic_cast<HanHistogramLink*>(obj);
423  if (hhl != 0)
424  {
425  obj = hhl->getObject();
426  if (!obj) continue;
427  delete_when_done = true;
428  if (not setNameGeneral(obj, hhl->GetName()))
429  {
430  std::cerr << "HanOutput.cxx, WriteListToDirectory : setNameGeneral failed\n";
431  delete obj;
432  continue;
433  };
434  }
435  if (strncmp(obj->GetName(), "Reference", 9) == 0 || strncmp(obj->GetName(), "ResultObject", 12) == 0)
436  {
437  dir->WriteTObject(obj);
438  if (delete_when_done) delete obj;
439  continue;
440  }
441  tmpList = dynamic_cast<TSeqCollection*>(obj);
442  if (tmpList != 0)
443  {
444  // Find last directory name
445  std::vector<std::string> dirs;
446  std::string str;
447  boost::split(dirs, tmpList->GetName(), boost::is_any_of("/"));
448  if (!dirs.empty())
449  {
450  if (dirs.back().empty()) dirs.pop_back(); // empty item if trailing "/"
451  str = dirs.back();
452  }
453 
454  if (HanOutput_FileVersion == 2)
455  {
456  TString listname = tmpList->GetName();
457  if (listname == "Config" || listname == "Results")
458  {
460  //If yes - we should save them in the upper level
461  TIter nextElemConfRes(tmpList);
462  TObject* objInResultConfig;
463  while ((objInResultConfig = nextElemConfRes()) != 0)
464  {
465  if (include_hist(objInResultConfig))
466  {
467  //If the element consist of histograms
468  TSeqCollection* tmpList_ResConf{}; //it should be a collection type
469  tmpList_ResConf = dynamic_cast<TSeqCollection*>(objInResultConfig);
470  if ((tmpList_ResConf != 0) && (strncmp(tmpList_ResConf->GetName(), "TObjArray", 9) == 0))
471  { //Here is the special case. In case the object is an Array with the name "TObjArray", containing histograms,
472  //we should not only store it on the upper level, but also extract all the hists from it.
473  TIter nextEleminTObjArray(tmpList_ResConf);
474  TObject* objInTObjArray;
475  while ((objInTObjArray = nextEleminTObjArray()) != 0){
476  dir->WriteTObject(objInTObjArray);
477  }
478  tmpList->Remove(objInResultConfig); //This Array should not participate in JSON formation
479  }
480  else //If the element is histogram (or other Array, containing hist)- just store this obj in a higher level
481  {
482  dir->WriteTObject(objInResultConfig);
483  }
484  }
485  }
486  // For the rest of the content - Convert them to JSON
487  nlohmann::ordered_json j = to_JSON(tmpList);
488  // Then, save JSON to file as TObjString
489  // Convert json to string
490  std::string string = j.dump(4);
491  // Convert string to char *
492  char* cstr = new char[string.length() + 1];
493  std::strcpy(cstr, string.c_str());
494  // Write JSON to TObjString
495  TObjString string_to_tfile;
496  string_to_tfile.SetString(cstr);
497  dir->cd();
498  string_to_tfile.Write(listname);
499  delete[] cstr;
500  continue;
501  }
502  }
503 
504  TDirectory* daughter;
505  if (!dir->FindKey(str.c_str()))
506  {
507  daughter = dir->mkdir(str.c_str());
508  }
509  else
510  {
511  std::cout << "Failed to make " << str << " from " << tmpList->GetName() << std::endl;
512  continue;
513  }
514  WriteListToDirectory(daughter, tmpList, file, level - 1, HanOutput_FileVersion);
515  if (level > 0)
516  {
517  file->Write();
518  delete daughter;
519  }
520  }
521  else if ((strncmp(obj->ClassName(), "TH", 2) == 0) || (strncmp(obj->ClassName(), "TGraph", 6) == 0) ||
522  (strncmp(obj->ClassName(), "TProfile", 8) == 0) || (strncmp(obj->ClassName(), "TEfficiency", 11) == 0))
523  {
524  dir->GetMotherDir()->WriteTObject(obj);
525  }
526  else
527  {
528  // anything else put it in current directory
529  dir->WriteTObject(obj);
530  }
531  if (delete_when_done) delete obj;
532  }
533  }
534 
535  nlohmann::ordered_json to_JSON(TSeqCollection* tseq)
536  {
537  using json = nlohmann::ordered_json;
538  json j;
539 
540  TIter nextElem(tseq);
541  TObject* obj;
542  while ((obj = nextElem()) != 0)
543  {
544  // If Results (or Config) directory contatins hist - ignore it (do not write in to the file), it
545  // should to be writen to the outer level before
546  if ((strncmp(obj->ClassName(), "TH", 2) == 0) || (strncmp(obj->ClassName(), "TGraph", 6) == 0) ||
547  (strncmp(obj->ClassName(), "TProfile", 8) == 0) || (strncmp(obj->ClassName(), "TEfficiency", 11) == 0) ||
548  (strncmp(obj->GetName(), "Reference", 9) == 0))
549 
550  {
551  continue;
552  }
553  TSeqCollection* tmpList = dynamic_cast<TSeqCollection*>(obj);
554  if (tmpList != 0)
555  { // Nested object
556  // Write TSeqCollection_names as keys and content of them as a values
557  // Convert TString to string
558  std::string key_name_string(obj->GetName());
559  j.emplace(key_name_string, to_JSON(tmpList));
560  }
561  else
562  { // leaf
563  j = obj->GetName();
564  }
565  }
566  return j;
567  }
568 
570  {
571  flushResults();
572  m_file->SetBit(TFile::kDevNull);
573 
574  WriteListToDirectory(
575  m_file.get(), dynamic_cast<TSeqCollection*>(m_outputList->First()), m_file.get(), 4, HanOutput_FileVersion);
576 
577  if (HanOutput_FileVersion == 2)
578  {
579  m_file->cd("HanMetadata_");
580  TDirectory* version_dir = gDirectory->mkdir("File");
581  version_dir->cd();
582  TDirectory* version_subdir = gDirectory->mkdir("Version_name");
583  version_subdir->cd();
584  TObjString file_version;
585  file_version.Write("V.2.3");
586  }
587  m_file->Write();
588  m_file->Flush();
589  }
590 
592  {
593  m_config = config;
594  config->GetRegexList(m_regexlist);
595  }
596 
598  {
599  m_retainUnpubData = true;
600 
601  DQRegMap_t::const_iterator dqRegIter = m_dqRegs.begin();
602  DQRegMap_t::const_iterator dqRegEnd = m_dqRegs.end();
603  for (; dqRegIter != dqRegEnd; ++dqRegIter)
604  {
605  std::string regname = dqRegIter->first->getName();
606  m_unpublishedDQPars.erase(regname);
607  }
608 
609  DQParSet_t::const_iterator regexItr = m_regexlist.begin();
610  DQParSet_t::const_iterator regexEnd = m_regexlist.end();
611  for (; regexItr != regexEnd; ++regexItr)
612  {
613  m_unpublishedDQPars.erase(*regexItr);
614  }
615 
618 
619  DQParSet_t::const_iterator unpubIter = m_unpublishedDQPars.begin();
620  DQParSet_t::const_iterator unpubEnd = m_unpublishedDQPars.end();
621  for (; unpubIter != unpubEnd; ++unpubIter)
622  {
623  const std::string& name = *unpubIter;
624  // reduce verbosity
625  // std::cout << "--> Publishing missing object: \"" << name << "\"\n";
627  }
628 
629  m_retainUnpubData = false;
630  }
631 
632  // *********************************************************************
633  // Protected Methods
634  // *********************************************************************
635 
637  : m_result(new TTree("result", "Assessment Result")), m_status(new char[s_charArrSize])
638  {
639  m_result->SetDirectory(dir);
640  m_result->Branch("Status", m_status, "Status/C");
641  }
642 
643  HanOutput::Result::~Result() { delete[] m_status; }
644 
646  {
647  copyString(m_status, StatusToStr(result.status_));
648  m_result->Fill();
649  }
650 
651  void HanOutput::Result::write() { m_result->Write(); }
652 
653  void HanOutput::Result::copyString(char* to, const std::string& from)
654  {
655  int i = 0;
656  const char* f = from.c_str();
657  while (++i < s_charArrSize && (*to++ = *f++) != 0)
658  ;
659  if (i == s_charArrSize)
660  {
661  *to = 0;
662  }
663  }
664 
666  {
667  return (a->getName() < b->getName());
668  }
669 
670  // *********************************************************************
671  // Private Methods
672  // *********************************************************************
673 
675 
676 } // namespace dqi
677 
678 namespace
679 {
680 
681  std::string StatusToStr(const dqm_core::Result::Status& status)
682  {
683  switch (status)
684  {
686  return "Red";
687  case dqm_core::Result::Yellow:
688  return "Yellow";
690  return "Green";
691  case dqm_core::Result::Disabled:
692  return "Disabled";
694  default:
695  return "Undefined";
696  }
697  }
698 
699 } // namespace
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
beamspotman.r
def r
Definition: beamspotman.py:676
dqi::HanOutput::m_file
std::unique_ptr< TFile > m_file
Definition: HanOutput.h:100
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
dqi::HanOutput::Result::~Result
virtual ~Result()
Definition: HanOutput.cxx:643
Undefined
@ Undefined
Definition: MaterialTypes.h:8
get_generator_info.result
result
Definition: get_generator_info.py:21
dqi::HanOutput::setConfig
virtual void setConfig(HanConfig *config)
Definition: HanOutput.cxx:591
json
nlohmann::json json
Definition: HistogramDef.cxx:9
xAOD::char
char
Definition: TrigDecision_v1.cxx:38
python.CreateTierZeroArgdict.parname
parname
Definition: CreateTierZeroArgdict.py:194
CSV_InDetExporter.new
new
Definition: CSV_InDetExporter.py:145
dqi::HanOutput::deactivate
virtual void deactivate()
Definition: HanOutput.cxx:569
dqi::HanOutput::~HanOutput
virtual ~HanOutput()
Definition: HanOutput.cxx:110
dqi::HanConfig::GetAssessor
virtual const HanConfigAssessor * GetAssessor(std::string &groupName, std::string &name) const
dqi::HanOutput::m_dqResults
DQResultMap_t m_dqResults
Definition: HanOutput.h:107
dqi::HanOutput::publishResult
virtual void publishResult(const std::string &name, const dqm_core::Result &result)
Definition: HanOutput.cxx:153
dqi::HanOutput::setInput
virtual void setInput(TDirectory *input)
Definition: HanOutput.cxx:383
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
dqi::HanOutput::m_outputMap
DQOutputMap_t * m_outputMap
Definition: HanOutput.h:108
python.iconfTool.models.loaders.level
level
Definition: loaders.py:20
dqi::HanOutput::Result::fill
virtual void fill(const dqm_core::Result &result)
Definition: HanOutput.cxx:645
dqi::HanOutput::m_unpublishedDQPars
DQParSet_t m_unpublishedDQPars
Definition: HanOutput.h:103
m_file
std::unique_ptr< TFile > m_file
description: this is a custom writer for the old-school drivers that don't use an actual writer
Definition: OutputStreamData.cxx:52
PrepareReferenceFile.regex
regex
Definition: PrepareReferenceFile.py:43
dqi::HanConfigParMap
Definition: HanConfigParMap.h:18
dqi::HanConfigParMap::GetValue
virtual const char * GetValue() const
Definition: HanConfigParMap.cxx:77
JetTagCalibConfig.className
string className
Definition: JetTagCalibConfig.py:31
dqi::HanOutput::addListener
virtual void addListener(const std::string &name, dqm_core::OutputListener *listener)
Definition: HanOutput.cxx:121
dqi::HanOutput::Result::copyString
void copyString(char *to, const std::string &from)
Definition: HanOutput.cxx:653
keylayer_zslicemap.kl
kl
Definition: keylayer_zslicemap.py:109
ParseInputs.gDirectory
gDirectory
Definition: Final2012/ParseInputs.py:133
lumiFormat.i
int i
Definition: lumiFormat.py:92
dqi::HanOutput::Result::m_status
char * m_status
Definition: HanOutput.h:83
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
Result
ICscStripFitter::Result Result
Definition: CalibCscStripFitter.cxx:13
HanUtils.h
HanOutput.h
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
file
TFile * file
Definition: tile_monitor.h:29
test_pyathena.parent
parent
Definition: test_pyathena.py:15
Region
Region
Definition: TrigL2HitResidual.h:14
python.handimod.Green
int Green
Definition: handimod.py:524
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
dqi::HanOutput::publishMissingDQPars
virtual void publishMissingDQPars()
Definition: HanOutput.cxx:597
beamspotman.dir
string dir
Definition: beamspotman.py:623
python.handimod.extra
int extra
Definition: handimod.py:522
dqi::setNameGeneral
bool setNameGeneral(TObject *obj, const std::string &name)
Definition: HanOutput.cxx:44
dqi::HanOutput::m_dqPars
DQParMap_t m_dqPars
Definition: HanOutput.h:104
python.handimod.Red
Red
Definition: handimod.py:551
python.grid.Add
def Add(name)
Definition: grid.py:41
dqi::HanOutput::HanOutput_FileVersion
Version HanOutput_FileVersion
Definition: HanOutput.h:43
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
dqi::HanOutput::activate
virtual void activate()
Definition: HanOutput.cxx:381
dqi::HanOutput::Result::s_charArrSize
static const int s_charArrSize
Definition: HanOutput.h:84
dirs
std::map< std::string, int > dirs
list of directories to be explicitly included, together with corresponding depths of subdirectories
Definition: hcg.cxx:99
CxxUtils::to
CONT to(RANGE &&r)
Definition: ranges.h:32
dqi::HanOutput::m_dqRegs
DQRegMap_t m_dqRegs
Definition: HanOutput.h:105
dqi::HanConfig::GetReference
virtual TObject * GetReference(std::string &groupName, std::string &name)
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
dqi::HanOutput::RegionNameComp::operator()
bool operator()(const dqm_core::Region *a, const dqm_core::Region *b) const
Definition: HanOutput.cxx:665
a
TList * a
Definition: liststreamerinfos.cxx:10
h
Athena::Status
Status
Athena specific StatusCode values.
Definition: AthStatusCode.h:22
python.CaloScaleNoiseConfig.str
str
Definition: CaloScaleNoiseConfig.py:78
ref
const boost::regex ref(r_ef)
dqi::HanConfig
Definition: HanConfig.h:45
TH1
Definition: rootspy.cxx:268
dqi::HanOutput::m_retainUnpubData
bool m_retainUnpubData
Definition: HanOutput.h:101
zebraShift.outList
list outList
Definition: zebraShift.py:103
dqi::to_JSON
nlohmann::ordered_json to_JSON(TSeqCollection *tseq)
Converts sequense, containing TDirectories and strings to JSON file.
Definition: HanOutput.cxx:535
config
std::vector< std::string > config
Definition: fbtTestBasics.cxx:72
dqi::HanOutput::m_input
TDirectory * m_input
Definition: HanOutput.h:113
dqi::HanOutput::Result::m_result
std::unique_ptr< TTree > m_result
Definition: HanOutput.h:82
dqi::HanOutput::m_config
HanConfig * m_config
Definition: HanOutput.h:111
str
Definition: BTagTrackIpAccessor.cxx:11
merge.status
status
Definition: merge.py:17
dqi::HanOutput::DQOutputMap_t
std::map< std::string, TSeqCollection * > DQOutputMap_t
Definition: HanOutput.h:45
dqi::newTObjArray
TSeqCollection * newTObjArray(const char *name, TObject *obj=0, Int_t size=TCollection::kInitCapacity)
Definition: HanUtils.cxx:28
dqi::HanOutput::Result::Result
Result(TDirectory *dir)
Definition: HanOutput.cxx:636
python.PyAthena.obj
obj
Definition: PyAthena.py:135
dqi
Definition: CompositeAlgorithm.h:16
python.TrigTLAMonitorAlgorithm.parentName
parentName
Definition: TrigTLAMonitorAlgorithm.py:192
dqi::HanOutput::Result::write
virtual void write()
Definition: HanOutput.cxx:651
dqi::HanOutput::m_outputList
TSeqCollection * m_outputList
Definition: HanOutput.h:110
dqi::HanOutput::m_regexlist
DQParSet_t m_regexlist
Definition: HanOutput.h:112
dqi::HanOutput::HanOutput
HanOutput()
Definition: HanOutput.cxx:674
Trk::split
@ split
Definition: LayerMaterialProperties.h:38
HanConfig.h
dqi::HanOutput::flushResults
virtual void flushResults()
Definition: HanOutput.cxx:177
dqi::getObjKey
TKey * getObjKey(TDirectory *dir, const std::string &path)
Definition: HanUtils.cxx:37
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37