ATLAS Offline Software
HanOutput.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 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  if (resultList)//ensure resultList is not null before dereference
329  {
330  resultList = dynamic_cast<TSeqCollection*>(resultList->FindObject("Results"));
331  }
332  //check dynamic cast
333  if (resultList == nullptr)
334  {
335  std::cerr << "Warning: no result list found associated with '" << name << "'\n";
336  continue;
337  }
338 
339 
340  resultList->Add(newTObjArray("Status", new TObjString(StatusToStr(result.status_).c_str()), 1));
341 
342  // iterate through the tags
343  std::map<std::string, double>::const_iterator iter = result.tags_.begin();
344  for (; iter != result.tags_.end(); ++iter)
345  {
346  std::ostringstream tagval;
347  tagval << std::setprecision(4) << iter->second;
348  resultList->Add(newTObjArray(iter->first.c_str(), new TObjString(tagval.str().c_str()), 1));
349  }
350 
351  // if there's an output object from the algorithm, include a clone
352  TObject* resultobj = result.getObject();
353  if (resultobj != 0)
354  {
355  TObject* resultobjclone = resultobj->Clone();
356  if (setNameGeneral(resultobj, "ResultObject"))
357  {
358  resultList->Add(resultobjclone);
359  }
360  else
361  {
362  std::cerr << "Discarding result object " << result.getObject()->GetName() << std::endl;
363  delete resultobjclone;
364  }
365  }
366 
367  if (m_config != 0)
368  {
370  if (ref)
371  {
372  if (setNameGeneral(ref, "Reference"))
373  {
374  resultList->Add(ref);
375  }
376  else
377  {
378  std::cerr << "Discarding reference object " << ref->GetName() << std::endl;
379  }
380  }
381  }
382  }
383  }
384 
385  void HanOutput::activate() { gROOT->cd(); }
386 
387  void HanOutput::setInput(TDirectory* input) { m_input = input; }
388 
389  static bool include_hist(TObject* obj) { //Check if object a hist or include hist
390  bool result = false;
391 
392  if ((strncmp(obj->ClassName(), "TH", 2) == 0) || (strncmp(obj->ClassName(), "TGraph", 6) == 0) ||
393  (strncmp(obj->ClassName(), "TProfile", 8) == 0) || (strncmp(obj->ClassName(), "TEfficiency", 11) == 0))
394  {
395  return true;
396  }
397 
398  TSeqCollection* tmpList{};
399  tmpList = dynamic_cast<TSeqCollection*>(obj);
400  if (tmpList != 0)
401  { //If it is collection - check, that it contains histograms or not
402  TIter nextElem(tmpList);
403  TObject* tmpobj{};
404  while ((tmpobj = nextElem()) != 0)
405  {
406  result = include_hist(tmpobj);
407  if (result == true)
408  {
409  return result;
410  }
411  }
412  }
413  return result;
414  }
415 
416  static void WriteListToDirectory(
417  TDirectory* dir, TSeqCollection* list, TFile* file, int level, int HanOutput_FileVersion)
418  {
419  TIter nextElem(list);
420  TObject* obj{};
421  TSeqCollection* tmpList{};
422 
423  while ((obj = nextElem()) != 0)
424  {
425  bool delete_when_done = false;
426  HanHistogramLink* hhl = dynamic_cast<HanHistogramLink*>(obj);
427  if (hhl != 0)
428  {
429  obj = hhl->getObject();
430  if (!obj) continue;
431  delete_when_done = true;
432  if (not setNameGeneral(obj, hhl->GetName()))
433  {
434  std::cerr << "HanOutput.cxx, WriteListToDirectory : setNameGeneral failed\n";
435  delete obj;
436  continue;
437  };
438  }
439  if (strncmp(obj->GetName(), "Reference", 9) == 0 || strncmp(obj->GetName(), "ResultObject", 12) == 0)
440  {
441  dir->WriteTObject(obj);
442  if (delete_when_done) delete obj;
443  continue;
444  }
445  tmpList = dynamic_cast<TSeqCollection*>(obj);
446  if (tmpList != 0)
447  {
448  // Find last directory name
449  std::vector<std::string> dirs;
450  std::string str;
451  boost::split(dirs, tmpList->GetName(), boost::is_any_of("/"));
452  if (!dirs.empty())
453  {
454  if (dirs.back().empty()) dirs.pop_back(); // empty item if trailing "/"
455  str = dirs.back();
456  }
457 
458  if (HanOutput_FileVersion == 2)
459  {
460  TString listname = tmpList->GetName();
461  if (listname == "Config" || listname == "Results")
462  {
464  //If yes - we should save them in the upper level
465  TIter nextElemConfRes(tmpList);
466  TObject* objInResultConfig;
467  while ((objInResultConfig = nextElemConfRes()) != 0)
468  {
469  if (include_hist(objInResultConfig))
470  {
471  //If the element consist of histograms
472  TSeqCollection* tmpList_ResConf{}; //it should be a collection type
473  tmpList_ResConf = dynamic_cast<TSeqCollection*>(objInResultConfig);
474  if ((tmpList_ResConf != 0) && (strncmp(tmpList_ResConf->GetName(), "TObjArray", 9) == 0))
475  { //Here is the special case. In case the object is an Array with the name "TObjArray", containing histograms,
476  //we should not only store it on the upper level, but also extract all the hists from it.
477  TIter nextEleminTObjArray(tmpList_ResConf);
478  TObject* objInTObjArray;
479  while ((objInTObjArray = nextEleminTObjArray()) != 0){
480  dir->WriteTObject(objInTObjArray);
481  }
482  tmpList->Remove(objInResultConfig); //This Array should not participate in JSON formation
483  }
484  else //If the element is histogram (or other Array, containing hist)- just store this obj in a higher level
485  {
486  dir->WriteTObject(objInResultConfig);
487  }
488  }
489  }
490  // For the rest of the content - Convert them to JSON
491  nlohmann::ordered_json j = to_JSON(tmpList);
492  // Then, save JSON to file as TObjString
493  // Convert json to string
494  std::string string = j.dump(4);
495  // Convert string to char *
496  char* cstr = new char[string.length() + 1];
497  std::strcpy(cstr, string.c_str());
498  // Write JSON to TObjString
499  TObjString string_to_tfile;
500  string_to_tfile.SetString(cstr);
501  dir->cd();
502  string_to_tfile.Write(listname);
503  delete[] cstr;
504  continue;
505  }
506  }
507 
508  TDirectory* daughter;
509  if (!dir->FindKey(str.c_str()))
510  {
511  daughter = dir->mkdir(str.c_str());
512  }
513  else
514  {
515  std::cout << "Failed to make " << str << " from " << tmpList->GetName() << std::endl;
516  continue;
517  }
518  WriteListToDirectory(daughter, tmpList, file, level - 1, HanOutput_FileVersion);
519  if (level > 0)
520  {
521  file->Write();
522  delete daughter;
523  }
524  }
525  else if ((strncmp(obj->ClassName(), "TH", 2) == 0) || (strncmp(obj->ClassName(), "TGraph", 6) == 0) ||
526  (strncmp(obj->ClassName(), "TProfile", 8) == 0) || (strncmp(obj->ClassName(), "TEfficiency", 11) == 0))
527  {
528  dir->GetMotherDir()->WriteTObject(obj);
529  }
530  else
531  {
532  // anything else put it in current directory
533  dir->WriteTObject(obj);
534  }
535  if (delete_when_done) delete obj;
536  }
537  }
538 
539  nlohmann::ordered_json to_JSON(TSeqCollection* tseq)
540  {
541  using json = nlohmann::ordered_json;
542  json j;
543 
544  TIter nextElem(tseq);
545  TObject* obj;
546  while ((obj = nextElem()) != 0)
547  {
548  // If Results (or Config) directory contatins hist - ignore it (do not write in to the file), it
549  // should to be writen to the outer level before
550  if ((strncmp(obj->ClassName(), "TH", 2) == 0) || (strncmp(obj->ClassName(), "TGraph", 6) == 0) ||
551  (strncmp(obj->ClassName(), "TProfile", 8) == 0) || (strncmp(obj->ClassName(), "TEfficiency", 11) == 0) ||
552  (strncmp(obj->GetName(), "Reference", 9) == 0))
553 
554  {
555  continue;
556  }
557  TSeqCollection* tmpList = dynamic_cast<TSeqCollection*>(obj);
558  if (tmpList != 0)
559  { // Nested object
560  // Write TSeqCollection_names as keys and content of them as a values
561  // Convert TString to string
562  std::string key_name_string(obj->GetName());
563  j.emplace(key_name_string, to_JSON(tmpList));
564  }
565  else
566  { // leaf
567  j = obj->GetName();
568  }
569  }
570  return j;
571  }
572 
574  {
575  flushResults();
576  m_file->SetBit(TFile::kDevNull);
577 
578  WriteListToDirectory(
579  m_file.get(), dynamic_cast<TSeqCollection*>(m_outputList->First()), m_file.get(), 4, HanOutput_FileVersion);
580 
581  if (HanOutput_FileVersion == 2)
582  {
583  m_file->cd("HanMetadata_");
584  TDirectory* version_dir = gDirectory->mkdir("File");
585  version_dir->cd();
586  TDirectory* version_subdir = gDirectory->mkdir("Version_name");
587  version_subdir->cd();
588  TObjString file_version;
589  file_version.Write("V.2.3");
590  }
591  m_file->Write();
592  m_file->Flush();
593  }
594 
596  {
597  m_config = config;
598  config->GetRegexList(m_regexlist);
599  }
600 
602  {
603  m_retainUnpubData = true;
604 
605  DQRegMap_t::const_iterator dqRegIter = m_dqRegs.begin();
606  DQRegMap_t::const_iterator dqRegEnd = m_dqRegs.end();
607  for (; dqRegIter != dqRegEnd; ++dqRegIter)
608  {
609  std::string regname = dqRegIter->first->getName();
610  m_unpublishedDQPars.erase(regname);
611  }
612 
613  DQParSet_t::const_iterator regexItr = m_regexlist.begin();
614  DQParSet_t::const_iterator regexEnd = m_regexlist.end();
615  for (; regexItr != regexEnd; ++regexItr)
616  {
617  m_unpublishedDQPars.erase(*regexItr);
618  }
619 
622 
623  DQParSet_t::const_iterator unpubIter = m_unpublishedDQPars.begin();
624  DQParSet_t::const_iterator unpubEnd = m_unpublishedDQPars.end();
625  for (; unpubIter != unpubEnd; ++unpubIter)
626  {
627  const std::string& name = *unpubIter;
628  // reduce verbosity
629  // std::cout << "--> Publishing missing object: \"" << name << "\"\n";
631  }
632 
633  m_retainUnpubData = false;
634  }
635 
636  // *********************************************************************
637  // Protected Methods
638  // *********************************************************************
639 
641  : m_result(new TTree("result", "Assessment Result")), m_status(new char[s_charArrSize])
642  {
643  m_result->SetDirectory(dir);
644  m_result->Branch("Status", m_status, "Status/C");
645  }
646 
647  HanOutput::Result::~Result() { delete[] m_status; }
648 
650  {
651  copyString(m_status, StatusToStr(result.status_));
652  m_result->Fill();
653  }
654 
655  void HanOutput::Result::write() { m_result->Write(); }
656 
657  void HanOutput::Result::copyString(char* to, const std::string& from)
658  {
659  int i = 0;
660  const char* f = from.c_str();
661  while (++i < s_charArrSize && (*to++ = *f++) != 0)
662  ;
663  if (i == s_charArrSize)
664  {
665  *to = 0;
666  }
667  }
668 
670  {
671  return (a->getName() < b->getName());
672  }
673 
674  // *********************************************************************
675  // Private Methods
676  // *********************************************************************
677 
679 
680 } // namespace dqi
681 
682 namespace
683 {
684 
685  std::string StatusToStr(const dqm_core::Result::Status& status)
686  {
687  switch (status)
688  {
690  return "Red";
691  case dqm_core::Result::Yellow:
692  return "Yellow";
694  return "Green";
695  case dqm_core::Result::Disabled:
696  return "Disabled";
698  default:
699  return "Undefined";
700  }
701  }
702 
703 } // namespace
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
beamspotman.r
def r
Definition: beamspotman.py:676
dqi::HanOutput::m_file
std::unique_ptr< TFile > m_file
Definition: HanOutput.h:100
dqi::HanOutput::Result::~Result
virtual ~Result()
Definition: HanOutput.cxx:647
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:595
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:573
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:387
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:649
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:36
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:657
keylayer_zslicemap.kl
kl
Definition: keylayer_zslicemap.py:109
ParseInputs.gDirectory
gDirectory
Definition: Final2012/ParseInputs.py:133
lumiFormat.i
int i
Definition: lumiFormat.py:85
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
hist_file_dump.f
f
Definition: hist_file_dump.py:135
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
dqi::HanOutput::publishMissingDQPars
virtual void publishMissingDQPars()
Definition: HanOutput.cxx:601
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
dqi::HanOutput::HanOutput_FileVersion
Version HanOutput_FileVersion
Definition: HanOutput.h:43
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
dqi::HanOutput::activate
virtual void activate()
Definition: HanOutput.cxx:385
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:39
dqi::HanOutput::m_dqRegs
DQRegMap_t m_dqRegs
Definition: HanOutput.h:105
dqi::HanConfig::GetReference
virtual TObject * GetReference(std::string &groupName, std::string &name)
dqi::HanOutput::RegionNameComp::operator()
bool operator()(const dqm_core::Region *a, const dqm_core::Region *b) const
Definition: HanOutput.cxx:669
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:48
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:539
config
std::vector< std::string > config
Definition: fbtTestBasics.cxx:74
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:27
dqi::HanOutput::Result::Result
Result(TDirectory *dir)
Definition: HanOutput.cxx:640
python.PyAthena.obj
obj
Definition: PyAthena.py:132
dqi
Definition: CompositeAlgorithm.h:16
python.TrigTLAMonitorAlgorithm.parentName
parentName
Definition: TrigTLAMonitorAlgorithm.py:192
dqi::HanOutput::Result::write
virtual void write()
Definition: HanOutput.cxx:655
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:678
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:36
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37