ATLAS Offline Software
Classes | Public Types | Public Member Functions | Public Attributes | Protected Types | Protected Attributes | Private Member Functions | List of all members
dqi::HanOutput Class Reference

#include <HanOutput.h>

Inheritance diagram for dqi::HanOutput:
Collaboration diagram for dqi::HanOutput:

Classes

class  RegionNameComp
 
class  Result
 

Public Types

enum  Version { V1 = 1, V2 = 2 }
 
typedef std::map< std::string, TSeqCollection * > DQOutputMap_t
 

Public Member Functions

 HanOutput (const std::string &rootFileName, DQOutputMap_t *outputMap, TSeqCollection *outputList)
 
virtual ~HanOutput ()
 
virtual void addListener (const std::string &name, dqm_core::OutputListener *listener)
 
virtual void addListener (const dqm_core::Parameter &parameter, dqm_core::OutputListener *listener)
 
virtual void publishResult (const std::string &name, const dqm_core::Result &result)
 
virtual void flushResults ()
 
virtual void activate ()
 
virtual void deactivate ()
 
virtual void setConfig (HanConfig *config)
 
virtual void publishMissingDQPars ()
 
virtual void setInput (TDirectory *input)
 

Public Attributes

Version HanOutput_FileVersion = V2
 

Protected Types

typedef std::map< std::string, dqm_core::Region * > DQParMap_t
 
typedef std::multimap< dqm_core::Region *, std::string, RegionNameCompDQRegMap_t
 
typedef std::map< dqm_core::Region *, int, RegionNameCompDQRegCount_t
 
typedef std::map< std::string, dqm_core::Result * > DQResultMap_t
 
typedef std::set< std::string > DQParSet_t
 

Protected Attributes

std::string m_fileName
 
std::unique_ptr< TFile > m_file
 
bool m_retainUnpubData
 
DQParSet_t m_unpublishedDQPars
 
DQParMap_t m_dqPars
 
DQRegMap_t m_dqRegs
 
DQRegCount_t m_dqRegCounts
 
DQResultMap_t m_dqResults
 
DQOutputMap_tm_outputMap
 
TSeqCollection * m_outputList
 
HanConfigm_config
 
DQParSet_t m_regexlist
 
TDirectory * m_input
 

Private Member Functions

 HanOutput ()
 

Detailed Description

Definition at line 38 of file HanOutput.h.

Member Typedef Documentation

◆ DQOutputMap_t

typedef std::map<std::string, TSeqCollection*> dqi::HanOutput::DQOutputMap_t

Definition at line 45 of file HanOutput.h.

◆ DQParMap_t

typedef std::map<std::string, dqm_core::Region*> dqi::HanOutput::DQParMap_t
protected

Definition at line 93 of file HanOutput.h.

◆ DQParSet_t

typedef std::set<std::string> dqi::HanOutput::DQParSet_t
protected

Definition at line 97 of file HanOutput.h.

◆ DQRegCount_t

typedef std::map<dqm_core::Region*, int, RegionNameComp> dqi::HanOutput::DQRegCount_t
protected

Definition at line 95 of file HanOutput.h.

◆ DQRegMap_t

typedef std::multimap<dqm_core::Region*, std::string, RegionNameComp> dqi::HanOutput::DQRegMap_t
protected

Definition at line 94 of file HanOutput.h.

◆ DQResultMap_t

typedef std::map<std::string, dqm_core::Result*> dqi::HanOutput::DQResultMap_t
protected

Definition at line 96 of file HanOutput.h.

Member Enumeration Documentation

◆ Version

Enumerator
V1 
V2 

Definition at line 41 of file HanOutput.h.

41 { V1 = 1, V2 = 2 };

Constructor & Destructor Documentation

◆ HanOutput() [1/2]

dqi::HanOutput::HanOutput ( const std::string &  rootFileName,
DQOutputMap_t outputMap,
TSeqCollection *  outputList 
)

Definition at line 95 of file HanOutput.cxx.

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  }

◆ ~HanOutput()

dqi::HanOutput::~HanOutput ( )
virtual

Definition at line 110 of file HanOutput.cxx.

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  }

◆ HanOutput() [2/2]

dqi::HanOutput::HanOutput ( )
private

Definition at line 674 of file HanOutput.cxx.

674 : m_retainUnpubData(false), m_outputMap(0), m_outputList(0), m_config(0), m_input(0) {}

Member Function Documentation

◆ activate()

void dqi::HanOutput::activate ( )
virtual

Definition at line 381 of file HanOutput.cxx.

381 { gROOT->cd(); }

◆ addListener() [1/2]

void dqi::HanOutput::addListener ( const dqm_core::Parameter &  parameter,
dqm_core::OutputListener *  listener 
)
virtual

Definition at line 148 of file HanOutput.cxx.

149  {
150  addListener(parameter.getName(), listener);
151  }

◆ addListener() [2/2]

void dqi::HanOutput::addListener ( const std::string &  name,
dqm_core::OutputListener *  listener 
)
virtual

Definition at line 121 of file HanOutput.cxx.

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  }

◆ deactivate()

void dqi::HanOutput::deactivate ( )
virtual

Definition at line 569 of file HanOutput.cxx.

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  }

◆ flushResults()

void dqi::HanOutput::flushResults ( )
virtual

Definition at line 177 of file HanOutput.cxx.

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  }

