//this file looks like plain C, but it's actually -*- c++ -*-
#ifndef __TQAnalysisSampleVisitorBase__
#define __TQAnalysisSampleVisitorBase__

#include "QFramework/TQSampleVisitor.h"
#include "QFramework/TQTaggable.h"
#include "TTree.h"
#include <climits>

class TQAnalysisSampleVisitorBase : public TQSampleVisitor, public TQTaggable {
 
public:
  enum UseBranches {
    AllBranches = 0,
    ReducedBranches = 1,
    TTreeCache = 2
  };
 
protected:
 
  UseBranches fUseBranches;
  bool fDebugMode;
  Long64_t fMaxEvents;
  Long64_t fSkipEvents;  
  bool setupBranches(TTree* tree, TCollection* branchNames);

  virtual int visitFolder(TQSampleFolder * sampleFolder, TString& message)  override = 0;
  virtual int revisitFolder(TQSampleFolder * sampleFolder, TString& message) override = 0;
  virtual int visitSample(TQSample * sample, TString& message) override = 0;
  virtual int revisitSample(TQSample * sample, TString& message) override = 0;
  
public: 
 
  TQAnalysisSampleVisitorBase(const TString& name, bool verbose = false);
  virtual ~TQAnalysisSampleVisitorBase();
  
  virtual int initialize(TQSampleFolder * sampleFolder, TString& message) override;
 
  void setUseBranches(UseBranches branchSetting = ReducedBranches);

  void setDebugMode(bool debug = true);
  void setMaxEvents(Long64_t max = LLONG_MAX);
  void setSkipEvents(Long64_t skip = 0);  
 
  ClassDefOverride(TQAnalysisSampleVisitorBase, 0); // base class for analysis sample visitors
 
};

#endif


 TQAnalysisSampleVisitorBase.h:1
 TQAnalysisSampleVisitorBase.h:2
 TQAnalysisSampleVisitorBase.h:3
 TQAnalysisSampleVisitorBase.h:4
 TQAnalysisSampleVisitorBase.h:5
 TQAnalysisSampleVisitorBase.h:6
 TQAnalysisSampleVisitorBase.h:7
 TQAnalysisSampleVisitorBase.h:8
 TQAnalysisSampleVisitorBase.h:9
 TQAnalysisSampleVisitorBase.h:10
 TQAnalysisSampleVisitorBase.h:11
 TQAnalysisSampleVisitorBase.h:12
 TQAnalysisSampleVisitorBase.h:13
 TQAnalysisSampleVisitorBase.h:14
 TQAnalysisSampleVisitorBase.h:15
 TQAnalysisSampleVisitorBase.h:16
 TQAnalysisSampleVisitorBase.h:17
 TQAnalysisSampleVisitorBase.h:18
 TQAnalysisSampleVisitorBase.h:19
 TQAnalysisSampleVisitorBase.h:20
 TQAnalysisSampleVisitorBase.h:21
 TQAnalysisSampleVisitorBase.h:22
 TQAnalysisSampleVisitorBase.h:23
 TQAnalysisSampleVisitorBase.h:24
 TQAnalysisSampleVisitorBase.h:25
 TQAnalysisSampleVisitorBase.h:26
 TQAnalysisSampleVisitorBase.h:27
 TQAnalysisSampleVisitorBase.h:28
 TQAnalysisSampleVisitorBase.h:29
 TQAnalysisSampleVisitorBase.h:30
 TQAnalysisSampleVisitorBase.h:31
 TQAnalysisSampleVisitorBase.h:32
 TQAnalysisSampleVisitorBase.h:33
 TQAnalysisSampleVisitorBase.h:34
 TQAnalysisSampleVisitorBase.h:35
 TQAnalysisSampleVisitorBase.h:36
 TQAnalysisSampleVisitorBase.h:37
 TQAnalysisSampleVisitorBase.h:38
 TQAnalysisSampleVisitorBase.h:39
 TQAnalysisSampleVisitorBase.h:40
 TQAnalysisSampleVisitorBase.h:41
 TQAnalysisSampleVisitorBase.h:42
 TQAnalysisSampleVisitorBase.h:43
 TQAnalysisSampleVisitorBase.h:44
 TQAnalysisSampleVisitorBase.h:45
 TQAnalysisSampleVisitorBase.h:46
 TQAnalysisSampleVisitorBase.h:47
 TQAnalysisSampleVisitorBase.h:48
 TQAnalysisSampleVisitorBase.h:49
 TQAnalysisSampleVisitorBase.h:50
 TQAnalysisSampleVisitorBase.h:51