35 std::string
dbg (
const Sample& obj,
unsigned verbosity)
38 result +=
"Sample:name=" + obj.name();
39 if (
dynamic_cast<const SampleGrid*
>(&obj))
41 if (verbosity % 10 > 0)
48 if (verbosity % 10 > 0)
49 result +=
",tags=" +
dbg (obj.tags(), verbosity / 10);
50 if (verbosity % 10 > 1)
58 for (std::size_t iter = 0, end = obj.numFiles();
60 result += obj.fileName (iter) +
"\n";
61 }
catch (std::exception& e)
63 result +=
"\n <file listing not available: " + std::string (e.what()) +
">\n";
73 testInvariant ()
const
90 const std::string& Sample ::
100 name (std::string val_name)
104 throw std::logic_error
105 (
"SH::Sample::name: cannot change name of sample \""
106 + m_name +
"\" after it has been registered in a SampleHandler"
107 " (or otherwise locked via lockName)");
109 m_name = std::move (val_name);
124 std::size_t Sample ::
128 return getNumFiles();
133 std::string Sample ::
134 fileName (
const std::size_t
index)
const
139 std::string result = getFileName (
index);
147 std::unique_ptr<SampleLocal> Sample ::
151 return doMakeLocal ();
156 const TagList& Sample ::
166 tags (
const TagList&
tags)
175 addTag (
const std::string& tag)
184 updateLocation (
const std::string& from,
const std::string& to)
187 doUpdateLocation (from, to);
192 MetaObject *Sample ::
201 const MetaObject *Sample ::
210 std::vector<std::string> Sample ::
211 makeFileList ()
const
214 return doMakeFileList ();
224 std::vector<std::string>
files = makeFileList ();
227 if (treeName.empty())
228 throw std::runtime_error (
"sample " + name() +
" does not have a tree name associated");
229 std::unique_ptr<TChain> result (
new TChain (treeName.c_str()));
231 result->AddFile (
file.c_str());
232 return result.release();
238 doUpdateLocation (
const std::string& ,
const std::string& )
246 readHist (
const std::string& name)
const
249 return doReadHist (name);
255 contains (
const std::string& name)
const
260 return m_name == name || getContains (name);
266 addSamples (SampleHandler& result,
const std::shared_ptr<Sample>& self)
270 doAddSamples (result, self);
279 std::cout <<
dbg (*
this, 9999) << std::endl;
285 printContent ()
const
294 getNumEntries ()
const
301 std::vector<std::string> fileList = makeFileList();
302 for (
const auto& fileName : fileList)
304 std::unique_ptr<TFile>
file (TFile::Open (fileName.c_str(),
"READ"));
305 if (
file.get() ==
nullptr)
306 throw std::runtime_error (
"failed to open file: " + fileName);
307 TTree *
tree =
dynamic_cast<TTree*
>(
file->Get (treeName.c_str()));
309 result +=
tree->GetEntries();
316 TCollection *Sample ::
325 const TCollection *Sample ::
326 metaDataList ()
const
335 removeMeta (
const std::string& name)
338 meta()->remove (name);
344 addReplaceMeta (TNamed *meta_swallow)
346 std::unique_ptr<TNamed> mymeta (meta_swallow);
351 meta()->addReplace (mymeta.release());
357 getMeta (
const std::string& name)
360 return meta()->get (name);
365 const TObject *Sample ::
366 getMeta (
const std::string& name)
const
369 return meta()->get (name);
375 getMetaDouble (
const std::string& name,
double def_val)
const
383 std::string Sample ::
384 getMetaString (
const std::string& name,
const std::string& def_val)
const
393 setMetaDouble (
const std::string& name,
double value)
396 meta()->setDouble (name, value);
402 setMetaString (
const std::string& name,
const std::string& value)
405 meta()->setString (name, value);
411 fetchMeta (
const Sample& source)
414 meta()->fetch (*source.meta());
420 Sample (
const std::string& name)
421 : m_name (name), m_meta (
new MetaObject)
431 Sample (
const Sample& that)
432 : TObject (that), m_name (that.m_name),
433 m_tags (that.m_tags), m_meta (
new MetaObject (*that.m_meta))
441 doReadHist (
const std::string& name)
const
444 std::vector<std::string> fileList (makeFileList());
445 if (fileList.size() > 1)
446 throw std::runtime_error (
"reading histgrams from samples with multiple files is not (yet) implemented");
447 if (fileList.size() == 0)
449 std::unique_ptr<TFile>
file (TFile::Open (fileList[0].c_str(),
"READ"));
451 throw std::runtime_error (
"could not open file " + fileList[0]);
453 TObject *
object =
file->Get (name.c_str());
454 if (
object !=
nullptr)
462 getContains (
const std::string& )
const
471 doAddSamples (SampleHandler& result,
const std::shared_ptr<Sample>& self)