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

#include "QFramework/TQNamedTaggable.h"
#include "QFramework/TQSampleDataReader.h"

class TQPresenter : public TQTaggable {

protected:

  TQSampleDataReader * fReader;
  bool fOwnerOfReader;

  TQFolder* fNormalizationInfo;

  TObjArray * fCuts; 
  TObjArray * fProcesses;

  TQFolder* fSystematics; 

  virtual TQNamedTaggable* getProcess(const TString& name);
  virtual TQNamedTaggable* getCut(const TString& name);
  virtual const TQNamedTaggable* getProcessConst(const TString& name) const;
  virtual const TQNamedTaggable* getCutConst(const TString& name) const;

public:

  virtual bool hasProcess(const TString& name) const;
  virtual bool hasCut(const TString& name) const;

  TQPresenter();
  TQPresenter(TQSampleDataReader* reader);
  TQPresenter(TQSampleFolder* samples);
  virtual ~TQPresenter();

  virtual void reset();

  virtual void resetProcesses();
  virtual void clearProcesses();
  virtual void printProcesses();

  virtual int nProcesses() const;
  virtual int nCuts() const;

  virtual void resetCuts();
  virtual void clearCuts();
  virtual void printCuts();

  virtual bool loadSystematics(const TString& path, const TString& id);
  virtual bool loadSystematics(const TString& importPath);
  TQFolder* getSystematics(const TString& id);
  bool loadSystematics(TQFolder* f);

  TQFolder* setNormalizationInfo(const TString& path);
  void setNormalizationInfo(TQFolder* f);
  TQFolder* getNormalizationInfo();

  virtual int sanitizeProcesses();
  virtual int sanitizeCuts();

  virtual TQSampleDataReader * getReader();
  virtual void setReader(TQSampleDataReader * reader);

  virtual void setSampleFolder(TQSampleFolder* sf);
  virtual TQSampleFolder* getSampleFolder();

  virtual void addCut (const TString& cutName, const TString& cutTitle, const TString& tags);
  virtual void addProcess(const TString& processName, const TString& processTitle, const TString& tags);
  virtual void addCut (const TString& cutName, const TString& cutTitle, TQTaggable& tags);
  virtual void addProcess(const TString& processName, const TString& processTitle, TQTaggable& tags);
  virtual void addCut (const TString& cutName, const TString& tags);
  virtual void addProcess(const TString& processName, const TString& tags);
  virtual void addCut (const TString& cutName, TQTaggable& tags);
  virtual void addProcess(const TString& processName, TQTaggable& tags);
  virtual void addProcess(const TString& processName, TQTaggable* tags);
  virtual void addCut (const TString& tags);
  virtual void addProcess(const TString& tags);
  virtual void addCut (TQTaggable& tags);
  virtual void addProcess(TQTaggable& tags);

  virtual TString getCutTitle(const TString& cutName) const;
  virtual TString getProcessTitle(const TString& processName) const;
  virtual TString getCutTags(const TString& cutName) const;
  virtual TString getProcessTags(const TString& processName) const;

  virtual TCollection* getListOfProcessNames() const;
  virtual TCollection* getListOfCutNames() const;
  virtual TString getProcessPath(const TString& processName) const;

  virtual std::vector<TString> getProcessPaths(const TString& processFilter) const;
  virtual int appendProcessPaths(const TString& processFilter, std::vector<TString>* paths) const;
  virtual int appendProcessPaths(const TString& processFilter, std::vector<TString>& paths) const;

  virtual void exportScheme(TQTaggable* tags);
  virtual void importScheme(TQTaggable* tags);
  virtual void importSchemeFromPath(const TString& path);

  virtual int importProcesses(const TQPresenter* other);
  virtual int importCuts(const TQPresenter* other);

  virtual int importProcessesFromFile(const TString& fileName,const TString& tags = "");
  virtual int importCutsFromFile(const TString& fileName, const TString& tags = "");
  virtual int importProcessesFromFile(const TString& fileName,TQTaggable& tags);
  virtual int importCutsFromFile(const TString& fileName, TQTaggable& tags);
  virtual int exportProcessesToFile(const TString& fileName,const TString& tags = "");
  virtual int exportCutsToFile(const TString& fileName, const TString& tags = "");
  virtual int exportProcessesToFile(const TString& fileName,TQTaggable& tags);
  virtual int exportCutsToFile(const TString& fileName, TQTaggable& tags);

