//this file looks like plain C, but it's actually -*- c++ -*-
#ifndef __TQFILTEROBSERVALBLE__
#define __TQFILTEROBSERVALBLE__
#include "QFramework/TQObservable.h"

class TQFilterObservable : public TQObservable {
protected:
  // put here any data members your class might need
 
public:
  virtual double getValue() const override;
  virtual TObjArray* getBranchNames() const override;

  virtual double getValueAt(int index) const override;
  virtual int getNevaluations() const override;
  inline virtual TQObservable::ObservableType
    getObservableType() const override {
        return TQObservable::ObservableType::vector;
    }

protected:
  virtual bool initializeSelf() override;
  virtual bool finalizeSelf() override;
protected:
  TString fExpression = "";
  TString fActiveExpression = "";
  TString fCutString = "";
  TString fValueString = "";
  
  mutable Long64_t fCachedEntry = -1;//!
  mutable std::vector<double> fCachedValues; //!
  bool makeCache() const;

  TQObservable* fCutObs = NULL;
  TQObservable* fValueObs = NULL;

public:
  virtual bool hasExpression() const override;
  virtual const TString& getExpression() const override;
  virtual void setExpression(const TString& expr) override;

  TQFilterObservable();
  TQFilterObservable(const TString& expression);
  virtual ~TQFilterObservable();
public:
  bool parseExpression(const TString& expr);
  void clearParsedExpression();

  virtual TString getActiveExpression() const override;
  virtual Long64_t getCurrentEntry() const override;
  static int registerFactory();

public:
  DECLARE_OBSERVABLE_FACTORY(TQFilterObservable,TString expr)

  ClassDefOverride(TQFilterObservable, 1); //QFramework class

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