ATLAS Offline Software
Classes | Public Member Functions | Private Member Functions | Private Attributes | List of all members
histCollection Class Reference
Collaboration diagram for histCollection:

Classes

struct  histDir_t
 
class  histPerDir_t
 

Public Member Functions

 histCollection (bool debug=false)
 
void addDirectory (TDirectory *dir, const std::string &dirName)
 
size_t size ()
 
void addFile (TFile *in)
 
void print ()
 
void write (TFile *out)
 
void addExclusion (const std::string &dir)
 

Private Member Functions

bool isExcluded (const std::string &dir)
 

Private Attributes

std::map< std::string, histDir_tm_data
 
bool m_dbg
 
std::vector< std::string > m_exclusion
 

Detailed Description

Definition at line 56 of file LArQuickHistMerge.cxx.

Constructor & Destructor Documentation

◆ histCollection()

histCollection::histCollection ( bool  debug = false)
inlineexplicit

Definition at line 60 of file LArQuickHistMerge.cxx.

60 : m_dbg(debug) {};

Member Function Documentation

◆ addDirectory()

void histCollection::addDirectory ( TDirectory *  dir,
const std::string &  dirName 
)

Definition at line 301 of file LArQuickHistMerge.cxx.

301  {
302 
303  TIter next( dir->GetListOfKeys() );
304  TKey* key;
305  while((key=(TKey*)next())) {
306  const char* name=key->GetName();
307  const char* classname=key->GetClassName();
308  if (m_dbg) std::cout << "Found name " << name << ", classname=" << classname << std::endl;
309 
310  const std::string newName=dirName+"/"+name;
311 
312  if (this->isExcluded(newName)) {
313  std::cout << "Path " << newName << " excluded" << std::endl;
314  return;
315  }
316 
317 
318  if (!strncmp(classname,"TH1",3) || !strncmp(classname,"TH2",3) || !strncmp(classname,"TProfile",8)) {
320  if (mIt==m_data.end()) { // New top-level directory
321  TTree* md=(TTree*)dir->Get("metadata");
322  if (!md) std::cout << "ERROR: Did not find metadata tree in directroy " << dirName << std::endl;
323  mIt=m_data.insert(std::make_pair(dirName,histDir_t(md))).first;
324  }
325  histPerDir_t histo(name,key->ReadObj(),mIt->second.md,m_dbg);
326  mIt->second.histos.push_back(histo);
327  }
328  else if (!strncmp(classname,"TDirectory",10)) {
329  TObject* obj = key->ReadObj();
330  TDirectory* subdir = dynamic_cast<TDirectory*>( obj );
331  if (subdir) {
332  this->addDirectory(subdir,newName);
333  }
334  }
335  else if (!strcmp(classname,"TTree") && (!strcmp(name,"metadata"))) {
336  //std::cout << "Found Metadata tree" << std::endl;
337  }
338  else {
339  std::cout << "Ignored objects '" << name << "' of type "<< classname << std::endl;
340  }
341  }
342  return;
343 }

◆ addExclusion()

void histCollection::addExclusion ( const std::string &  dir)

Definition at line 94 of file LArQuickHistMerge.cxx.

94  {
95  m_exclusion.push_back(dir);
96  return;
97 }

◆ addFile()

void histCollection::addFile ( TFile *  in)

Definition at line 346 of file LArQuickHistMerge.cxx.