  void removeProcessesByName(const TString& nameFilter);
  void removeCutsByName(const TString& nameFilter);

  ClassDefOverride(TQPresenter,0) // abstract base class for data visualizations

};

#endif
 TQPresenter.h:1
 TQPresenter.h:2
 TQPresenter.h:3
 TQPresenter.h:4
 TQPresenter.h:5
 TQPresenter.h:6
 TQPresenter.h:7
 TQPresenter.h:8
 TQPresenter.h:9
 TQPresenter.h:10
 TQPresenter.h:11
 TQPresenter.h:12
 TQPresenter.h:13
 TQPresenter.h:14
 TQPresenter.h:15
 TQPresenter.h:16
 TQPresenter.h:17
 TQPresenter.h:18
 TQPresenter.h:19
 TQPresenter.h:20
 TQPresenter.h:21
 TQPresenter.h:22
 TQPresenter.h:23
 TQPresenter.h:24
 TQPresenter.h:25
 TQPresenter.h:26
 TQPresenter.h:27
 TQPresenter.h:28
 TQPresenter.h:29
 TQPresenter.h:30
 TQPresenter.h:31
 TQPresenter.h:32
 TQPresenter.h:33
 TQPresenter.h:34
 TQPresenter.h:35
 TQPresenter.h:36
 TQPresenter.h:37
 TQPresenter.h:38
 TQPresenter.h:39
 TQPresenter.h:40
 TQPresenter.h:41
 TQPresenter.h:42
 TQPresenter.h:43
 TQPresenter.h:44
 TQPresenter.h:45
 TQPresenter.h:46
 TQPresenter.h:47
 TQPresenter.h:48
 TQPresenter.h:49
 TQPresenter.h:50
 TQPresenter.h:51
 TQPresenter.h:52
 TQPresenter.h:53
 TQPresenter.h:54
 TQPresenter.h:55
 TQPresenter.h:56
 TQPresenter.h:57
 TQPresenter.h:58
 TQPresenter.h:59
 TQPresenter.h:60
 TQPresenter.h:61
 TQPresenter.h:62
 TQPresenter.h:63
 TQPresenter.h:64
 TQPresenter.h:65
 TQPresenter.h:66
 TQPresenter.h:67
 TQPresenter.h:68
 TQPresenter.h:69
 TQPresenter.h:70
 TQPresenter.h:71
 TQPresenter.h:72
 TQPresenter.h:73
 TQPresenter.h:74
 TQPresenter.h:75
 TQPresenter.h:76
 TQPresenter.h:77
 TQPresenter.h:78
 TQPresenter.h:79
 TQPresenter.h:80
 TQPresenter.h:81
 TQPresenter.h:82
 TQPresenter.h:83
 TQPresenter.h:84
 TQPresenter.h:85
 TQPresenter.h:86
 TQPresenter.h:87
 TQPresenter.h:88
 TQPresenter.h:89
 TQPresenter.h:90
 TQPresenter.h:91
 TQPresenter.h:92
 TQPresenter.h:93
 TQPresenter.h:94
 TQPresenter.h:95
 TQPresenter.h:96
 TQPresenter.h:97
 TQPresenter.h:98
 TQPresenter.h:99
 TQPresenter.h:100
 TQPresenter.h:101
 TQPresenter.h:102
 TQPresenter.h:103
 TQPresenter.h:104
 TQPresenter.h:105
 TQPresenter.h:106
 TQPresenter.h:107
 TQPresenter.h:108
 TQPresenter.h:109
 TQPresenter.h:110
 TQPresenter.h:111
 TQPresenter.h:112
 TQPresenter.h:113
 TQPresenter.h:114
 TQPresenter.h:115
 TQPresenter.h:116
 TQPresenter.h:117
 TQPresenter.h:118