1#ifndef __JSUPPORT__JTREESCANNER__ 
    2#define __JSUPPORT__JTREESCANNER__ 
   53  template<
class JClass_t>
 
   55    public JPointer< JChainReader<JClass_t> >
 
  101      gErrorIgnoreLevel = kError;
 
 
 
  115  template<
class JClass_t = JNullType, 
class JEvaluator_t = JNullType>
 
  138  template<
class JDerived_t, 
class JBase_t>
 
  143    public JEquals< JTreeScanner<JAssertConversion<JDerived_t, JBase_t>, JNullType> >
 
  193      return (this->getLimit()    == 
object.getLimit()    &&
 
  194              this->getFilelist() == 
object.getFilelist());
 
 
  214      if (counter < this->getLowerLimit()) {
 
  215        skip(this->getLowerLimit() - counter);
 
  218      return (counter < this->getEntries()  &&
 
  219              counter < this->getUpperLimit());
 
 
  230      if (this->hasNext()) {
 
  232        this->get()->GetEvent(counter++);
 
  234        ps.reset(this->get()->getAddress());
 
 
  265      using namespace JROOT;
 
  267      this->setLimit(limit);
 
  271      this->get()->Reset();
 
  275        TFile* file = TFile::Open(i->c_str());
 
  279          if (file->GetListOfKeys()->Contains(this->get()->getTreeName())) { 
 
  280            this->get()->Add(i->c_str());
 
 
  301      return this->get()->GetEntries();
 
 
  313      if (index >= 0 && index < this->getEntries()) {
 
  315        this->get()->GetEvent(index);
 
  317        return this->get()->getAddress();
 
 
  342      return JDerived_t::Class_Name();
 
 
 
  358  template<
class JClass_t>
 
  360    public JTreeScanner<JAssertConversion<JClass_t, JClass_t>, JNullType>
 
 
  406  template<
class JDerived_t, 
class JBase_t, 
class JEvaluator_t>
 
  409    public JTreeScanner<JAssertConversion<JDerived_t, JBase_t>, JNullType>
 
  438                 const JEvaluator_t&           evaluator = JEvaluator_t()) :
 
 
  454                 const JEvaluator_t&           evaluator = JEvaluator_t()) :
 
 
  468      if (this->hasNext()) {
 
  470        this->get()->GetEvent(queue[this->counter++].index);
 
  472        ps.reset(this->get()->getAddress());
 
 
  495      setBranchStatus(this->get()->GetBranch(this->get()->getBranchName()), 
BRANCH_PATTERN, 
false);
 
  497      queue.resize(this->getEntries());
 
  499      typename queue_type::iterator out = queue.begin();
 
  501      for (Long64_t i = 0, n0 = 0; i != this->getEntries(); ++i, ++out) {
 
  503        const Long64_t n1 = (100 * (i + 1)) / this->getEntries();
 
  507          STATUS(left << setw(24) << this->get()->GetName() << right << 
' ' << setw(3) << n1 << 
"%\r"); 
DEBUG(endl);
 
  512        this->get()->GetEvent(i);
 
  514        const data_type* p = this->get()->getAddress();
 
  518      STATUS(left << setw(24) << this->get()->GetName() << right << endl);
 
  520      this->get()->SetBranchStatus(
"*", 1);
 
  522      sort(queue.begin(), queue.end());
 
 
  534      if (index >= 0 && index < (Long64_t) queue.size()) {
 
  536        this->get()->GetEvent(queue[index].index);
 
  538        return this->get()->getAddress();
 
 
  557      if (!queue.empty()) {
 
  559        typename queue_type::const_iterator p = lower_bound(queue.begin(), queue.end(), value);
 
  561        if        (p == queue.end()) {
 
  563          return queue.size() - 1;
 
  565        } 
else if (p == queue.begin()) {
 
  571          typename queue_type::const_iterator q = p--;
 
  573          if (value - p->value < q->value - value)
 
 
  632        return entry.
value < value;
 
 
 
  660      if (branch != NULL) {
 
  662        TObjArray* 
array  = branch->GetListOfBranches();
 
  664        for (Int_t i = 0; i != 
array->GetEntries(); ++i) {
 
  666          TBranch* p = (TBranch*) 
array->At(i);
 
  668          if (p != NULL && 
string(p->GetName()).find(pattern) != string::npos) {
 
  670            if (p->GetSplitLevel() == 0) {
 
  672              NOTICE(
"Set status of branch " << p->GetName() << 
" to " << status << endl);
 
  674              p->SetStatus(status);
 
  678            setBranchStatus(p, pattern, status);
 
 
 
  695  template<
class JClass_t, 
class JEvaluator_t>
 
  697    public JTreeScanner<JAssertConversion<JClass_t, JClass_t>, JEvaluator_t>
 
  714                 const JEvaluator_t&           evaluator = JEvaluator_t()) :
 
 
  728                 const JEvaluator_t&           evaluator = JEvaluator_t()) :
 
 
 
TChain reading for template data type.
 
std::ostream & rewind(std::ostream &out)
Rewind character.
 
General purpose messaging.
 
#define DEBUG(A)
Message macros.
 
Scanning of objects from multiple files according a format that follows from the extension of each fi...
 
Type definition for counter for ROOT TTree and auxiliary methods.
 
Data type dependent action methods for customised ROOT version management.
 
Scanning of objects from a single file according a format that follows from the extension of each fil...
 
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
 
bool is_valid() const
Check validity of pointer.
 
Auxialiary class to assert type conversion.
 
Template implementation of class that holds pointer to object(s).
 
virtual JClass_t * get() const override
Get pointer.
 
Auxiliary class for template TChain reading.
 
General purpose class for object reading from a list of file names.
 
Auxiliary interface for direct access of elements in ROOT TChain.
 
JEvaluator_t::value_type value_type
Type definition of time value.
 
JTreeScanner()
Default constructor.
 
virtual const pointer_type & next() override
Get next element.
 
std::vector< JEntry_t > queue_type
Type definition of internal queue for ordering the elements in the TChain.
 
JTreeScanner(const JMultipleFileScanner_t &file_list, const JLimit &limit, const JEvaluator_t &evaluator=JEvaluator_t())
Constructor.
 
JTreeScanner(const JMultipleFileScanner_t &file_list, const JEvaluator_t &evaluator=JEvaluator_t())
Constructor.
 
virtual data_type * getEntry(Long64_t index) override
Get entry at given index.
 
virtual Long64_t find(const value_type value) const override
Find index of element that is closest in value to given value.
 
static void setBranchStatus(TBranch *branch, const char *pattern, const bool status)
Set status of branch.
 
virtual void configure(const JMultipleFileScanner_t &file_list, const JLimit &limit) override
Configure.
 
JTreeScannerInterface< JBase_t, JEvaluator_t >::value_type value_type
 
JTreeScannerInterface< JBase_t, JEvaluator_t >::pointer_type pointer_type
 
virtual void rewind() override
Rewind.
 
JTreeScanner(const JMultipleFileScanner_t &file_list, const JLimit &limit=JLimit())
Constructor.
 
bool equals(const JTreeScanner &object) const
Check equality.
 
JTreeScanner()
Default constructor.
 
virtual const pointer_type & next() override
Get next element.
 
virtual skip_type skip(const skip_type ns) override
Skip items.
 
virtual data_type * getEntry(Long64_t index) override
Get entry at given index.
 
virtual Long64_t getEntries() const override
Get number of entries.
 
JTreeScannerInterface< JBase_t >::pointer_type pointer_type
 
virtual void configure(const JMultipleFileScanner_t &file_list, const JLimit &limit) override
Configure.
 
virtual bool hasNext() override
Check availability of next element.
 
JTreeScanner(const JTreeScanner &input)
Copy constructor.
 
virtual const char * getClassName() const override
Get actual class name.
 
virtual counter_type getCounter() const override
Get internal counter.
 
JTreeScanner()
Default constructor.
 
JTreeScanner(const JTreeScanner &input)
Copy constructor.
 
JTreeScanner(const JMultipleFileScanner_t &file_list, const JLimit &limit=JLimit())
Constructor.
 
Base class for JTreeScanner.
 
~JTreeScanner_t()
Destructor.
 
JTreeScanner_t()
Default constructor.
 
JMultipleFileScanner_t getFilelist() const
Get file list.
 
Template definition for direct access of elements in ROOT TChain.
 
JTreeScanner(const JMultipleFileScanner_t &file_list, const JLimit &limit, const JEvaluator_t &evaluator=JEvaluator_t())
Constructor.
 
JTreeScanner()
Default constructor.
 
JTreeScanner(const JMultipleFileScanner_t &file_list, const JEvaluator_t &evaluator=JEvaluator_t())
Constructor.
 
double getValue(const JScale_t scale)
Get numerical value corresponding to scale.
 
unsigned int skip_type
Type definition for number of objects to skip.
 
bool equals(const JFirst_t &first, const JSecond_t &second, const double precision=std::numeric_limits< double >::min())
Check equality.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Auxiliary classes and methods for ROOT I/O.
 
counter_type advance(counter_type &counter, const counter_type value, const counter_type limit=std::numeric_limits< counter_type >::max())
Advance counter.
 
void actionAtFileOpen(TFile *file)
General action method at file open.
 
Long64_t counter_type
Type definition for counter.
 
Support classes and methods for experiment specific I/O.
 
static const char *const BRANCH_PATTERN
Pattern match for names of sub-branches that will not be read when ordering elements in a TTree.
 
Auxiliary class for handling debug parameter within a class.
 
Template definition of auxiliary base class for comparison of data structures.
 
Auxiliary class for no type definition.
 
Auxiliary class for defining the range of iterations of objects.
 
Auxiliary base class for list of file names.
 
Auxiliary data structure for sorting of objects in TChain.
 
friend bool operator<(const JEntry_t &entry, const value_type value)
Comparison between TChain entry and value.
 
Long64_t index
index in TChain
 
JEntry_t(const Long64_t index, const value_type value)
Constructor.
 
friend bool operator<(const JEntry_t &first, const JEntry_t &second)
Comparison between two TChain entries.
 
value_type value
corresponding value
 
JEntry_t()
Default constructor.