◆ publishMissingDQPars()

void dqi::HanOutput::publishMissingDQPars ( )
virtual

Definition at line 597 of file HanOutput.cxx.

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  }

◆ publishResult()

void dqi::HanOutput::publishResult ( const std::string &  name,
const dqm_core::Result result 
)
virtual

Definition at line 153 of file HanOutput.cxx.

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  }

◆ setConfig()

void dqi::HanOutput::setConfig ( HanConfig config)
virtual

Definition at line 591 of file HanOutput.cxx.

592  {
593  m_config = config;
594  config->GetRegexList(m_regexlist);
595  }

◆ setInput()

void dqi::HanOutput::setInput ( TDirectory *  input)
virtual

Definition at line 383 of file HanOutput.cxx.

383 { m_input = input; }

Member Data Documentation

◆ HanOutput_FileVersion

Version dqi::HanOutput::HanOutput_FileVersion = V2

Definition at line 43 of file HanOutput.h.

◆ m_config

HanConfig* dqi::HanOutput::m_config
protected

Definition at line 111 of file HanOutput.h.

◆ m_dqPars

DQParMap_t dqi::HanOutput::m_dqPars
protected

Definition at line 104 of file HanOutput.h.

◆ m_dqRegCounts

DQRegCount_t dqi::HanOutput::m_dqRegCounts
protected

Definition at line 106 of file HanOutput.h.

◆ m_dqRegs

DQRegMap_t dqi::HanOutput::m_dqRegs
protected

Definition at line 105 of file HanOutput.h.

◆ m_dqResults

DQResultMap_t dqi::HanOutput::m_dqResults
protected

Definition at line 107 of file HanOutput.h.

◆ m_file

std::unique_ptr<TFile> dqi::HanOutput::m_file
protected

Definition at line 100 of file HanOutput.h.

◆ m_fileName

std::string dqi::HanOutput::m_fileName
protected

Definition at line 99 of file HanOutput.h.

◆ m_input

TDirectory* dqi::HanOutput::m_input
protected

Definition at line 113 of file HanOutput.h.

◆ m_outputList

TSeqCollection* dqi::HanOutput::m_outputList
protected

Definition at line 110 of file HanOutput.h.

◆ m_outputMap

DQOutputMap_t* dqi::HanOutput::m_outputMap
protected

Definition at line 108 of file HanOutput.h.

◆ m_regexlist

DQParSet_t dqi::HanOutput::m_regexlist
protected

Definition at line 112 of file HanOutput.h.

◆ m_retainUnpubData

bool dqi::HanOutput::m_retainUnpubData
protected

Definition at line 101 of file HanOutput.h.

◆ m_unpublishedDQPars

DQParSet_t dqi::HanOutput::m_unpublishedDQPars
protected

Definition at line 103 of file HanOutput.h.


The documentation for this class was generated from the following files:
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
Undefined
@ Undefined
Definition: MaterialTypes.h:8
get_generator_info.result
result
Definition: get_generator_info.py:21
python.CreateTierZeroArgdict.parname
parname
Definition: CreateTierZeroArgdict.py:194
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
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
dqi::HanOutput::m_outputMap
DQOutputMap_t * m_outputMap
Definition: HanOutput.h:108
dqi::HanOutput::m_unpublishedDQPars
DQParSet_t m_unpublishedDQPars
Definition: HanOutput.h:103
PrepareReferenceFile.regex
regex
Definition: PrepareReferenceFile.py:43
JetTagCalibConfig.className
string className
Definition: JetTagCalibConfig.py:31
dqi::HanOutput::V2
@ V2
Definition: HanOutput.h:41
dqi::HanOutput::addListener
virtual void addListener(const std::string &name, dqm_core::OutputListener *listener)
Definition: HanOutput.cxx:121
ParseInputs.gDirectory
gDirectory
Definition: Final2012/ParseInputs.py:133
lumiFormat.i
int i
Definition: lumiFormat.py:92
Result
ICscStripFitter::Result Result
Definition: CalibCscStripFitter.cxx:13
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
test_pyathena.parent
parent
Definition: test_pyathena.py:15
Region
Region
Definition: TrigL2HitResidual.h:14
dqi::HanOutput::m_fileName
std::string m_fileName
Definition: HanOutput.h:99
dqi::HanOutput::V1
@ V1
Definition: HanOutput.h:41
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.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
dqi::HanOutput::m_dqRegs
DQRegMap_t m_dqRegs
Definition: HanOutput.h:105
dqi::HanConfig::GetReference
virtual TObject * GetReference(std::string &groupName, std::string &name)
a
TList * a
Definition: liststreamerinfos.cxx:10
Athena::Status
Status
Athena specific StatusCode values.
Definition: AthStatusCode.h:22
ref
const boost::regex ref(r_ef)
dqi::HanOutput::m_retainUnpubData
bool m_retainUnpubData
Definition: HanOutput.h:101
zebraShift.outList
list outList
Definition: zebraShift.py:103
config
std::vector< std::string > config
Definition: fbtTestBasics.cxx:72
dqi::HanOutput::m_input
TDirectory * m_input
Definition: HanOutput.h:113
dqi::HanOutput::m_config
HanConfig * m_config
Definition: HanOutput.h:111
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
python.TrigTLAMonitorAlgorithm.parentName
parentName
Definition: TrigTLAMonitorAlgorithm.py:192
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::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