64 result <<
"SampleHandler with " <<
obj.size() <<
" files";
79 void swap (SampleHandler&
a, SampleHandler&
b)
81 swap (
a.m_samples,
b.m_samples);
82 swap (
a.m_named,
b.m_named);
88 testInvariant ()
const
104 SampleHandler (
const SampleHandler& that)
105 : TObject (that), m_samples (that.m_samples), m_named (that.m_named)
124 SampleHandler
tmp (that);
134 SamplePtr mysample (
sample);
160 if (!
sample->name().empty() && m_named.find (
sample->name()) != m_named.end())
161 RCU_THROW_MSG (
"can't add sample of name " +
sample->name() +
"\na sample with that name already exists\nold sample:\n" +
dbg (*m_named.find (
sample->name())->second, 9999) +
"\nnew sample:\n" +
dbg (*
sample, 9999));
165 m_samples.push_back (
sample.get());
166 if (!
sample->name().empty())
170 if (m_samples.back() ==
sample.get())
171 m_samples.pop_back();
186 add (
const SampleHandler&
sh)
192 iter != end2; ++ iter)
200 void SampleHandler ::
201 addWithPrefix (
const SampleHandler&
sh,
const std::string&
prefix)
207 iter != end2; ++ iter)
209 std::unique_ptr<Sample>
sample (
dynamic_cast<Sample*
>((*iter)->Clone ()));
236 NamedMIter nameIter = m_named.find (
sample->name());
237 if (nameIter == m_named.end())
239 if (nameIter->second.get() !=
sample)
241 std::erase (m_samples,
sample);
242 m_named.erase (nameIter);
252 NamedIter iter = m_named.find (
name);
253 if (iter != m_named.end())
254 return iter->second.get();
260 get (
const std::string&
name)
const
264 auto iter = m_named.find (
name);
265 if (iter != m_named.end())
266 return iter->second.get();
273 find (
const std::string&
tags)
const
288 for (SamplesIter
sample = m_samples.begin(),
293 end =
tags.end(); !use && iter !=
end; ++ iter)
294 use = (*sample)->tags().has (*iter);
303 Sample *SampleHandler ::
304 findBySource (
const std::string&
name)
const
308 std::vector<Sample*>
result;
312 if (
name == (*sample)->meta()->castString (MetaFields::sourceSample, (*sample)->name()))
318 message <<
"multiple samples have " <<
name <<
" as a source:";
319 for (std::vector<Sample*>::const_iterator
sample =
result.begin(),
321 message <<
" " << (*sample)->name();
331 SampleHandler SampleHandler ::
332 findByName (
const std::string&
pattern)
const
351 std::cout <<
dbg (*
this, 9999) << std::endl;
356 void SampleHandler ::
357 printContent ()
const
372 gSystem->MakeDirectory (
directory.c_str());
376 TFile
file ((
directory +
"/" + (*iter)->name() +
".root").c_str(),
"RECREATE");
377 (*iter)->Write (
"sample");
391 const std::string
file =
mydir.fileName();
393 if (
file.size() > 5 &&
394 file.rfind (
".root") ==
file.size() - 5)
396 TFile myfile (
mydir.path().c_str(),
"READ");
397 Sample *
const sample =
dynamic_cast<Sample*
>(myfile.Get (
"sample"));
406 void SampleHandler ::
407 updateLocation (
const std::string& from,
const std::string&
to)
414 (*sample)->updateLocation (from,
to);
419 void SampleHandler ::
420 fetch (
const SampleHandler&
source)
427 const std::string
name
428 = (*sample)->meta()->castString (MetaFields::sourceSample, (*sample)->name());
429 const Sample *
const mysource =
source.get (
name);
431 (*sample)->meta()->fetch (*mysource->meta());
437 void SampleHandler ::
438 fetchDefaults (
const SampleHandler&
source)
445 const std::string
name
446 = (*sample)->meta()->castString (MetaFields::sourceSample, (*sample)->name());
447 const Sample *
const mysource =
source.get (
name);
449 (*sample)->meta()->fetchDefaults (*mysource->meta());
455 bool SampleHandler ::
456 check_complete (
const SampleHandler&
source)
const
460 std::set<std::string>
names;
464 names.insert ((*sample)->meta()->castString (MetaFields::sourceSample, (*sample)->name()));
470 if (
names.find ((*sample)->name()) ==
names.end())
478 void SampleHandler ::
479 setMetaDouble (
const std::string&
name,
double value)
486 (*sample)->meta()->setDouble (
name,
value);
492 void SampleHandler ::
493 setMetaString (
const std::string&
name,
const std::string&
value)
500 (*sample)->meta()->setString (
name,
value);
506 void SampleHandler ::
507 setMetaDouble (
const std::string&
pattern,
const std::string&
name,
518 (*sample)->meta()->setDouble (
name,
value);
524 void SampleHandler ::
525 setMetaString (
const std::string&
pattern,
const std::string&
name,
526 const std::string&
value)
536 (*sample)->meta()->setString (
name,
value);
546 return m_samples.begin();
555 return m_samples.end();
564 return m_samples.size();
578 Sample *SampleHandler ::
579 at (std::size_t
index)
const
583 return m_samples[
index];
588 void SampleHandler ::
589 Streamer (TBuffer&
b)
597 for (ULong_t iter = 0; iter !=
count; ++ iter)
607 ULong_t
count = m_samples.size(), count2 = 0;
609 for (SamplesIter iter = m_samples.begin(),
610 end = m_samples.end(); iter !=
end; ++ iter, ++ count2)