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

#include <map>

#include "TTree.h"

#include "QFramework/TQCut.h"
#include "QFramework/TQAnalysisSampleVisitorBase.h"
#include "QFramework/TQAlgorithm.h"

class TQMultiChannelAnalysisSampleVisitor : public TQAnalysisSampleVisitorBase, public TQAlgorithm::Manager {
 
protected:

  bool fUseObservableSets = true;
  std::map<TString,TQCut*> fChannels;

  bool checkCut(TQCut * baseCut);
  bool checkChannel(const TString& pathPattern);
  
  int analyseTree(TQSample * sample, TString& message);

  virtual int visitFolder(TQSampleFolder * sampleFolder, TString& message) override;
  virtual int revisitFolder(TQSampleFolder * sampleFolder, TString& message) override;
  virtual int visitSample(TQSample * sample, TString& message) override;
  virtual int revisitSample(TQSample * sample, TString& message) override;
  
  bool stampAllFriends(TQSample* sample) const;
  
  
public: 
 
  TQMultiChannelAnalysisSampleVisitor();

  void printChannels();
  void useObservableSets(bool useSets);
  void addChannel(const TString& pathPattern, TQCut * baseCut);
  TQCut * getBaseCut(const TString& path);

  virtual ~TQMultiChannelAnalysisSampleVisitor();
 
  ClassDefOverride(TQMultiChannelAnalysisSampleVisitor, 0); // optimized analysis visitor for parallel reading of multiple channels
 
};

#endif


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