346  {
347  std::map<std::string,histDir_t>::const_iterator it=m_data.begin();
348  std::map<std::string,histDir_t>::const_iterator it_e=m_data.end();
349  for(;it!=it_e;++it) {
350  const std::string& dirName=it->first;
351  const histDir_t& hd=it->second;
352  std::vector<histPerDir_t>::const_iterator it1=hd.histos.begin();
353  std::vector<histPerDir_t>::const_iterator it1_e=hd.histos.end();
354  for (;it1!=it1_e;++it1) {
355  const std::string fullName=dirName+"/"+it1->name;
356  if (!it1->obj) {
357  //std::cout << "Object " << fullName << " not properly set up. Not merged." << std::endl;
358  continue;
359  }
360  TObject* obj=in->Get(fullName.c_str());
361  if (!obj) {
362  std::cout << "ERROR: Could not access path " << fullName <<" in file " << in->GetName() << std::endl;
363  }
364  else
365  (*it1->mergeMethod)(it1->obj,obj);
366  }//End loop over histograms in directory
367  }//End loop over directory names
368  return;
369 }

◆ isExcluded()

bool histCollection::isExcluded ( const std::string &  dir)
private

Definition at line 99 of file LArQuickHistMerge.cxx.

99  {
100 
101  const size_t firstSlash=dir.find('/',1);
102  if (firstSlash==std::string::npos) return false;
103 
104  std::vector<std::string>::const_iterator it=m_exclusion.begin();
105  std::vector<std::string>::const_iterator it_e=m_exclusion.end();
106  for(;it!=it_e;++it) {
107  const std::string& excl=*it;
108  const size_t s=excl.size();
109  //std::cout << "Comparing " << dir << " (index "<< firstSlash <<") with " << excl << std::endl;
110  if (dir.compare(firstSlash,s,excl)==0) {
111  return true;
112  }
113  }
114  return false;
115 }

◆ print()

void histCollection::print ( )

Definition at line 117 of file LArQuickHistMerge.cxx.

117  {
118  std::map<std::string,histDir_t>::const_iterator it=m_data.begin();
119  std::map<std::string,histDir_t>::const_iterator it_e=m_data.end();
120  for(;it!=it_e;++it) {
121  std::cout << "Dir: " << it->first << std::endl;
122  const histDir_t& hd=it->second;
123  std::vector<histPerDir_t>::const_iterator it1=hd.histos.begin();
124  std::vector<histPerDir_t>::const_iterator it1_e=hd.histos.end();
125  for (;it1!=it1_e;++it1)
126  std::cout << "\t" << it1->name << std::endl;
127  }
128 
129  std::cout << "\nExclusion List: " << std::endl;
130  std::vector<std::string>::const_iterator sit=m_exclusion.begin();
131  std::vector<std::string>::const_iterator sit_e=m_exclusion.end();
132  for(;sit!=sit_e;++sit)
133  std::cout << "\t" << *sit << std::endl;
134 
135  return;
136 }

◆ size()

size_t histCollection::size ( )
inline

Definition at line 62 of file LArQuickHistMerge.cxx.

62 {return m_data.size();};

◆ write()

void histCollection::write ( TFile *  out)

Definition at line 373 of file LArQuickHistMerge.cxx.

