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

#include "QFramework/TQAnalysisJob.h"
#include "QFramework/TQObservable.h"
#include "QFramework/TQTable.h"
#include "TObject.h"
#include "TList.h"
#include "QFramework/TQMessageStream.h"

#include <vector>

class TQCounter;
class TQSample;


class TQEventlistAnalysisJob : public TQAnalysisJob {
protected:
 
  std::vector<TString> fTitles;
  std::vector<TString> fExpressions;
  std::vector<TQObservable*> fObservables;
  int nFormulas;
 
  TQTable * fEventlist; //!
  Long64_t fEventIndex;
 
  bool showWeightColumn;

  static TQMessageStream f_ErrMsg;
  int f_Verbose;

  void setErrorMessage(TString message);
 
public:

  TQEventlistAnalysisJob();
  TQEventlistAnalysisJob(const TString& name_);

  virtual void reset() override;
  void addColumn(const TString& expression, const TString& label = "");
  void setWeightColumn(bool weight = true);

  static TString getErrorMessage();
  static void clearMessages();

  virtual TObjArray * getBranchNames() override;
  virtual TQEventlistAnalysisJob* getClone() override;

  virtual bool initializeSelf() override;
  virtual bool finalizeSelf() override;

  int nColumns() const;

  static int importJobsFromTextFiles(const TString& files, TQCut* basecut, const TString& channelFilter="*", bool verbose=false);
  static int importJobsFromTextFiles(const std::vector<TString>& filenames, TQCut* basecut, const TString& channelFilter="*", bool verbose=false);
  static int importJobsFromTextFiles(const TString& files, TQCut* basecut, TQTaggable* aliases, const TString& channelFilter="*", bool verbose=false);
  static int importJobsFromTextFiles(const std::vector<TString>& filenames, TQCut* basecut, TQTaggable* aliases, const TString& channelFilter="*", bool verbose=false);

  virtual bool execute(double weight) override;
 
  virtual ~TQEventlistAnalysisJob();
 
  ClassDefOverride(TQEventlistAnalysisJob, 0); // analysis job that creates an event list

};

#endif
 TQEventlistAnalysisJob.h:1
 TQEventlistAnalysisJob.h:2
 TQEventlistAnalysisJob.h:3
 TQEventlistAnalysisJob.h:4
 TQEventlistAnalysisJob.h:5
 TQEventlistAnalysisJob.h:6
 TQEventlistAnalysisJob.h:7
 TQEventlistAnalysisJob.h:8
 TQEventlistAnalysisJob.h:9
 TQEventlistAnalysisJob.h:10
 TQEventlistAnalysisJob.h:11
 TQEventlistAnalysisJob.h:12
 TQEventlistAnalysisJob.h:13
 TQEventlistAnalysisJob.h:14
 TQEventlistAnalysisJob.h:15
 TQEventlistAnalysisJob.h:16
 TQEventlistAnalysisJob.h:17
 TQEventlistAnalysisJob.h:18
 TQEventlistAnalysisJob.h:19
 TQEventlistAnalysisJob.h:20
 TQEventlistAnalysisJob.h:21
 TQEventlistAnalysisJob.h:22
 TQEventlistAnalysisJob.h:23
 TQEventlistAnalysisJob.h:24
 TQEventlistAnalysisJob.h:25
 TQEventlistAnalysisJob.h:26
 TQEventlistAnalysisJob.h:27
 TQEventlistAnalysisJob.h:28
 TQEventlistAnalysisJob.h:29
 TQEventlistAnalysisJob.h:30
 TQEventlistAnalysisJob.h:31
 TQEventlistAnalysisJob.h:32
 TQEventlistAnalysisJob.h:33
 TQEventlistAnalysisJob.h:34
 TQEventlistAnalysisJob.h:35
 TQEventlistAnalysisJob.h:36
 TQEventlistAnalysisJob.h:37
 TQEventlistAnalysisJob.h:38
 TQEventlistAnalysisJob.h:39
 TQEventlistAnalysisJob.h:40
 TQEventlistAnalysisJob.h:41
 TQEventlistAnalysisJob.h:42
 TQEventlistAnalysisJob.h:43
 TQEventlistAnalysisJob.h:44
 TQEventlistAnalysisJob.h:45
 TQEventlistAnalysisJob.h:46
 TQEventlistAnalysisJob.h:47
 TQEventlistAnalysisJob.h:48
 TQEventlistAnalysisJob.h:49
 TQEventlistAnalysisJob.h:50
 TQEventlistAnalysisJob.h:51
 TQEventlistAnalysisJob.h:52
 TQEventlistAnalysisJob.h:53
 TQEventlistAnalysisJob.h:54
 TQEventlistAnalysisJob.h:55
 TQEventlistAnalysisJob.h:56
 TQEventlistAnalysisJob.h:57
 TQEventlistAnalysisJob.h:58
 TQEventlistAnalysisJob.h:59
 TQEventlistAnalysisJob.h:60
 TQEventlistAnalysisJob.h:61
 TQEventlistAnalysisJob.h:62
 TQEventlistAnalysisJob.h:63
 TQEventlistAnalysisJob.h:64
 TQEventlistAnalysisJob.h:65
 TQEventlistAnalysisJob.h:66
 TQEventlistAnalysisJob.h:67
 TQEventlistAnalysisJob.h:68
 TQEventlistAnalysisJob.h:69