373  {
374  unsigned nWritten=0;
375  unsigned nIgnored=0;
376  TDirectory* histDir=nullptr;
377  std::string lastDir;
378  std::map<std::string,histDir_t>::const_iterator it=m_data.begin();
379  std::map<std::string,histDir_t>::const_iterator it_e=m_data.end();
380  for(;it!=it_e;++it) {
381  const std::string fulldir=it->first + "/";
382  //Create dirs if necessary
383  std::string::size_type j=0,j1=0;
384  while (j1!=std::string::npos) {
385  do {
386  j=j1+1;
387  j1=fulldir.find('/',j);
388  //std::cout << "Inner loop " << fulldir.substr(0,j1) << " << ==? " << lastDir.substr(0,j1) << std::endl;
389  }
390  while(j1!=std::string::npos && !fulldir.compare(0,j1,lastDir,0,j1));
391  const std::string currDirAtLevel(fulldir.substr(j,j1-j));
392  const std::string currFullDir(fulldir.substr(0,j1));
393  const std::string currBaseDir(fulldir.substr(0,j));
394  //std::cout << "Working on dir " << fulldir << " [" << currFullDir << " " << currBaseDir << " " << currDirAtLevel << std::endl;
395  lastDir=currFullDir;
396  out->cd(currBaseDir.c_str());
397  gDirectory->mkdir(currDirAtLevel.c_str());
398  }//End outer while loop - full directory created
399  //std::cout << "Done creating " << fulldir << std::endl;
400  out->cd(fulldir.c_str());
401  it->second.md->SetDirectory(histDir);
402  it->second.md->Write(nullptr,TObject::kOverwrite);
403  std::vector<histPerDir_t>::const_iterator ith=it->second.histos.begin();
404  std::vector<histPerDir_t>::const_iterator ith_e=it->second.histos.end();
405  for (;ith!=ith_e;++ith) {
406  if (ith->obj) {
407  ith->obj->Write();
408  std::cout << "Writing " << ith->name << " to dir " << fulldir << std::endl;
409  ++nWritten;
410  }
411  else {
412  std::cout << "NOT writing " << ith->name << ". Invalid." << std::endl;
413  ++nIgnored;
414  }
415  }//End loop over histograms in one directory
416  }//End loop over directories;
417  std::cout << "Wrote " << nWritten << " histograms to output file.";
418  if (nIgnored)
419  std::cout << " Omitting " << nIgnored << " histograms." << std::endl;
420  else
421  std::cout << std::endl;
422 
423  return;
424 }

Member Data Documentation

◆ m_data

std::map<std::string,histDir_t> histCollection::m_data
private

Definition at line 87 of file LArQuickHistMerge.cxx.

◆ m_dbg

bool histCollection::m_dbg
private

Definition at line 88 of file LArQuickHistMerge.cxx.

◆ m_exclusion

std::vector<std::string> histCollection::m_exclusion
private

Definition at line 89 of file LArQuickHistMerge.cxx.


The documentation for this class was generated from the following file:
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
fitman.nWritten
int nWritten
Definition: fitman.py:420
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
WriteCellNoiseToCool.fullName
fullName
Definition: WriteCellNoiseToCool.py:461
skel.it
it
Definition: skel.GENtoEVGEN.py:423
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
histCollection::m_exclusion
std::vector< std::string > m_exclusion
Definition: LArQuickHistMerge.cxx:89
doubleTestComp.j1
j1
Definition: doubleTestComp.py:21
fillPileUpNoiseLumi.next
next
Definition: fillPileUpNoiseLumi.py:52
ParseInputs.gDirectory
gDirectory
Definition: Final2012/ParseInputs.py:133
DetDescrDictionaryDict::it1
std::vector< HWIdentifier >::iterator it1
Definition: DetDescrDictionaryDict.h:17
histCollection::m_dbg
bool m_dbg
Definition: LArQuickHistMerge.cxx:88
histCollection::m_data
std::map< std::string, histDir_t > m_data
Definition: LArQuickHistMerge.cxx:87
histCollection::isExcluded
bool isExcluded(const std::string &dir)
Definition: LArQuickHistMerge.cxx:99
beamspotman.dir
string dir
Definition: beamspotman.py:623
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
debug
const bool debug
Definition: MakeUncertaintyPlots.cxx:53
MakeNewFileFromOldAndSubstitution.newName
dictionary newName
Definition: ICHEP2016/MakeNewFileFromOldAndSubstitution.py:95
DeMoScan.first
bool first
Definition: DeMoScan.py:534
python.envutil.fulldir
fulldir
Definition: envutil.py:172
python.LumiCalcRecover.subdir
subdir
Definition: LumiCalcRecover.py:25
plotBeamSpotCompare.histo
histo
Definition: plotBeamSpotCompare.py:415
python.PyAthena.obj
obj
Definition: PyAthena.py:135
histCollection::addDirectory
void addDirectory(TDirectory *dir, const std::string &dirName)
Definition: LArQuickHistMerge.cxx:301
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37